Message ID | 20210810123748.47871-1-broonie@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | bc8968e420dcff8d240fe1d49fd0b2214be98ca5 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: mscc: Fix non-GPL export of regmap APIs | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Guessed tree name to be net-next |
netdev/subject_prefix | warning | Target tree name not specified in the subject |
netdev/cc_maintainers | success | CCed 7 of 7 maintainers |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 61 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/header_inline | success | Link |
On 10/08/2021 13:37:48+0100, Mark Brown wrote: > The ocelot driver makes use of regmap, wrapping it with driver specific > operations that are thin wrappers around the core regmap APIs. These are > exported with EXPORT_SYMBOL, dropping the _GPL from the core regmap > exports which is frowned upon. Add _GPL suffixes to at least the APIs that > are doing register I/O. > > Signed-off-by: Mark Brown <broonie@kernel.org> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com> > --- > drivers/net/ethernet/mscc/ocelot_io.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/ethernet/mscc/ocelot_io.c b/drivers/net/ethernet/mscc/ocelot_io.c > index ea4e83410fe4..7390fa3980ec 100644 > --- a/drivers/net/ethernet/mscc/ocelot_io.c > +++ b/drivers/net/ethernet/mscc/ocelot_io.c > @@ -21,7 +21,7 @@ u32 __ocelot_read_ix(struct ocelot *ocelot, u32 reg, u32 offset) > ocelot->map[target][reg & REG_MASK] + offset, &val); > return val; > } > -EXPORT_SYMBOL(__ocelot_read_ix); > +EXPORT_SYMBOL_GPL(__ocelot_read_ix); > > void __ocelot_write_ix(struct ocelot *ocelot, u32 val, u32 reg, u32 offset) > { > @@ -32,7 +32,7 @@ void __ocelot_write_ix(struct ocelot *ocelot, u32 val, u32 reg, u32 offset) > regmap_write(ocelot->targets[target], > ocelot->map[target][reg & REG_MASK] + offset, val); > } > -EXPORT_SYMBOL(__ocelot_write_ix); > +EXPORT_SYMBOL_GPL(__ocelot_write_ix); > > void __ocelot_rmw_ix(struct ocelot *ocelot, u32 val, u32 mask, u32 reg, > u32 offset) > @@ -45,7 +45,7 @@ void __ocelot_rmw_ix(struct ocelot *ocelot, u32 val, u32 mask, u32 reg, > ocelot->map[target][reg & REG_MASK] + offset, > mask, val); > } > -EXPORT_SYMBOL(__ocelot_rmw_ix); > +EXPORT_SYMBOL_GPL(__ocelot_rmw_ix); > > u32 ocelot_port_readl(struct ocelot_port *port, u32 reg) > { > @@ -58,7 +58,7 @@ u32 ocelot_port_readl(struct ocelot_port *port, u32 reg) > regmap_read(port->target, ocelot->map[target][reg & REG_MASK], &val); > return val; > } > -EXPORT_SYMBOL(ocelot_port_readl); > +EXPORT_SYMBOL_GPL(ocelot_port_readl); > > void ocelot_port_writel(struct ocelot_port *port, u32 val, u32 reg) > { > @@ -69,7 +69,7 @@ void ocelot_port_writel(struct ocelot_port *port, u32 val, u32 reg) > > regmap_write(port->target, ocelot->map[target][reg & REG_MASK], val); > } > -EXPORT_SYMBOL(ocelot_port_writel); > +EXPORT_SYMBOL_GPL(ocelot_port_writel); > > void ocelot_port_rmwl(struct ocelot_port *port, u32 val, u32 mask, u32 reg) > { > @@ -77,7 +77,7 @@ void ocelot_port_rmwl(struct ocelot_port *port, u32 val, u32 mask, u32 reg) > > ocelot_port_writel(port, (cur & (~mask)) | val, reg); > } > -EXPORT_SYMBOL(ocelot_port_rmwl); > +EXPORT_SYMBOL_GPL(ocelot_port_rmwl); > > u32 __ocelot_target_read_ix(struct ocelot *ocelot, enum ocelot_target target, > u32 reg, u32 offset) > @@ -128,7 +128,7 @@ int ocelot_regfields_init(struct ocelot *ocelot, > > return 0; > } > -EXPORT_SYMBOL(ocelot_regfields_init); > +EXPORT_SYMBOL_GPL(ocelot_regfields_init); > > static struct regmap_config ocelot_regmap_config = { > .reg_bits = 32, > @@ -148,4 +148,4 @@ struct regmap *ocelot_regmap_init(struct ocelot *ocelot, struct resource *res) > > return devm_regmap_init_mmio(ocelot->dev, regs, &ocelot_regmap_config); > } > -EXPORT_SYMBOL(ocelot_regmap_init); > +EXPORT_SYMBOL_GPL(ocelot_regmap_init); > -- > 2.20.1 >
On Tue, Aug 10, 2021 at 01:37:48PM +0100, Mark Brown wrote: > The ocelot driver makes use of regmap, wrapping it with driver specific > operations that are thin wrappers around the core regmap APIs. These are > exported with EXPORT_SYMBOL, dropping the _GPL from the core regmap > exports which is frowned upon. Add _GPL suffixes to at least the APIs that > are doing register I/O. > > Signed-off-by: Mark Brown <broonie@kernel.org> > --- Stupid question: is this enough? We also have order-two symbols exported as non-GPL, which call one of {__ocelot_read_ix, __ocelot_write_ix, __ocelot_rmw_ix, ocelot_port_writel, ocelot_port_rmwl, ocelot_regfields_init, ocelot_regmap_init}, and therefore indirectly call regmap. In fact, I think that all symbols exported by ocelot do that.
On Tue, Aug 10, 2021 at 12:55:37PM +0000, Vladimir Oltean wrote: > On Tue, Aug 10, 2021 at 01:37:48PM +0100, Mark Brown wrote: > > The ocelot driver makes use of regmap, wrapping it with driver specific > > operations that are thin wrappers around the core regmap APIs. These are > > exported with EXPORT_SYMBOL, dropping the _GPL from the core regmap > > exports which is frowned upon. Add _GPL suffixes to at least the APIs that > > are doing register I/O. > Stupid question: is this enough? We also have order-two symbols exported > as non-GPL, which call one of {__ocelot_read_ix, __ocelot_write_ix, > __ocelot_rmw_ix, ocelot_port_writel, ocelot_port_rmwl, ocelot_regfields_init, > ocelot_regmap_init}, and therefore indirectly call regmap. In fact, I > think that all symbols exported by ocelot do that. Yes, that'd be much better I think - I have to confess I didn't look at the driver in too much detail beyond these most obvious examples to figure out how exactly they slotted in structurally.
Hello: This patch was applied to netdev/net-next.git (refs/heads/master): On Tue, 10 Aug 2021 13:37:48 +0100 you wrote: > The ocelot driver makes use of regmap, wrapping it with driver specific > operations that are thin wrappers around the core regmap APIs. These are > exported with EXPORT_SYMBOL, dropping the _GPL from the core regmap > exports which is frowned upon. Add _GPL suffixes to at least the APIs that > are doing register I/O. > > Signed-off-by: Mark Brown <broonie@kernel.org> > > [...] Here is the summary with links: - net: mscc: Fix non-GPL export of regmap APIs https://git.kernel.org/netdev/net-next/c/bc8968e420dc You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html
diff --git a/drivers/net/ethernet/mscc/ocelot_io.c b/drivers/net/ethernet/mscc/ocelot_io.c index ea4e83410fe4..7390fa3980ec 100644 --- a/drivers/net/ethernet/mscc/ocelot_io.c +++ b/drivers/net/ethernet/mscc/ocelot_io.c @@ -21,7 +21,7 @@ u32 __ocelot_read_ix(struct ocelot *ocelot, u32 reg, u32 offset) ocelot->map[target][reg & REG_MASK] + offset, &val); return val; } -EXPORT_SYMBOL(__ocelot_read_ix); +EXPORT_SYMBOL_GPL(__ocelot_read_ix); void __ocelot_write_ix(struct ocelot *ocelot, u32 val, u32 reg, u32 offset) { @@ -32,7 +32,7 @@ void __ocelot_write_ix(struct ocelot *ocelot, u32 val, u32 reg, u32 offset) regmap_write(ocelot->targets[target], ocelot->map[target][reg & REG_MASK] + offset, val); } -EXPORT_SYMBOL(__ocelot_write_ix); +EXPORT_SYMBOL_GPL(__ocelot_write_ix); void __ocelot_rmw_ix(struct ocelot *ocelot, u32 val, u32 mask, u32 reg, u32 offset) @@ -45,7 +45,7 @@ void __ocelot_rmw_ix(struct ocelot *ocelot, u32 val, u32 mask, u32 reg, ocelot->map[target][reg & REG_MASK] + offset, mask, val); } -EXPORT_SYMBOL(__ocelot_rmw_ix); +EXPORT_SYMBOL_GPL(__ocelot_rmw_ix); u32 ocelot_port_readl(struct ocelot_port *port, u32 reg) { @@ -58,7 +58,7 @@ u32 ocelot_port_readl(struct ocelot_port *port, u32 reg) regmap_read(port->target, ocelot->map[target][reg & REG_MASK], &val); return val; } -EXPORT_SYMBOL(ocelot_port_readl); +EXPORT_SYMBOL_GPL(ocelot_port_readl); void ocelot_port_writel(struct ocelot_port *port, u32 val, u32 reg) { @@ -69,7 +69,7 @@ void ocelot_port_writel(struct ocelot_port *port, u32 val, u32 reg) regmap_write(port->target, ocelot->map[target][reg & REG_MASK], val); } -EXPORT_SYMBOL(ocelot_port_writel); +EXPORT_SYMBOL_GPL(ocelot_port_writel); void ocelot_port_rmwl(struct ocelot_port *port, u32 val, u32 mask, u32 reg) { @@ -77,7 +77,7 @@ void ocelot_port_rmwl(struct ocelot_port *port, u32 val, u32 mask, u32 reg) ocelot_port_writel(port, (cur & (~mask)) | val, reg); } -EXPORT_SYMBOL(ocelot_port_rmwl); +EXPORT_SYMBOL_GPL(ocelot_port_rmwl); u32 __ocelot_target_read_ix(struct ocelot *ocelot, enum ocelot_target target, u32 reg, u32 offset) @@ -128,7 +128,7 @@ int ocelot_regfields_init(struct ocelot *ocelot, return 0; } -EXPORT_SYMBOL(ocelot_regfields_init); +EXPORT_SYMBOL_GPL(ocelot_regfields_init); static struct regmap_config ocelot_regmap_config = { .reg_bits = 32, @@ -148,4 +148,4 @@ struct regmap *ocelot_regmap_init(struct ocelot *ocelot, struct resource *res) return devm_regmap_init_mmio(ocelot->dev, regs, &ocelot_regmap_config); } -EXPORT_SYMBOL(ocelot_regmap_init); +EXPORT_SYMBOL_GPL(ocelot_regmap_init);
The ocelot driver makes use of regmap, wrapping it with driver specific operations that are thin wrappers around the core regmap APIs. These are exported with EXPORT_SYMBOL, dropping the _GPL from the core regmap exports which is frowned upon. Add _GPL suffixes to at least the APIs that are doing register I/O. Signed-off-by: Mark Brown <broonie@kernel.org> --- drivers/net/ethernet/mscc/ocelot_io.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)