From: Christian Marangi <ansuelsmth@gmail.com>
To: "Russell King (Oracle)" <linux@armlinux.org.uk>
Cc: Florian Fainelli <florian.fainelli@broadcom.com>,
Broadcom internal kernel review list
<bcm-kernel-feedback-list@broadcom.com>,
Andrew Lunn <andrew@lunn.ch>,
Heiner Kallweit <hkallweit1@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Vladimir Oltean <olteanv@gmail.com>,
David Epping <david.epping@missinglinkelectronics.com>,
Harini Katakam <harini.katakam@amd.com>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [net-next PATCH v7 2/4] net: phy: extend PHY package API to support multiple global address
Date: Thu, 14 Dec 2023 18:29:28 +0100 [thread overview]
Message-ID: <657b9999.5d0a0220.ec414.ed08@mx.google.com> (raw)
In-Reply-To: <ZXuVsotg1DV596lV@shell.armlinux.org.uk>
On Thu, Dec 14, 2023 at 11:54:26PM +0000, Russell King (Oracle) wrote:
> On Thu, Dec 14, 2023 at 05:54:51PM +0100, Christian Marangi wrote:
> > What I don't like is the wrap check.
> >
> > But I wonder... Isn't it easier to have
> >
> > unsigned int addr = shared->base_addr + addr_offset;
> >
> > and check if >= PHY_MAC_ADDR?
> >
> > Everything is unsigned (so no negative case) and wrap is not possible as
> > nothing is downcasted.
>
> I'm afraid that I LOL'd at "wrap is not possible" ! Of course it's
> possible. Here's an example:
>
Yes I just think about it and I'm also LOLing at the "not possible"...
> shared->base_addr is 20
> addr_offset is ~0 (or -1 casted to an unsigned int)
> addr becomes 19
>
> How about:
>
> if (addr_offset >= PHY_MAX_ADDR)
> return -EIO;
>
> addr = shared->base_addr + addr_offset;
> if (addr >= PHY_MAX_ADDR)
> return -EIO;
>
> and then we could keep 'addr' as u8.
Ok just to make sure
static int phy_package_address(struct phy_device *phydev,
unsigned int addr_offset)
{
struct phy_package_shared *shared = phydev->shared;
unsigned int addr;
if (addr_offset >= PHY_MAX_ADDR)
return -EIO;
addr = shared->base_addr + addr_offset;
if (addr >= PHY_ADDR_MAX)
return -EIO;
/* we know that addr will be in the range 0..31 and thus the
* implicit cast to a signed int is not a problem.
*/
return addr;
}
And call u8 addr = phy_package_address(phydev, addr_offset);
Maybe one if can be skipped with the following fun thing?
static int phy_package_address(struct phy_device *phydev,
unsigned int addr_offset)
{
struct phy_package_shared *shared = phydev->shared;
u8 base_addr = shared->base_addr;
if (addr_offset >= PHY_MAX_ADDR - base_addr)
return -EIO;
/* we know that addr will be in the range 0..31 and thus the
* implicit cast to a signed int is not a problem.
*/
return base_addr + addr_offset;
}
(don't hate me it's late here and my brain is half working ahahha)
>
> Honestly, I have wondered why the mdio bus address is a signed int, but
> never decided to do anything about it.
>
Maybe because direct usage of mdiobus_ is discouraged and phy_write will
use an addr that is already validated.
--
Ansuel
next prev parent reply other threads:[~2023-12-15 0:11 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-14 12:10 [net-next PATCH v7 0/4] net: phy: add PHY package base addr + mmd APIs Christian Marangi
2023-12-14 12:10 ` [net-next PATCH v7 1/4] net: phy: make addr type u8 in phy_package_shared struct Christian Marangi
2023-12-14 16:56 ` Russell King (Oracle)
2023-12-14 12:10 ` [net-next PATCH v7 2/4] net: phy: extend PHY package API to support multiple global address Christian Marangi
2023-12-14 17:05 ` Russell King (Oracle)
2023-12-14 16:54 ` Christian Marangi
2023-12-14 23:54 ` Russell King (Oracle)
2023-12-14 17:29 ` Christian Marangi [this message]
2023-12-15 9:16 ` Russell King (Oracle)
2023-12-14 12:10 ` [net-next PATCH v7 3/4] net: phy: restructure __phy_write/read_mmd to helper and phydev user Christian Marangi
2023-12-14 12:10 ` [net-next PATCH v7 4/4] net: phy: add support for PHY package MMD read/write Christian Marangi
2023-12-14 17:06 ` Russell King (Oracle)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=657b9999.5d0a0220.ec414.ed08@mx.google.com \
--to=ansuelsmth@gmail.com \
--cc=andrew@lunn.ch \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=davem@davemloft.net \
--cc=david.epping@missinglinkelectronics.com \
--cc=edumazet@google.com \
--cc=florian.fainelli@broadcom.com \
--cc=harini.katakam@amd.com \
--cc=hkallweit1@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.