>-----Original Message-----
>From: netdev-ow...@vger.kernel.org <netdev-ow...@vger.kernel.org> On
>Behalf Of Claudiu Manoil
>Sent: Wednesday, July 24, 2019 12:53 PM
>To: Andrew Lunn <and...@lunn.ch>
>Cc: David S . Miller <da...@davemloft.net>; devicet...@vger.kernel.org;
>net...@vger.kernel.org; Alexandru Marginean
><alexandru.margin...@nxp.com>; linux-kernel@vger.kernel.org; Leo Li
><leoyang...@nxp.com>; Rob Herring <robh...@kernel.org>; linux-arm-
>ker...@lists.infradead.org
>Subject: RE: [PATCH net-next 1/3] enetc: Add mdio bus driver for the PCIe MDIO
>endpoint
>
>>-----Original Message-----
>>From: Andrew Lunn <and...@lunn.ch>
>>Sent: Wednesday, July 24, 2019 1:25 AM
>>To: Claudiu Manoil <claudiu.man...@nxp.com>
>>Cc: David S . Miller <da...@davemloft.net>; devicet...@vger.kernel.org;
>>net...@vger.kernel.org; Alexandru Marginean
>><alexandru.margin...@nxp.com>; linux-kernel@vger.kernel.org; Leo Li
>><leoyang...@nxp.com>; Rob Herring <robh...@kernel.org>; linux-arm-
>>ker...@lists.infradead.org
>>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!