在 2025/12/18 20:35, Gustavo A. R. Silva 写道:


On 12/19/25 13:29, Zhu Yanjun wrote:

在 2025/12/18 18:51, Gustavo A. R. Silva 写道:


On 12/19/25 04:22, Yanjun.Zhu wrote:

On 12/18/25 7:56 AM, Leon Romanovsky wrote:
On Sun, Dec 14, 2025 at 09:00:51PM -0800, Zhu Yanjun wrote:

在 2025/12/5 20:41, Zhu Yanjun 写道:

在 2025/12/4 9:48, yanjun.zhu 写道:
On 12/4/25 5:05 AM, Jason Gunthorpe wrote:
On Wed, Dec 03, 2025 at 09:08:45PM -0800, Zhu Yanjun wrote:
        unsigned int res_head;
        unsigned int        res_tail;
        struct resp_res        *res;
+
+    /* SRQ only. srq_wqe.dma.sge is a flex array */
+    struct rxe_recv_wqe srq_wqe;
drivers/infiniband/sw/rxe/rxe_resp.c: In function get_srq_wqe:
drivers/infiniband/sw/rxe/rxe_resp.c:289:41: error: struct
rxe_recv_wqe has
no member named wqe
    289 |         qp->resp.wqe = &qp->resp.srq_wqe.wqe;
        |                                         ^
I didn't try to fix all the typos, you will need to do that.
Exactly. I will fix this problem. This weekend, I will send out an
official commit.
Hi, Jason

The followings are based on your commits and Leon's commits. And it can
pass the rdma-core tests.

I am not sure if this commit is good or not.
Hi, Jason && Leon

Any update? If this looks good to you, I will send out an official commit
based on the following commit.
You are RXE maintainer, send the official patch.

Will do. I will send it out very soon.

I don't see how this addresses the flex-array in the middle issue that
originated this discussion.

Could you please explain this in more detail?
Also, if you have a better approach, would you mind sending a new commit for discussion?

This is exactly what my original patch is about. I've explained this a couple of times
in this thread already.

In your original patch, I have the following problem. I read all your replies. But I can not find your answers to my problem.

My problem is as below:

1. The followings are the declaration of __TRAILING_OVERLAP

/**
 * __TRAILING_OVERLAP() - Overlap a flexible-array member with trailing
 *            members.
 *
* Creates a union between a flexible-array member (FAM) in a struct and a set
 * of additional members that would otherwise follow it.
 *
 * @TYPE: Flexible structure type name, including "struct" keyword.
 * @NAME: Name for a variable to define.
 * @FAM: The flexible-array member within @TYPE          <----- Here
 * @ATTRS: Any struct attributes (usually empty)
 * @MEMBERS: Trailing overlapping members.
 */
#define __TRAILING_OVERLAP(TYPE, NAME, FAM, ATTRS, MEMBERS)         \
    union {                                 \
        TYPE NAME;                          \
        struct {                            \
            unsigned char __offset_to_FAM[offsetof(TYPE, FAM)]; \
            MEMBERS                         \
        } ATTRS;                            \
    }

2. I expanded the above MACRO __TRAILING_OVERLAP into the following following the definition in your commit.

union {

        struct rxe_recv_wqe wqe;

        struct {
unsigned char __offset_to_FAM[offsetof(struct rxe_recv_wqe, dma.sge)]; \
            struct ib_sge sge[RXE_MAX_SGE];
        } ;

    }srq_wqe;

3. In your original commit, dma.sge should be the member of struct rxe_recv_wqe. The struct rxe_recv_wqe is as below.


"@FAM: The flexible-array member within @TYPE"


The struct rxe_recv_wqe is as below.

struct rxe_recv_wqe {
    __aligned_u64       wr_id;
    __u32           reserved;
    __u32           padding;
    struct rxe_dma_info dma;
};

But I can not find dma.sge in the above struct. Can you explain it?

To be honest, I read your original commit for several times, but I can not get it. Can you explain the MACRO TRAILING_OVERLAP? And how can it replace the following struct?

struct {
      struct rxe_recv_wqe    wqe;
      struct ib_sge        sge[RXE_MAX_SGE];
} srq_wqe;

Thanks a lot.

Yanjun.Zhu


-Gustavo


Reply via email to