>-----Original Message----- >From: netdev-owner@xxxxxxxxxxxxxxx <netdev-owner@xxxxxxxxxxxxxxx> On >Behalf Of Claudiu Manoil >Sent: Wednesday, July 24, 2019 12:53 PM >To: Andrew Lunn <andrew@xxxxxxx> >Cc: David S . Miller <davem@xxxxxxxxxxxxx>; devicetree@xxxxxxxxxxxxxxx; >netdev@xxxxxxxxxxxxxxx; Alexandru Marginean ><alexandru.marginean@xxxxxxx>; linux-kernel@xxxxxxxxxxxxxxx; Leo Li ><leoyang.li@xxxxxxx>; Rob Herring <robh+dt@xxxxxxxxxx>; linux-arm- >kernel@xxxxxxxxxxxxxxxxxxx >Subject: RE: [PATCH net-next 1/3] enetc: Add mdio bus driver for the PCIe MDIO >endpoint > >>-----Original Message----- >>From: Andrew Lunn <andrew@xxxxxxx> >>Sent: Wednesday, July 24, 2019 1:25 AM >>To: Claudiu Manoil <claudiu.manoil@xxxxxxx> >>Cc: David S . Miller <davem@xxxxxxxxxxxxx>; devicetree@xxxxxxxxxxxxxxx; >>netdev@xxxxxxxxxxxxxxx; Alexandru Marginean >><alexandru.marginean@xxxxxxx>; linux-kernel@xxxxxxxxxxxxxxx; Leo Li >><leoyang.li@xxxxxxx>; Rob Herring <robh+dt@xxxxxxxxxx>; linux-arm- >>kernel@xxxxxxxxxxxxxxxxxxx >>Subject: Re: [PATCH net-next 1/3] enetc: Add mdio bus driver for the >>PCIe MDIO endpoint >> >>> + bus = mdiobus_alloc_size(sizeof(u32 *)); >>> + if (!bus) >>> + return -ENOMEM; >>> + >> >>> + bus->priv = pci_iomap_range(pdev, 0, ENETC_MDIO_REG_OFFSET, 0); >> >>This got me confused for a while. You allocate space for a u32 pointer. >>bus->priv will point to this space. However, you are not using this >>space, you {ab}use the pointer to directly hold the return from >>pci_iomap_range(). This works, but sparse is probably unhappy, and you >>are wasting the space the u32 pointer takes. >> > >Thanks Andrew, >This is not what I wanted to do, don't ask me how I got to this, it's confusing >indeed. >What's needed here is mdiobus_alloc() or better, devm_mdiobus_alloc(). >I've got to do some cleanup in the local mdio bus probing too. >Will send v2. > This is tricky actually, mdiobus_alloc won't do it, I still need to allocate space for the pointer. So it's not ok to store the register space pointer directly into priv (even if iomap returns void *), it's unusual. Looks like I will have to use double pointers!