lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 30 Mar 2017 01:12:51 +0200 From: Andrew Lunn <andrew@...n.ch> To: sean.wang@...iatek.com Cc: f.fainelli@...il.com, vivien.didelot@...oirfairelinux.com, matthias.bgg@...il.com, robh+dt@...nel.org, mark.rutland@....com, devicetree@...r.kernel.org, netdev@...r.kernel.org, linux-kernel@...r.kernel.org, linux-mediatek@...ts.infradead.org, davem@...emloft.net, Landen.Chao@...iatek.com, keyhaede@...il.com, objelf@...il.com Subject: Re: [PATCH net-next v3 5/5] net-next: dsa: add dsa support for Mediatek MT7530 switch > +static struct mt7530_priv *lpriv; Hi Sean Why do you need this global variable? What if somebody has two switches connected? > +static void mt7530_port_disable(struct dsa_switch *ds, int port, > + struct phy_device *phy); > +static int mt7530_cpu_port_enable(struct mt7530_priv *priv, > + int port); It is better to move the functions around than have forward declarations. > +static u32 > +_mt7530_read(u32 reg) > +{ > + struct mt7530_priv *priv = lpriv; > + struct mii_bus *bus = priv->bus; > + u32 val; > + > + mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED); > + > + val = mt7530_mii_read(priv, reg); > + > + mutex_unlock(&bus->mdio_lock); > + > + return val; > +} > + > +static u32 > +mt7530_read(struct mt7530_priv *priv, u32 reg) > +{ > + return _mt7530_read(reg); > +} So here you would pass priv to _mt7530_read(). > +static int > +mt7530_fdb_cmd(struct mt7530_priv *priv, enum mt7530_fdb_cmd cmd, u32 *rsp) > +{ > + u32 val; > + int ret; > + > + /* Set the command operating upon the MAC address entries */ > + val = ATC_BUSY | ATC_MAT(0) | cmd; > + mt7530_write(priv, MT7530_ATC, val); > + > + ret = readx_poll_timeout(_mt7530_read, MT7530_ATC, val, > + !(val & ATC_BUSY), 20, 20000); This is where your need for lpriv comes, you can only pass a single argument. But you can work around it. readx_poll_timeout is a #define. So there is no type check for _mt7530_read, or the arg passed to it. So pass a struct containing the address and priv. I think you can then kill of your global lpriv. Andrew
Powered by blists - more mailing lists