All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Toke Høiland-Jørgensen" <toke@toke.dk>
To: Willem de Bruijn <willemdebruijn.kernel@gmail.com>,
	Jamal Hadi Salim <jhs@mojatatu.com>,
	Cong Wang <xiyou.wangcong@gmail.com>,
	Jiri Pirko <jiri@resnulli.us>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Simon Horman <horms@kernel.org>
Cc: "Jonas Köppeler" <j.koeppeler@tu-berlin.de>,
	cake@lists.bufferbloat.net, netdev@vger.kernel.org
Subject: Re: [PATCH net-next v3 1/5] net/sched: Export mq functions for reuse
Date: Tue, 02 Dec 2025 11:41:20 +0100	[thread overview]
Message-ID: <87345t9ne7.fsf@toke.dk> (raw)
In-Reply-To: <willemdebruijn.kernel.1b99d2d13dcba@gmail.com>

Willem de Bruijn <willemdebruijn.kernel@gmail.com> writes:

> Toke Høiland-Jørgensen wrote:
>> To enable the cake_mq qdisc to reuse code from the mq qdisc, export a
>> bunch of functions from sch_mq. Split common functionality out from some
>> functions so it can be composed with other code, and export other
>> functions wholesale.
>> 
>> No functional change intended.
>> 
>> Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
>> ---
>>  include/net/sch_generic.h | 19 +++++++++++++
>>  net/sched/sch_mq.c        | 69 ++++++++++++++++++++++++++++++++---------------
>>  2 files changed, 67 insertions(+), 21 deletions(-)
>> 
>> diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
>> index c3a7268b567e..f2281914d962 100644
>> --- a/include/net/sch_generic.h
>> +++ b/include/net/sch_generic.h
>
> We probably want to avoid random users. This may be better suited to a
> local header, similar to net/core/devmem.h.

Hmm, right; I just put them in sch_generic.h because that's where the
existing mq_change_real_num_tx() was. I can move them, though, don't
feel strongly about it either way :)

> I don't mean to derail this feature if these are the only concerns.
> This can be revised later in -rcX too.

Sure, let's see if our benevolent maintainers decide to merge this
before or after the merge window; I'll follow up as appropriate.

>> @@ -1419,7 +1419,26 @@ void mini_qdisc_pair_init(struct mini_Qdisc_pair *miniqp, struct Qdisc *qdisc,
>>  void mini_qdisc_pair_block_init(struct mini_Qdisc_pair *miniqp,
>>  				struct tcf_block *block);
>>  
>> +struct mq_sched {
>> +	struct Qdisc		**qdiscs;
>> +};
>> +
>> +int mq_init_common(struct Qdisc *sch, struct nlattr *opt,
>> +		   struct netlink_ext_ack *extack,
>> +		   const struct Qdisc_ops *qdisc_ops);
>> +void mq_destroy_common(struct Qdisc *sch);
>> +void mq_attach(struct Qdisc *sch);
>>  void mq_change_real_num_tx(struct Qdisc *sch, unsigned int new_real_tx);
>> +void mq_dump_common(struct Qdisc *sch, struct sk_buff *skb);
>> +struct netdev_queue *mq_select_queue(struct Qdisc *sch,
>> +				     struct tcmsg *tcm);
>> +struct Qdisc *mq_leaf(struct Qdisc *sch, unsigned long cl);
>> +unsigned long mq_find(struct Qdisc *sch, u32 classid);
>> +int mq_dump_class(struct Qdisc *sch, unsigned long cl,
>> +		  struct sk_buff *skb, struct tcmsg *tcm);
>> +int mq_dump_class_stats(struct Qdisc *sch, unsigned long cl,
>> +			struct gnet_dump *d);
>> +void mq_walk(struct Qdisc *sch, struct qdisc_walker *arg);
>>  
>>  int sch_frag_xmit_hook(struct sk_buff *skb, int (*xmit)(struct sk_buff *skb));
>>  
>> diff --git a/net/sched/sch_mq.c b/net/sched/sch_mq.c
>> index c860119a8f09..0bcabdcd1f44 100644
>> --- a/net/sched/sch_mq.c
>> +++ b/net/sched/sch_mq.c
>> @@ -17,10 +17,6 @@
>>  #include <net/pkt_sched.h>
>>  #include <net/sch_generic.h>
>>  
>> -struct mq_sched {
>> -	struct Qdisc		**qdiscs;
>> -};
>> -
>>  static int mq_offload(struct Qdisc *sch, enum tc_mq_command cmd)
>>  {
>>  	struct net_device *dev = qdisc_dev(sch);
>> @@ -49,23 +45,29 @@ static int mq_offload_stats(struct Qdisc *sch)
>>  	return qdisc_offload_dump_helper(sch, TC_SETUP_QDISC_MQ, &opt);
>>  }
>>  
>> -static void mq_destroy(struct Qdisc *sch)
>> +void mq_destroy_common(struct Qdisc *sch)
>>  {
>>  	struct net_device *dev = qdisc_dev(sch);
>>  	struct mq_sched *priv = qdisc_priv(sch);
>>  	unsigned int ntx;
>>  
>> -	mq_offload(sch, TC_MQ_DESTROY);
>> -
>>  	if (!priv->qdiscs)
>>  		return;
>>  	for (ntx = 0; ntx < dev->num_tx_queues && priv->qdiscs[ntx]; ntx++)
>>  		qdisc_put(priv->qdiscs[ntx]);
>>  	kfree(priv->qdiscs);
>>  }
>> +EXPORT_SYMBOL(mq_destroy_common);
>
> On a similar note, this would be a good use of EXPORT_SYMBOL_NS_GPL.
>
> Maybe not even NETDEV_INTERNAL but a dedicated NET_SCHED_MQ.

Huh, didn't know about namespaced exports, neat. Can do that too :)

-Toke

  reply	other threads:[~2025-12-02 10:41 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-30 20:37 [PATCH net-next v3 0/5] Multi-queue aware sch_cake Toke Høiland-Jørgensen
2025-11-30 20:37 ` [PATCH net-next v3 1/5] net/sched: Export mq functions for reuse Toke Høiland-Jørgensen
2025-12-01 17:57   ` Willem de Bruijn
2025-12-02 10:41     ` Toke Høiland-Jørgensen [this message]
2025-11-30 20:37 ` [PATCH net-next v3 2/5] net/sched: sch_cake: Factor out config variables into separate struct Toke Høiland-Jørgensen
2025-11-30 20:37 ` [PATCH net-next v3 3/5] net/sched: sch_cake: Add cake_mq qdisc for using cake on mq devices Toke Høiland-Jørgensen
2025-11-30 20:37 ` [PATCH net-next v3 4/5] net/sched: sch_cake: Share config across cake_mq sub-qdiscs Toke Høiland-Jørgensen
2025-11-30 20:37 ` [PATCH net-next v3 5/5] net/sched: sch_cake: share shaper state across sub-instances of cake_mq Toke Høiland-Jørgensen
2025-12-01  8:11 ` [syzbot ci] Re: Multi-queue aware sch_cake syzbot ci

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=87345t9ne7.fsf@toke.dk \
    --to=toke@toke.dk \
    --cc=cake@lists.bufferbloat.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=j.koeppeler@tu-berlin.de \
    --cc=jhs@mojatatu.com \
    --cc=jiri@resnulli.us \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=willemdebruijn.kernel@gmail.com \
    --cc=xiyou.wangcong@gmail.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.