forked from Minki/linux
958d2c1ba3
What is going on here is a bit subtle, in the kernel there is no problem because the struct is copied using copy_from_user, so it can safely have an 8 byte alignment, however in userspace it must be constructed by concatenation with the ib_uverbs_alloc_pd_resp struct. This is due to the required memory layout to execute the command. Since ibv_uverbs_alloc_pd_resp is only 4 bytes long, this causes misalignment, and the user space will experience an unexpected padding. Currently it works around this via pointer maths. Make everything more robust by having the compiler reduce the alignment of the struct to 4. The userspace has assertions to ensure this works properly in all situations. Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
107 lines
2.9 KiB
C
107 lines
2.9 KiB
C
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */
|
|
/*
|
|
* Broadcom NetXtreme-E RoCE driver.
|
|
*
|
|
* Copyright (c) 2016 - 2017, Broadcom. All rights reserved. The term
|
|
* Broadcom refers to Broadcom Limited and/or its subsidiaries.
|
|
*
|
|
* This software is available to you under a choice of one of two
|
|
* licenses. You may choose to be licensed under the terms of the GNU
|
|
* General Public License (GPL) Version 2, available from the file
|
|
* COPYING in the main directory of this source tree, or the
|
|
* BSD license below:
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in
|
|
* the documentation and/or other materials provided with the
|
|
* distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
|
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
|
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
|
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* Description: Uverbs ABI header file
|
|
*/
|
|
|
|
#ifndef __BNXT_RE_UVERBS_ABI_H__
|
|
#define __BNXT_RE_UVERBS_ABI_H__
|
|
|
|
#include <linux/types.h>
|
|
|
|
#define BNXT_RE_ABI_VERSION 1
|
|
|
|
struct bnxt_re_uctx_resp {
|
|
__u32 dev_id;
|
|
__u32 max_qp;
|
|
__u32 pg_size;
|
|
__u32 cqe_sz;
|
|
__u32 max_cqd;
|
|
__u32 rsvd;
|
|
};
|
|
|
|
/*
|
|
* This struct is placed after the ib_uverbs_alloc_pd_resp struct, which is
|
|
* not 8 byted aligned. To avoid undesired padding in various cases we have to
|
|
* set this struct to packed.
|
|
*/
|
|
struct bnxt_re_pd_resp {
|
|
__u32 pdid;
|
|
__u32 dpi;
|
|
__u64 dbr;
|
|
} __attribute__((packed, aligned(4)));
|
|
|
|
struct bnxt_re_cq_req {
|
|
__u64 cq_va;
|
|
__u64 cq_handle;
|
|
};
|
|
|
|
struct bnxt_re_cq_resp {
|
|
__u32 cqid;
|
|
__u32 tail;
|
|
__u32 phase;
|
|
__u32 rsvd;
|
|
};
|
|
|
|
struct bnxt_re_qp_req {
|
|
__u64 qpsva;
|
|
__u64 qprva;
|
|
__u64 qp_handle;
|
|
};
|
|
|
|
struct bnxt_re_qp_resp {
|
|
__u32 qpid;
|
|
__u32 rsvd;
|
|
};
|
|
|
|
struct bnxt_re_srq_req {
|
|
__u64 srqva;
|
|
__u64 srq_handle;
|
|
};
|
|
|
|
struct bnxt_re_srq_resp {
|
|
__u32 srqid;
|
|
};
|
|
|
|
enum bnxt_re_shpg_offt {
|
|
BNXT_RE_BEG_RESV_OFFT = 0x00,
|
|
BNXT_RE_AVID_OFFT = 0x10,
|
|
BNXT_RE_AVID_SIZE = 0x04,
|
|
BNXT_RE_END_RESV_OFFT = 0xFF0
|
|
};
|
|
|
|
#endif /* __BNXT_RE_UVERBS_ABI_H__*/
|