On 7/23/19 2:33 PM, David Miller wrote:
From: Shannon Nelson <snel...@pensando.io>
Date: Mon, 22 Jul 2019 14:40:15 -0700

+       if (in_interrupt()) {
+               work = kzalloc(sizeof(*work), GFP_ATOMIC);
+               if (!work) {
+                       netdev_err(lif->netdev, "%s OOM\n", __func__);
+                       return -ENOMEM;
+               }
+               work->type = add ? DW_TYPE_RX_ADDR_ADD : DW_TYPE_RX_ADDR_DEL;
+               memcpy(work->addr, addr, ETH_ALEN);
+               netdev_dbg(lif->netdev, "deferred: rx_filter %s %pM\n",
+                          add ? "add" : "del", addr);
+               ionic_lif_deferred_enqueue(&lif->deferred, work);
+       } else {
+               netdev_dbg(lif->netdev, "rx_filter %s %pM\n",
+                          add ? "add" : "del", addr);
+               if (add)
+                       return ionic_lif_addr_add(lif, addr);
+               else
+                       return ionic_lif_addr_del(lif, addr);
+       }
I don't know about this.

Generally interface address changes are expected to be synchronous.
Yeah, this bothers me a bit as well, but the address change calls come in under spin_lock_bh(), and I'm reluctant to make an AdminQ call under the _bh that could block for a few seconds.

sln

Reply via email to