On Mon, Sep 10, 2018 at 07:12:00AM -0700, Kamenee Arumugam wrote: > From: Arumugam, Kamenee <kamenee.arumugam@xxxxxxxxx> > > hfi1_wc struct is the same struct as ib_uverbs_wc and hfi1_cq_wc > is not in the uapi header. Remove hfi1_wc and hfi1_cq_wc struct > from providers. Include rvt-abi.h header that have rvt_cq_wc > struct definition into kernel-headers. > > The member ib_uverbs_wc arrray in rvt_cq_wc is replaced with > one in rvt-abi. Therefore,plus one to the number of cq entries. > > Change-Id: I01250acb9d17f63ac737f632462f34617fd5b61a > Reviewed-by: Mike Marciniszyn <mike.marciniszyn@xxxxxxxxx> > Signed-off-by: Kamenee Arumugam <kamenee.arumugam@xxxxxxxxx> > kernel-headers/CMakeLists.txt | 1 + > kernel-headers/rdma/rvt-abi.h | 74 ++++++++++++++++++++++++++++++++++++++++ Changes in these files have to be sent through the kernel tree. Jason > providers/hfi1verbs/hfiverbs.h | 37 +++----------------- > providers/hfi1verbs/verbs.c | 23 +++++++----- > 4 files changed, 93 insertions(+), 42 deletions(-) > create mode 100755 kernel-headers/rdma/rvt-abi.h > > diff --git a/kernel-headers/CMakeLists.txt b/kernel-headers/CMakeLists.txt > index 16ba165..631db9c 100644 > +++ b/kernel-headers/CMakeLists.txt > @@ -24,6 +24,7 @@ publish_internal_headers(rdma > rdma/rdma_user_ioctl_cmds.h > rdma/rdma_user_rxe.h > rdma/vmw_pvrdma-abi.h > + rdma/rvt-abi.h > ) > > publish_internal_headers(rdma/hfi > diff --git a/kernel-headers/rdma/rvt-abi.h b/kernel-headers/rdma/rvt-abi.h > new file mode 100755 > index 0000000..8cff1df > +++ b/kernel-headers/rdma/rvt-abi.h > @@ -0,0 +1,74 @@ > +/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */ > +/* > + * Copyright(c) 2015 - 2018 Intel Corporation. > + * > + * This file is provided under a dual BSD/GPLv2 license. When using or > + * redistributing this file, you may do so under either license. > + * > + * GPL LICENSE SUMMARY > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of version 2 of the GNU General Public License as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, but > + * WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * General Public License for more details. > + * > + * BSD LICENSE > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * > + * - Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * - 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. > + * - Neither the name of Intel Corporation nor the names of its > + * contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT > + * OWNER 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 > + * > + */ > + > +/* > + * This file contains defines, structures, etc. that are used > + * to communicate between kernel and user code. > + */ > + > +#ifndef RVT_ABI_USER_H > +#define RVT_ABI_USER_H > + > +#include <linux/types.h> > +#ifndef RDMA_ATOMIC_UAPI > +#define RDMA_ATOMIC_UAPI(_type, _name) _type _name > +#endif > +/* > + * This structure is used to contain the head pointer, tail pointer, > + * and completion queue entries as a single memory allocation so > + * it can be mmap'ed into user space. > + */ > +struct rvt_cq_wc { > + /* index of next entry to fill */ > + RDMA_ATOMIC_UAPI(u32, head); > + /* index of next ib_poll_cq() entry */ > + RDMA_ATOMIC_UAPI(u32, tail); > + > + /* these are actually size ibcq.cqe + 1 */ > + struct ib_uverbs_wc uqueue[0]; > +}; > + > +#endif /* RVT_ABI_USER_H */ > diff --git a/providers/hfi1verbs/hfiverbs.h b/providers/hfi1verbs/hfiverbs.h > index 070a01c..558fa2a 100644 > +++ b/providers/hfi1verbs/hfiverbs.h > @@ -65,7 +65,8 @@ > > #include <infiniband/driver.h> > #include <infiniband/verbs.h> > - > +#define RDMA_ATOMIC_UAPI(_type, _name) _Atomic(__##_type) _name Hmm, we have a at least on other place I know of that could use this, currently it just casts in the single place it reads.. Jason