[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <01b419f6-264e-4faa-b4df-480fdf952d14@linux.dev>
Date: Thu, 18 Dec 2025 21:27:30 -0800
From: Zhu Yanjun <yanjun.zhu@...ux.dev>
To: "Gustavo A. R. Silva" <gustavo@...eddedor.com>,
Leon Romanovsky <leon@...nel.org>
Cc: Jason Gunthorpe <jgg@...dia.com>,
"Gustavo A. R. Silva" <gustavoars@...nel.org>,
Zhu Yanjun <zyjzyj2000@...il.com>, linux-rdma@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-hardening@...r.kernel.org
Subject: Re: [PATCH][next] RDMA/rxe: Avoid -Wflex-array-member-not-at-end
warnings
在 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
Powered by blists - more mailing lists