This directory contains logic for priviledged verbs aka user mode control
path to support libibverbs. It is based off linux-4.1.15 snapshot of
drivers/infiniband/hw/mlx4/. Changes on top of baseline are described
here.

Some common reasons for changes to baseline source:

HF1:	Linux source code that #includes standard linux header files eg
	linux/list.h, linux/idr.h had to be modified since these headers
	are absent in akaros.

HF2:	Headers copied from Linux eg rdma/ib_verbs.h were placed in akaros
	in linux/rdma/ib_verbs.h.

HF3:	Some changes were done to pull in lesser header files from Linux.

Per file listing of changes:

user.h, cq.c, doorbell.c, mr.c, srq.c, qp.c, mlx4_ib.h, main.c:	HF1
main.c: HF2
mlx4_ib.h: HF3 (ib_sa.h)

qp.c:	Avoid compiling/linking big chunk of code, while providing
	panic-stub mandatory function vectors (checked by
	ib_device_check_mandatory()).

main.c:	Stubs to reduce including other mlx4/ source files.
	Akaros version of mlx4_ib_mmap()
	Akaros does not have dev->dev->persist->pdev->device
	Akaros does not have dev->persist->pdev->bus->name
	Sysfs elimination
	Reduced uverbs_cmd_mask and mlx4 function vector for minimal support
	No register_netdevice_notifier() and register_inetaddr_notifier()
	No netdev/inet events ... generally no netdev hook up
	Panic-stub eth_link_query_port() because dependencies on netdev

Makefile: Compilation of this directory depends on CONFIG_MLX4_INFINIBAND,
	which must be selected in build config. Use -Wno-pointer-sign (for
	main.c mlx4_ib_add() mlx4_counter_alloc() call) and -include local
	compatibility header file (sometimes overriding akaros compatibility
	definitions).
