Thread (10 messages) flat view 10 messages, 3 authors, 2021-09-19

Re: [PATCH net-next 1/3] net: sched: update default qdisc visibility after Tx queue cnt changes

From: Cong Wang <hidden>
Date: 2021-09-17 05:46:56

On Wed, Sep 15, 2021 at 12:36 PM Jakub Kicinski [off-list ref] wrote:
On Wed, 15 Sep 2021 09:31:08 -0700 Cong Wang wrote:
quoted
On Mon, Sep 13, 2021 at 3:53 PM Jakub Kicinski [off-list ref] wrote:
quoted
diff --git a/net/core/dev.c b/net/core/dev.c
index 74fd402d26dd..f930329f0dc2 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2921,6 +2921,8 @@ int netif_set_real_num_tx_queues(struct net_device *dev, unsigned int txq)
                if (dev->num_tc)
                        netif_setup_tc(dev, txq);

+               dev_qdisc_change_real_num_tx(dev, txq);
+
Don't we need to flip the device with dev_deactivate()+dev_activate()?
It looks like the only thing this function resets is qdisc itself, and only
partially.
We're only making the qdiscs visible, there should be
no datapath-visible change.
Isn't every qdisc under mq visible to datapath?

Packets can be pending in qdisc's, and qdisc's can be scheduled
in TX softirq, so essentially we need to flip the device like other
places.
quoted
quoted
                dev->real_num_tx_queues = txq;

                if (disabling) {
quoted
quoted
diff --git a/net/sched/sch_mq.c b/net/sched/sch_mq.c
index e79f1afe0cfd..db18d8a860f9 100644
--- a/net/sched/sch_mq.c
+++ b/net/sched/sch_mq.c
@@ -125,6 +125,29 @@ static void mq_attach(struct Qdisc *sch)
        priv->qdiscs = NULL;
 }

+static void mq_change_real_num_tx(struct Qdisc *sch, unsigned int new_real_tx)
This is nearly identical to mqprio_change_real_num_tx(), can we reuse
it?
Indeed, I was a little unsure where best to place the helper.
Since mq is always built if mqprio is my instinct would be to
export mq_change_real_num_tx and use it in mqprio. But I didn't
see any existing exports (mq_attach(), mq_queue_get() are also
identical and are not shared) so I just copy&pasted the logic.
What about net/sched/sch_generic.c?
LMK if (a) that's fine; (b) I should share the new code;
(c) I should post a patch to share all the code that's identical;...
I think you can put the code in net/sched/sch_generic.c and export
it for mqprio (mq is built-in so can just call it).

Thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help