Re: [PATCH net-next] net: ibm: emac: Clear MAL descriptors without memset
From: Rosen Penev
Date: Thu May 21 2026 - 15:02:24 EST
On Thu, May 21, 2026 at 2:45 AM Paolo Abeni <pabeni@xxxxxxxxxx> wrote:
>
> On 5/17/26 5:36 AM, Rosen Penev wrote:
> > Clear MAL descriptor rings with explicit field stores instead of
> > memset(). The descriptor rings are carved from MAL coherent DMA memory,
> > which may be mapped uncached on 32-bit powerpc. The optimized memset()
> > path can use dcbz there and trigger an alignment warning.
> >
> > The skb tracking arrays remain ordinary CPU memory and still use memset().
> >
> > Assisted-by: Codex:GPT-5.5
> > Signed-off-by: Rosen Penev <rosenp@xxxxxxxxx>
> > ---
> > drivers/net/ethernet/ibm/emac/core.c | 15 +++++++++++++--
> > 1 file changed, 13 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
> > index 1fd7cb50c568..7ab5c944f5de 100644
> > --- a/drivers/net/ethernet/ibm/emac/core.c
> > +++ b/drivers/net/ethernet/ibm/emac/core.c
> > @@ -1161,6 +1161,17 @@ static void emac_clean_rx_ring(struct emac_instance *dev)
> > }
> > }
> >
> > +static void emac_clear_mal_desc(struct mal_descriptor *desc, int count)
> > +{
> > + int i;
> > +
> > + for (i = 0; i < count; i++) {
> > + desc[i].ctrl = 0;
> > + desc[i].data_len = 0;
> > + desc[i].data_ptr = 0;
>
> Sashiko noted that the compiler could still optimize the above to a
> memset(). Perhaps a barrier() is needed here?
The canonical way to do this is WRITE_ONCE() AFAIK.
In practice it seems it's not an issue. That is
https://lore.kernel.org/all/2e3acfe63d289c6fba366e16973c9ab8369e8b75.1631803922.git.christophe.leroy@xxxxxxxxxx/
no longer triggers.
>
> /P
>