android_kernel_xiaomi_sm8350/drivers/infiniband/core
Roland Dreier a394f83bdf IB/umad: Fix bit ordering and 32-on-64 problems on big endian systems
The declaration of struct ib_user_mad_reg_req.method_mask[] exported
to userspace was an array of __u32, but the kernel internally treated
it as a bitmap made up of longs.  This makes a difference for 64-bit
big-endian kernels, where numbering the bits in an array of__u32 gives:

    |31.....0|63....31|95....64|127...96|

while numbering the bits in an array of longs gives:

    |63..............0|127............64|

64-bit userspace can handle this by just treating method_mask[] as an
array of longs, but 32-bit userspace is really stuck: the meaning of
the bits in method_mask[] depends on whether the kernel is 32-bit or
64-bit, and there's no sane way for userspace to know that.

Fix this by updating <rdma/ib_user_mad.h> to make it clear that
method_mask[] is an array of longs, and using a compat_ioctl method to
convert to an array of 64-bit longs to handle the 32-on-64 problem.
This fixes the interface description to match existing behavior (so
working binaries continue to work) in almost all situations, and gives
consistent semantics in the case of 32-bit userspace that can run on
either a 32-bit or 64-bit kernel, so that the same binary can work for
both 32-on-32 and 32-on-64 systems.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
2007-10-09 19:59:15 -07:00
..
addr.c RDMA/cma: Use neigh_event_send() to start neighbour discovery 2007-10-09 19:59:13 -07:00
agent.c IB/mad: agent_send_response() should be void 2007-08-03 10:45:17 -07:00
agent.h IB/mad: agent_send_response() should be void 2007-08-03 10:45:17 -07:00
cache.c Detach sched.h from mm.h 2007-05-21 09:18:19 -07:00
cm_msgs.h IB/cm: cm_msgs.h should include ib_cm.h 2007-07-10 21:50:53 -07:00
cm.c IB/cm: Make internal function cm_get_ack_delay() static 2007-07-17 18:37:43 -07:00
cma.c RDMA/cma: Add ability to specify type of service 2007-10-09 19:59:12 -07:00
core_priv.h
device.c IB: find_first_zero_bit() takes unsigned pointer 2007-10-09 19:59:04 -07:00
fmr_pool.c IB/fmr_pool: Clean up some error messages in fmr_pool.c 2007-10-09 19:59:05 -07:00
iwcm.c
iwcm.h
mad_priv.h
mad_rmpp.c IB/mad: Fix address handle leak in mad_rmpp 2007-08-03 10:45:17 -07:00
mad_rmpp.h
mad.c IB/mad: Fix memory leak in switch handling in ib_mad_recv_done_handler() 2007-08-03 10:45:17 -07:00
Makefile IB/uverbs: Export ib_umem_get()/ib_umem_release() to modules 2007-05-08 18:00:37 -07:00
multicast.c IB/core: Fix handling of multicast response failures 2007-10-09 19:59:14 -07:00
packer.c
sa_query.c IB/sa: Add new QoS fields to path record 2007-10-09 19:59:12 -07:00
sa.h IB: Remove garbage non-ASCII characters from comments 2007-07-09 16:17:32 -07:00
smi.c IB/mad: Enhance SMI for switch support 2007-07-09 16:17:32 -07:00
smi.h IB/mad: Enhance SMI for switch support 2007-07-09 16:17:32 -07:00
sysfs.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband 2007-07-12 16:45:40 -07:00
ucm.c IB/cm: Include HCA ACK delay in local ACK timeout 2007-07-10 21:50:05 -07:00
ucma.c RDMA/ucma: Allow user space to set service type 2007-10-09 19:59:12 -07:00
ud_header.c
umem.c IB/umem: Add hugetlb flag to struct ib_umem 2007-10-09 19:59:13 -07:00
user_mad.c IB/umad: Fix bit ordering and 32-on-64 problems on big endian systems 2007-10-09 19:59:15 -07:00
uverbs_cmd.c IB/uverbs: Export ib_umem_get()/ib_umem_release() to modules 2007-05-08 18:00:37 -07:00
uverbs_main.c IB/uverbs: Export ib_umem_get()/ib_umem_release() to modules 2007-05-08 18:00:37 -07:00
uverbs_marshall.c
uverbs.h IB/uverbs: Export ib_umem_get()/ib_umem_release() to modules 2007-05-08 18:00:37 -07:00
verbs.c