From: Heiner Kallweit Date: Fri, 27 Feb 2026 22:05:18 +0000 (+0100) Subject: net: mdio: extend struct mdio_bus_stat_attr instead of using dev_ext_attribute X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5c494f404a3fa5181f038b8c328a3e0dc4cc2e18;p=thirdparty%2Fkernel%2Flinux.git net: mdio: extend struct mdio_bus_stat_attr instead of using dev_ext_attribute Currently the var member of struct dev_ext_attribute is used in a very ugly way. Extend struct mdio_bus_stat_attr instead, what allows to simplify the code and also slightly reduces memory footprint. Note: Member addr is renamed to avoid a conflict in macro MDIO_BUS_STATS_ADDR_ATTR_DECL. Signed-off-by: Heiner Kallweit Link: https://patch.msgid.link/ce9f85d2-4f72-4b15-b868-210a8ced662d@gmail.com Signed-off-by: Paolo Abeni --- diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index afdf1ad6c0e61..4fe9859369b1e 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c @@ -124,10 +124,16 @@ static void mdiobus_release(struct device *d) } struct mdio_bus_stat_attr { - int addr; + struct device_attribute attr; + int address; unsigned int field_offset; }; +static struct mdio_bus_stat_attr *to_sattr(struct device_attribute *attr) +{ + return container_of(attr, struct mdio_bus_stat_attr, attr); +} + static u64 mdio_bus_get_stat(struct mdio_bus_stats *s, unsigned int offset) { const char *p = (const char *)s + offset; @@ -157,18 +163,14 @@ static ssize_t mdio_bus_stat_field_show(struct device *dev, struct device_attribute *attr, char *buf) { + struct mdio_bus_stat_attr *sattr = to_sattr(attr); struct mii_bus *bus = to_mii_bus(dev); - struct mdio_bus_stat_attr *sattr; - struct dev_ext_attribute *eattr; u64 val; - eattr = container_of(attr, struct dev_ext_attribute, attr); - sattr = eattr->var; - - if (sattr->addr < 0) + if (sattr->address < 0) val = mdio_bus_get_global_stat(bus, sattr->field_offset); else - val = mdio_bus_get_stat(&bus->stats[sattr->addr], + val = mdio_bus_get_stat(&bus->stats[sattr->address], sattr->field_offset); return sysfs_emit(buf, "%llu\n", val); @@ -178,37 +180,31 @@ static ssize_t mdio_bus_device_stat_field_show(struct device *dev, struct device_attribute *attr, char *buf) { + struct mdio_bus_stat_attr *sattr = to_sattr(attr); struct mdio_device *mdiodev = to_mdio_device(dev); struct mii_bus *bus = mdiodev->bus; - struct mdio_bus_stat_attr *sattr; - struct dev_ext_attribute *eattr; int addr = mdiodev->addr; u64 val; - eattr = container_of(attr, struct dev_ext_attribute, attr); - sattr = eattr->var; - val = mdio_bus_get_stat(&bus->stats[addr], sattr->field_offset); return sysfs_emit(buf, "%llu\n", val); } #define MDIO_BUS_STATS_ATTR_DECL(field, file) \ -static struct dev_ext_attribute dev_attr_mdio_bus_##field = { \ +static struct mdio_bus_stat_attr dev_attr_mdio_bus_##field = { \ .attr = { .attr = { .name = file, .mode = 0444 }, \ .show = mdio_bus_stat_field_show, \ }, \ - .var = &((struct mdio_bus_stat_attr) { \ - -1, offsetof(struct mdio_bus_stats, field) \ - }), \ + .address = -1, \ + .field_offset = offsetof(struct mdio_bus_stats, field), \ }; \ -static struct dev_ext_attribute dev_attr_mdio_bus_device_##field = { \ +static struct mdio_bus_stat_attr dev_attr_mdio_bus_device_##field = { \ .attr = { .attr = { .name = file, .mode = 0444 }, \ .show = mdio_bus_device_stat_field_show, \ }, \ - .var = &((struct mdio_bus_stat_attr) { \ - -1, offsetof(struct mdio_bus_stats, field) \ - }), \ + .address = -1, \ + .field_offset = offsetof(struct mdio_bus_stats, field), \ }; #define MDIO_BUS_STATS_ATTR(field) \ @@ -220,13 +216,12 @@ MDIO_BUS_STATS_ATTR(writes); MDIO_BUS_STATS_ATTR(reads); #define MDIO_BUS_STATS_ADDR_ATTR_DECL(field, addr, file) \ -static struct dev_ext_attribute dev_attr_mdio_bus_addr_##field##_##addr = { \ +static struct mdio_bus_stat_attr dev_attr_mdio_bus_addr_##field##_##addr = { \ .attr = { .attr = { .name = file, .mode = 0444 }, \ .show = mdio_bus_stat_field_show, \ }, \ - .var = &((struct mdio_bus_stat_attr) { \ - addr, offsetof(struct mdio_bus_stats, field) \ - }), \ + .address = addr, \ + .field_offset = offsetof(struct mdio_bus_stats, field), \ } #define MDIO_BUS_STATS_ADDR_ATTR(field, addr) \