From: Potnuri Bharat Teja <bharat@chelsio.com>
To: Alan Maguire <alan.maguire@oracle.com>
Cc: "andrew+netdev@lunn.ch" <andrew+netdev@lunn.ch>,
"davem@davemloft.net" <davem@davemloft.net>,
"edumazet@google.com" <edumazet@google.com>,
"kuba@kernel.org" <kuba@kernel.org>,
"pabeni@redhat.com" <pabeni@redhat.com>,
"kees@kernel.org" <kees@kernel.org>,
"gustavoars@kernel.org" <gustavoars@kernel.org>,
"hariprasad@chelsio.com" <hariprasad@chelsio.com>,
Jeff Hwang <jhwang@chelsio.com>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
Bart Van Assche <bvanassche@acm.org>
Subject: Re: [PATCH net] cxgb4: Rename sched_class to avoid type clash
Date: Mon, 24 Nov 2025 18:31:05 +0530 [thread overview]
Message-ID: <aSRXEb/X7MAJAeFm@chelsio.com> (raw)
In-Reply-To: <20251121181231.64337-1-alan.maguire@oracle.com>
On Friday, November 11/21/25, 2025 at 23:42:31 +0530, Alan Maguire wrote:
> drivers/net/ethernet/chelsio/cxgb4/sched.h declares a sched_class
> struct which has a type name clash with struct sched_class
> in kernel/sched/sched.h (a type used in a field in task_struct).
>
> When cxgb4 is a builtin we end up with both sched_class types,
> and as a result of this we wind up with DWARF (and derived from
> that BTF) with a duplicate incorrect task_struct representation.
> When cxgb4 is built-in this type clash can cause kernel builds to
> fail as resolve_btfids will fail when confused which task_struct
> to use. See [1] for more details.
>
> As such, renaming sched_class to ch_sched_class (in line with
> other structs like ch_sched_flowc) makes sense.
>
> [1] https://lore.kernel.org/bpf/2412725b-916c-47bd-91c3-c2d57e3e6c7b@acm.org/
>
> Fixes: b72a32dacdfa ("cxgb4: add support for tx traffic scheduling classes")
> Reported-by: Bart Van Assche <bvanassche@acm.org>
> Reviewed-by: Bart Van Assche <bvanassche@acm.org>
> Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
Thanks.
Acked-by: Potnuri Bharat Teja <bharat@chelsio.com>
> ---
> .../net/ethernet/chelsio/cxgb4/cxgb4_main.c | 2 +-
> .../chelsio/cxgb4/cxgb4_tc_matchall.c | 4 +-
> .../ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c | 2 +-
> drivers/net/ethernet/chelsio/cxgb4/sched.c | 44 +++++++++----------
> drivers/net/ethernet/chelsio/cxgb4/sched.h | 12 ++---
> 5 files changed, 32 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
> index 392723ef14e5..ac0c7fe5743b 100644
> --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
> +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
> @@ -3485,7 +3485,7 @@ static int cxgb_set_tx_maxrate(struct net_device *dev, int index, u32 rate)
> struct adapter *adap = pi->adapter;
> struct ch_sched_queue qe = { 0 };
> struct ch_sched_params p = { 0 };
> - struct sched_class *e;
> + struct ch_sched_class *e;
> u32 req_rate;
> int err = 0;
>
> diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_matchall.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_matchall.c
> index 1672d3afe5be..f8dcf0b4abcd 100644
> --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_matchall.c
> +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_matchall.c
> @@ -56,7 +56,7 @@ static int cxgb4_matchall_egress_validate(struct net_device *dev,
> struct port_info *pi = netdev2pinfo(dev);
> struct flow_action_entry *entry;
> struct ch_sched_queue qe;
> - struct sched_class *e;
> + struct ch_sched_class *e;
> u64 max_link_rate;
> u32 i, speed;
> int ret;
> @@ -180,7 +180,7 @@ static int cxgb4_matchall_alloc_tc(struct net_device *dev,
> struct port_info *pi = netdev2pinfo(dev);
> struct adapter *adap = netdev2adap(dev);
> struct flow_action_entry *entry;
> - struct sched_class *e;
> + struct ch_sched_class *e;
> int ret;
> u32 i;
>
> diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c
> index 338b04f339b3..a2dcd2e24263 100644
> --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c
> +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c
> @@ -330,7 +330,7 @@ static int cxgb4_mqprio_alloc_tc(struct net_device *dev,
> struct cxgb4_tc_port_mqprio *tc_port_mqprio;
> struct port_info *pi = netdev2pinfo(dev);
> struct adapter *adap = netdev2adap(dev);
> - struct sched_class *e;
> + struct ch_sched_class *e;
> int ret;
> u8 i;
>
> diff --git a/drivers/net/ethernet/chelsio/cxgb4/sched.c b/drivers/net/ethernet/chelsio/cxgb4/sched.c
> index a1b14468d1ff..38a30aeee122 100644
> --- a/drivers/net/ethernet/chelsio/cxgb4/sched.c
> +++ b/drivers/net/ethernet/chelsio/cxgb4/sched.c
> @@ -44,7 +44,7 @@ static int t4_sched_class_fw_cmd(struct port_info *pi,
> {
> struct adapter *adap = pi->adapter;
> struct sched_table *s = pi->sched_tbl;
> - struct sched_class *e;
> + struct ch_sched_class *e;
> int err = 0;
>
> e = &s->tab[p->u.params.class];
> @@ -122,7 +122,7 @@ static void *t4_sched_entry_lookup(struct port_info *pi,
> const u32 val)
> {
> struct sched_table *s = pi->sched_tbl;
> - struct sched_class *e, *end;
> + struct ch_sched_class *e, *end;
> void *found = NULL;
>
> /* Look for an entry with matching @val */
> @@ -166,8 +166,8 @@ static void *t4_sched_entry_lookup(struct port_info *pi,
> return found;
> }
>
> -struct sched_class *cxgb4_sched_queue_lookup(struct net_device *dev,
> - struct ch_sched_queue *p)
> +struct ch_sched_class *cxgb4_sched_queue_lookup(struct net_device *dev,
> + struct ch_sched_queue *p)
> {
> struct port_info *pi = netdev2pinfo(dev);
> struct sched_queue_entry *qe = NULL;
> @@ -187,7 +187,7 @@ static int t4_sched_queue_unbind(struct port_info *pi, struct ch_sched_queue *p)
> struct sched_queue_entry *qe = NULL;
> struct adapter *adap = pi->adapter;
> struct sge_eth_txq *txq;
> - struct sched_class *e;
> + struct ch_sched_class *e;
> int err = 0;
>
> if (p->queue < 0 || p->queue >= pi->nqsets)
> @@ -218,7 +218,7 @@ static int t4_sched_queue_bind(struct port_info *pi, struct ch_sched_queue *p)
> struct sched_queue_entry *qe = NULL;
> struct adapter *adap = pi->adapter;
> struct sge_eth_txq *txq;
> - struct sched_class *e;
> + struct ch_sched_class *e;
> unsigned int qid;
> int err = 0;
>
> @@ -260,7 +260,7 @@ static int t4_sched_flowc_unbind(struct port_info *pi, struct ch_sched_flowc *p)
> {
> struct sched_flowc_entry *fe = NULL;
> struct adapter *adap = pi->adapter;
> - struct sched_class *e;
> + struct ch_sched_class *e;
> int err = 0;
>
> if (p->tid < 0 || p->tid >= adap->tids.neotids)
> @@ -288,7 +288,7 @@ static int t4_sched_flowc_bind(struct port_info *pi, struct ch_sched_flowc *p)
> struct sched_table *s = pi->sched_tbl;
> struct sched_flowc_entry *fe = NULL;
> struct adapter *adap = pi->adapter;
> - struct sched_class *e;
> + struct ch_sched_class *e;
> int err = 0;
>
> if (p->tid < 0 || p->tid >= adap->tids.neotids)
> @@ -322,7 +322,7 @@ static int t4_sched_flowc_bind(struct port_info *pi, struct ch_sched_flowc *p)
> }
>
> static void t4_sched_class_unbind_all(struct port_info *pi,
> - struct sched_class *e,
> + struct ch_sched_class *e,
> enum sched_bind_type type)
> {
> if (!e)
> @@ -476,12 +476,12 @@ int cxgb4_sched_class_unbind(struct net_device *dev, void *arg,
> }
>
> /* If @p is NULL, fetch any available unused class */
> -static struct sched_class *t4_sched_class_lookup(struct port_info *pi,
> - const struct ch_sched_params *p)
> +static struct ch_sched_class *t4_sched_class_lookup(struct port_info *pi,
> + const struct ch_sched_params *p)
> {
> struct sched_table *s = pi->sched_tbl;
> - struct sched_class *found = NULL;
> - struct sched_class *e, *end;
> + struct ch_sched_class *found = NULL;
> + struct ch_sched_class *e, *end;
>
> if (!p) {
> /* Get any available unused class */
> @@ -522,10 +522,10 @@ static struct sched_class *t4_sched_class_lookup(struct port_info *pi,
> return found;
> }
>
> -static struct sched_class *t4_sched_class_alloc(struct port_info *pi,
> - struct ch_sched_params *p)
> +static struct ch_sched_class *t4_sched_class_alloc(struct port_info *pi,
> + struct ch_sched_params *p)
> {
> - struct sched_class *e = NULL;
> + struct ch_sched_class *e = NULL;
> u8 class_id;
> int err;
>
> @@ -579,8 +579,8 @@ static struct sched_class *t4_sched_class_alloc(struct port_info *pi,
> * scheduling class with matching @p is found, then the matching class is
> * returned.
> */
> -struct sched_class *cxgb4_sched_class_alloc(struct net_device *dev,
> - struct ch_sched_params *p)
> +struct ch_sched_class *cxgb4_sched_class_alloc(struct net_device *dev,
> + struct ch_sched_params *p)
> {
> struct port_info *pi = netdev2pinfo(dev);
> u8 class_id;
> @@ -607,7 +607,7 @@ void cxgb4_sched_class_free(struct net_device *dev, u8 classid)
> struct port_info *pi = netdev2pinfo(dev);
> struct sched_table *s = pi->sched_tbl;
> struct ch_sched_params p;
> - struct sched_class *e;
> + struct ch_sched_class *e;
> u32 speed;
> int ret;
>
> @@ -640,7 +640,7 @@ void cxgb4_sched_class_free(struct net_device *dev, u8 classid)
> }
> }
>
> -static void t4_sched_class_free(struct net_device *dev, struct sched_class *e)
> +static void t4_sched_class_free(struct net_device *dev, struct ch_sched_class *e)
> {
> struct port_info *pi = netdev2pinfo(dev);
>
> @@ -660,7 +660,7 @@ struct sched_table *t4_init_sched(unsigned int sched_size)
> s->sched_size = sched_size;
>
> for (i = 0; i < s->sched_size; i++) {
> - memset(&s->tab[i], 0, sizeof(struct sched_class));
> + memset(&s->tab[i], 0, sizeof(struct ch_sched_class));
> s->tab[i].idx = i;
> s->tab[i].state = SCHED_STATE_UNUSED;
> INIT_LIST_HEAD(&s->tab[i].entry_list);
> @@ -682,7 +682,7 @@ void t4_cleanup_sched(struct adapter *adap)
> continue;
>
> for (i = 0; i < s->sched_size; i++) {
> - struct sched_class *e;
> + struct ch_sched_class *e;
>
> e = &s->tab[i];
> if (e->state == SCHED_STATE_ACTIVE)
> diff --git a/drivers/net/ethernet/chelsio/cxgb4/sched.h b/drivers/net/ethernet/chelsio/cxgb4/sched.h
> index 6b3c778815f0..4d3b5a757536 100644
> --- a/drivers/net/ethernet/chelsio/cxgb4/sched.h
> +++ b/drivers/net/ethernet/chelsio/cxgb4/sched.h
> @@ -71,7 +71,7 @@ struct sched_flowc_entry {
> struct ch_sched_flowc param;
> };
>
> -struct sched_class {
> +struct ch_sched_class {
> u8 state;
> u8 idx;
> struct ch_sched_params info;
> @@ -82,7 +82,7 @@ struct sched_class {
>
> struct sched_table { /* per port scheduling table */
> u8 sched_size;
> - struct sched_class tab[] __counted_by(sched_size);
> + struct ch_sched_class tab[] __counted_by(sched_size);
> };
>
> static inline bool can_sched(struct net_device *dev)
> @@ -103,15 +103,15 @@ static inline bool valid_class_id(struct net_device *dev, u8 class_id)
> return true;
> }
>
> -struct sched_class *cxgb4_sched_queue_lookup(struct net_device *dev,
> - struct ch_sched_queue *p);
> +struct ch_sched_class *cxgb4_sched_queue_lookup(struct net_device *dev,
> + struct ch_sched_queue *p);
> int cxgb4_sched_class_bind(struct net_device *dev, void *arg,
> enum sched_bind_type type);
> int cxgb4_sched_class_unbind(struct net_device *dev, void *arg,
> enum sched_bind_type type);
>
> -struct sched_class *cxgb4_sched_class_alloc(struct net_device *dev,
> - struct ch_sched_params *p);
> +struct ch_sched_class *cxgb4_sched_class_alloc(struct net_device *dev,
> + struct ch_sched_params *p);
> void cxgb4_sched_class_free(struct net_device *dev, u8 classid);
>
> struct sched_table *t4_init_sched(unsigned int size);
> --
> 2.39.3
>
next prev parent reply other threads:[~2025-11-24 13:01 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-21 18:12 [PATCH net] cxgb4: Rename sched_class to avoid type clash Alan Maguire
2025-11-24 13:01 ` Potnuri Bharat Teja [this message]
2025-11-26 3:00 ` patchwork-bot+netdevbpf
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=aSRXEb/X7MAJAeFm@chelsio.com \
--to=bharat@chelsio.com \
--cc=alan.maguire@oracle.com \
--cc=andrew+netdev@lunn.ch \
--cc=bvanassche@acm.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gustavoars@kernel.org \
--cc=hariprasad@chelsio.com \
--cc=jhwang@chelsio.com \
--cc=kees@kernel.org \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--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.