blob: bf8a3afacb65fa9a2dfa595cec32090db9def95a [file] [log] [blame]
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/core/. 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:
Makefile: -include local compatibility header file (sometimes overriding
akaros compatibility definitions). -Wno-maybe-uninitialized option
needed to suppress warning in uverbs_cmd.c:__uverbs_create_xsrq():attr.
compat.h: Used by udrvr/ and mlx4u/ code via Makefile -include
directive as compatibility header file (sometimes overriding akaros
compatibility definitions).
uverbs.h: HF1, HF2
compat.c: Place holder file to add akaros specific hooks
device.c: HF1, HF2
Add stubs for unrequired logic pieces
Stubbed kobject_put()
uverbs_cmd.c: HF1
Misc stubs, including ib_resolve_eth_l2_attrs()
XRCD logic deleted
ib_uverbs_create_comp_channel() logic panic-stubbed, since it is
VFS specific.
ib_uverbs_get_context() event file related logic gutted out, since
it is VFS specific.
uverbs_main.c: HF1
Stubbed out all user event file related logic. Including any reference
to struct ib_uverbs_file->async_file.
Misc stubs
verbs.c: HF1, HF2
ib_init_ah_from_wc() panic-stubbed because AH unsupported.
ib_resolve_eth_l2_attrs() panic-stubbed because L2 addr routines
unsupported.
umem.c: HF1
Delete unrequired functions.
Akaros MM changes.
Other files provided for core libibverbs support in kern/include/linux/rdma,
baselined off linux-4.1.15 snapshot:
ib_umem.h: HF1, turn on CONFIG_INFINIBAND_USER_MEM
(Baselined off include/rdma/ib_umem.h)
ib_user_verbs.h: HF1
(Baselined off include/uapi/rdma/ib_user_verbs.h)
TODO:
1. linux pgprot_noncached() adds _PAGE_PCD ie bit 4, which is akaros PTE_PCD.
Akaros PTE_NOCACHE also sets bit 3 ie _PAGE_PWT (which seems wrong?)
2. linux pgprot_writecombine() defaults to pgprot_noncached() when pat is not
enabled, otherwise just sets bit 3 ie _PAGE_PWT. PAT usage needed.
3. iboe_get_mtu() dependencies
4. query_qp API with older libibverbs inconsistent due to
"struct ib_uverbs_qp_dest" size difference with kernel.
5. Completion channels not implemented.
(http://linux.die.net/man/3/ibv_ack_cq_events)
6. HW driver's vendor/device/vsd strings are not being picked up from lower
level driver in sysfs_create(), but rather hardcoded.
7. Port of include/linux/rdma/ib_verbs.h killed the "mutex" field in
"struct ib_uobject". Need to add that back in and remove hacks in
uverbs_cmd.c for up_read(), up_write() and friends.