realtek: mdio: convert to scoped_guard()
Upstream netdev does not like big guards. Especially around debugging functions. Convert to scoped_guard() and only lock the really needed code parts. This way all debugging can run outside of the lock. Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de> Link: https://github.com/openwrt/openwrt/pull/23411 Signed-off-by: Robert Marko <robimarko@gmail.com>
This commit is contained in:
parent
b8fc512a05
commit
76e47b4421
@ -529,8 +529,9 @@ static int rtmd_read_c45(struct mii_bus *bus, int phy, int devnum, int regnum)
|
||||
if (pn < 0)
|
||||
return -ENOENT;
|
||||
|
||||
guard(mutex)(&ctrl->lock);
|
||||
scoped_guard(mutex, &ctrl->lock)
|
||||
ret = (*ctrl->cfg->read_c45)(bus, pn, devnum, regnum, &val);
|
||||
|
||||
dev_dbg(&bus->dev, "rd_MMD(phy=0x%02x, dev=0x%04x, reg=0x%04x) = 0x%04x, ret = %d\n",
|
||||
phy, devnum, regnum, val, ret);
|
||||
|
||||
@ -540,22 +541,24 @@ static int rtmd_read_c45(struct mii_bus *bus, int phy, int devnum, int regnum)
|
||||
static int rtmd_read_c22(struct mii_bus *bus, int phy, int regnum)
|
||||
{
|
||||
struct rtmd_ctrl *ctrl = rtmd_bus_to_ctrl(bus);
|
||||
int ret, pn, val = 0;
|
||||
int ret, pn, page, val = 0;
|
||||
|
||||
pn = rtmd_phy_to_port(bus, phy);
|
||||
if (pn < 0)
|
||||
return -ENOENT;
|
||||
|
||||
guard(mutex)(&ctrl->lock);
|
||||
scoped_guard(mutex, &ctrl->lock) {
|
||||
page = ctrl->port[pn].page;
|
||||
if (regnum == RTMD_PAGE_SELECT &&
|
||||
ctrl->port[pn].page != RTMD_RAW_PAGE(ctrl->cfg->num_pages))
|
||||
return ctrl->port[pn].page;
|
||||
page != RTMD_RAW_PAGE(ctrl->cfg->num_pages))
|
||||
return page;
|
||||
|
||||
ctrl->port[pn].raw = (ctrl->port[pn].page == RTMD_RAW_PAGE(ctrl->cfg->num_pages));
|
||||
ctrl->port[pn].raw = (page == RTMD_RAW_PAGE(ctrl->cfg->num_pages));
|
||||
ret = (*ctrl->cfg->read_c22)(bus, pn, page, regnum, &val);
|
||||
}
|
||||
|
||||
ret = (*ctrl->cfg->read_c22)(bus, pn, ctrl->port[pn].page, regnum, &val);
|
||||
dev_dbg(&bus->dev, "rd_PHY(phy=0x%02x, pag=0x%04x, reg=0x%04x) = 0x%04x, ret = %d\n",
|
||||
phy, ctrl->port[pn].page, regnum, val, ret);
|
||||
phy, page, regnum, val, ret);
|
||||
|
||||
return ret ? ret : val;
|
||||
}
|
||||
@ -569,7 +572,7 @@ static int rtmd_write_c45(struct mii_bus *bus, int phy, int devnum, int regnum,
|
||||
if (pn < 0)
|
||||
return -ENOENT;
|
||||
|
||||
guard(mutex)(&ctrl->lock);
|
||||
scoped_guard(mutex, &ctrl->lock)
|
||||
ret = (*ctrl->cfg->write_c45)(bus, pn, devnum, regnum, val);
|
||||
dev_dbg(&bus->dev, "wr_MMD(phy=0x%02x, dev=0x%04x, reg=0x%04x, val=0x%04x), ret = %d\n",
|
||||
phy, devnum, regnum, val, ret);
|
||||
@ -580,32 +583,36 @@ static int rtmd_write_c45(struct mii_bus *bus, int phy, int devnum, int regnum,
|
||||
static int rtmd_write_c22(struct mii_bus *bus, int phy, int regnum, u16 val)
|
||||
{
|
||||
struct rtmd_ctrl *ctrl = rtmd_bus_to_ctrl(bus);
|
||||
int ret, page, pn;
|
||||
bool do_write = false;
|
||||
int ret = 0, page, pn;
|
||||
|
||||
pn = rtmd_phy_to_port(bus, phy);
|
||||
if (pn < 0)
|
||||
return -ENOENT;
|
||||
|
||||
guard(mutex)(&ctrl->lock);
|
||||
scoped_guard(mutex, &ctrl->lock) {
|
||||
page = ctrl->port[pn].page;
|
||||
|
||||
if (regnum == RTMD_PAGE_SELECT)
|
||||
ctrl->port[pn].page = val;
|
||||
|
||||
if (!ctrl->port[pn].raw &&
|
||||
(regnum != RTMD_PAGE_SELECT || page == RTMD_RAW_PAGE(ctrl->cfg->num_pages))) {
|
||||
ctrl->port[pn].raw = (page == RTMD_RAW_PAGE(ctrl->cfg->num_pages));
|
||||
do_write = !ctrl->port[pn].raw &&
|
||||
(regnum != RTMD_PAGE_SELECT ||
|
||||
page == RTMD_RAW_PAGE(ctrl->cfg->num_pages));
|
||||
|
||||
if (do_write) {
|
||||
ctrl->port[pn].raw = (page == RTMD_RAW_PAGE(ctrl->cfg->num_pages));
|
||||
ret = (*ctrl->cfg->write_c22)(bus, pn, page, regnum, val);
|
||||
} else {
|
||||
ctrl->port[pn].raw = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (do_write)
|
||||
dev_dbg(&bus->dev,
|
||||
"wr_PHY(phy=0x%02x, pag=0x%04x, reg=0x%04x, val=0x%04x), ret = %d\n",
|
||||
phy, page, regnum, val, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
ctrl->port[pn].raw = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rtmd_poll_port(struct rtmd_ctrl *ctrl, int pn, bool active)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user