Package: linux / 6.1.139-1

Metadata

Package Version Patches format
linux 6.1.139-1 3.0 (quilt)

Patch series

view the series file
Patch File delta Description
debian/i386 686 pae pci set pci nobios by default.patch | (download)

arch/x86/pci/common.c | 4 2 + 2 - 0 !
1 file changed, 2 insertions(+), 2 deletions(-)

 [i386/686-pae] pci: set pci=nobios by default
debian/ntfs mark it as broken.patch | (download)

fs/ntfs/Kconfig | 1 1 + 0 - 0 !
1 file changed, 1 insertion(+)

 ntfs: mark it as broken

NTFS has unfixed issues CVE-2018-12929, CVE-2018-12930, and
CVE-2018-12931.  ntfs-3g is a better supported alternative.

Make sure it can't be enabled even in custom kernels.


bugfix/all/module disable matching missing version crc.patch | (download)

kernel/module/version.c | 5 2 + 3 - 0 !
1 file changed, 2 insertions(+), 3 deletions(-)

 module: disable matching missing version crc
bugfix/all/usbip document tcp wrappers.patch | (download)

tools/usb/usbip/doc/usbipd.8 | 6 4 + 2 - 0 !
1 file changed, 4 insertions(+), 2 deletions(-)

 usbip: document tcp wrappers
bugfix/all/kbuild fix recordmcount dependency.patch | (download)

scripts/Makefile.build | 5 5 + 0 - 0 !
1 file changed, 5 insertions(+)

 kbuild: fix recordmcount dependency for oot modules
Date: Mon, 08 Sep 2014 18:31:24 +0100
bugfix/all/tools perf man date.patch | (download)

tools/perf/Documentation/Makefile | 3 3 + 0 - 0 !
tools/perf/Documentation/asciidoc.conf | 3 3 + 0 - 0 !
2 files changed, 6 insertions(+)

 perf tools: use $kbuild_build_timestamp as man page date
bugfix/all/tools perf remove shebangs.patch | (download)

tools/perf/scripts/perl/rw-by-file.pl | 1 0 + 1 - 0 !
tools/perf/scripts/perl/rw-by-pid.pl | 1 0 + 1 - 0 !
tools/perf/scripts/perl/rwtop.pl | 1 0 + 1 - 0 !
tools/perf/scripts/perl/wakeup-latency.pl | 1 0 + 1 - 0 !
4 files changed, 4 deletions(-)

 tools/perf: remove shebang lines from perf scripts
bugfix/x86/revert perf build fix libunwind feature detection on.patch | (download)

tools/perf/Makefile.config | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 revert "perf build: fix libunwind feature detection on 32-bit x86"
bugfix/all/tools build remove bpf run time check at build time.patch | (download)

tools/build/feature/test-bpf.c | 8 5 + 3 - 0 !
1 file changed, 5 insertions(+), 3 deletions(-)

 tools/build: remove bpf() run-time check at build time
bugfix/all/cpupower bump soname version.patch | (download)

tools/power/cpupower/Makefile | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 cpupower: bump soname version
bugfix/all/cpupower fix checks for cpu existence.patch | (download)

tools/power/cpupower/bench/system.c | 13 10 + 3 - 0 !
1 file changed, 10 insertions(+), 3 deletions(-)

 cpupower: fix checks for cpu existence
bugfix/all/tools perf pmu events fix reproducibility.patch | (download)

tools/perf/pmu-events/jevents.py | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 tools/perf: pmu-events: fix reproducibility
bugfix/all/libapi define _fortify_source as 2 not empty.patch | (download)

tools/lib/api/Makefile | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 libapi: define _fortify_source as 2, not empty

Signed-off-by: Ben Hutchings <benh@debian.org>

bugfix/all/tools perf fix missing ldflags for some programs.patch | (download)

tools/perf/Makefile.perf | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 tools/perf: fix missing ldflags for some programs

Signed-off-by: Ben Hutchings <benh@debian.org>

features/all/ethernet microsoft/0001 net Remove the obsolte u64_stats_fetch_ _irq users d.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 8 4 + 4 - 0 !
drivers/net/ethernet/microsoft/mana/mana_ethtool.c | 8 4 + 4 - 0 !
2 files changed, 8 insertions(+), 8 deletions(-)

 [patch 01/44] net: remove the obsolte u64_stats_fetch_*_irq() users
 (drivers).

Now that the 32bit UP oddity is gone and 32bit uses always a sequence
count, there is no need for the fetch_irq() variants anymore.

Convert to the regular interface.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
features/all/ethernet microsoft/0002 net mana Assign interrupts to CPUs based on NUMA nod.patch | (download)

drivers/net/ethernet/microsoft/mana/gdma.h | 1 1 + 0 - 0 !
drivers/net/ethernet/microsoft/mana/gdma_main.c | 30 27 + 3 - 0 !
2 files changed, 28 insertions(+), 3 deletions(-)

 [patch 02/44] net: mana: assign interrupts to cpus based on numa
 nodes

In large VMs with multiple NUMA nodes, network performance is usually
best if network interrupts are all assigned to the same virtual NUMA
node. This patch assigns online CPU according to a numa aware policy,
local cpus are returned first, followed by non-local ones, then it wraps
around.

Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com>
features/all/ethernet microsoft/0003 net mana Add support for auxiliary device.patch | (download)

drivers/net/ethernet/microsoft/Kconfig | 1 1 + 0 - 0 !
drivers/net/ethernet/microsoft/mana/gdma.h | 2 2 + 0 - 0 !
drivers/net/ethernet/microsoft/mana/mana_auxiliary.h | 10 10 + 0 - 0 !
drivers/net/ethernet/microsoft/mana/mana_en.c | 83 82 + 1 - 0 !
4 files changed, 95 insertions(+), 1 deletion(-)

 [patch 03/44] net: mana: add support for auxiliary device

In preparation for supporting MANA RDMA driver, add support for auxiliary
device in the Ethernet driver. The RDMA device is modeled as an auxiliary
device to the Ethernet device.

features/all/ethernet microsoft/0004 net mana Record the physical address for doorbell pa.patch | (download)

drivers/net/ethernet/microsoft/mana/gdma.h | 2 2 + 0 - 0 !
drivers/net/ethernet/microsoft/mana/gdma_main.c | 4 4 + 0 - 0 !
2 files changed, 6 insertions(+)

 [patch 04/44] net: mana: record the physical address for doorbell
 page region

For supporting RDMA device with multiple user contexts with their
individual doorbell pages, record the start address of doorbell page
region for use by the RDMA driver to allocate user context doorbell IDs.

features/all/ethernet microsoft/0005 net mana Handle vport sharing between devices.patch | (download)

drivers/net/ethernet/microsoft/mana/mana.h | 7 7 + 0 - 0 !
drivers/net/ethernet/microsoft/mana/mana_en.c | 53 51 + 2 - 0 !
2 files changed, 58 insertions(+), 2 deletions(-)

 [patch 05/44] net: mana: handle vport sharing between devices

For outgoing packets, the PF requires the VF to configure the vport with
corresponding protection domain and doorbell ID for the kernel or user
features/all/ethernet microsoft/0006 net mana Set the DMA device max segment size.patch | (download)

drivers/net/ethernet/microsoft/mana/gdma_main.c | 6 6 + 0 - 0 !
1 file changed, 6 insertions(+)

 [patch 06/44] net: mana: set the dma device max segment size

MANA hardware doesn't have any restrictions on the DMA segment size, set it
to the max allowed value.

Signed-off-by: Ajay Sharma <sharmaajay@microsoft.com>
features/all/ethernet microsoft/0007 net mana Export Work Queue functions for use by RDMA.patch | (download)

drivers/net/ethernet/microsoft/mana/gdma_main.c | 1 1 + 0 - 0 !
drivers/net/ethernet/microsoft/mana/mana.h | 9 9 + 0 - 0 !
drivers/net/ethernet/microsoft/mana/mana_en.c | 16 9 + 7 - 0 !
3 files changed, 19 insertions(+), 7 deletions(-)

 [patch 07/44] net: mana: export work queue functions for use by rdma
 driver

RDMA device may need to create Ethernet device queues for use by Queue
Pair type RAW. This allows a user-mode context accesses Ethernet hardware
queues. Export the supporting functions for use by the RDMA driver.

features/all/ethernet microsoft/0008 net mana Record port number in netdev.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 1 1 + 0 - 0 !
1 file changed, 1 insertion(+)

 [patch 08/44] net: mana: record port number in netdev

The port number is useful for user-mode application to identify this
net device based on port index. Set to the correct value in ndev.

features/all/ethernet microsoft/0009 net mana Move header files to a common location.patch | (download)

MAINTAINERS | 1 1 + 0 - 0 !
drivers/net/ethernet/microsoft/mana/gdma_main.c | 2 1 + 1 - 0 !
drivers/net/ethernet/microsoft/mana/hw_channel.c | 4 2 + 2 - 0 !
drivers/net/ethernet/microsoft/mana/mana_bpf.c | 2 1 + 1 - 0 !
drivers/net/ethernet/microsoft/mana/mana_en.c | 4 2 + 2 - 0 !
drivers/net/ethernet/microsoft/mana/mana_ethtool.c | 2 1 + 1 - 0 !
drivers/net/ethernet/microsoft/mana/shm_channel.c | 2 1 + 1 - 0 !
include/net/mana/shm_channel.h | 1 0 + 1 - 0 !
8 files changed, 9 insertions(+), 9 deletions(-)

 [patch 09/44] net: mana: move header files to a common location

In preparation to add MANA RDMA driver, move all the required header files
to a common location for use by both Ethernet and RDMA drivers.

features/all/ethernet microsoft/0010 net mana Define max values for SGL entries.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 2 1 + 1 - 0 !
include/net/mana/gdma.h | 7 7 + 0 - 0 !
include/net/mana/mana.h | 4 1 + 3 - 0 !
3 files changed, 9 insertions(+), 4 deletions(-)

 [patch 10/44] net: mana: define max values for sgl entries

The number of maximum SGl entries should be computed from the maximum
WQE size for the intended queue type and the corresponding OOB data
size. This guarantees the hardware queue can successfully queue requests
up to the queue depth exposed to the upper layer.

features/all/ethernet microsoft/0011 net mana Define and process GDMA response code GDMA_.patch | (download)

drivers/net/ethernet/microsoft/mana/hw_channel.c | 2 1 + 1 - 0 !
include/net/mana/gdma.h | 2 2 + 0 - 0 !
2 files changed, 3 insertions(+), 1 deletion(-)

 [patch 11/44] net: mana: define and process gdma response code
 GDMA_STATUS_MORE_ENTRIES

When doing memory registration, the PF may respond with
GDMA_STATUS_MORE_ENTRIES to indicate a follow request is needed. This is
not an error and should be processed as expected.

Signed-off-by: Ajay Sharma <sharmaajay@microsoft.com>
features/all/ethernet microsoft/0012 net mana Define data structures for protection domai.patch | (download)

drivers/net/ethernet/microsoft/mana/gdma_main.c | 27 17 + 10 - 0 !
drivers/net/ethernet/microsoft/mana/mana_en.c | 18 10 + 8 - 0 !
include/net/mana/gdma.h | 121 116 + 5 - 0 !
3 files changed, 143 insertions(+), 23 deletions(-)

 [patch 12/44] net: mana: define data structures for protection domain
 and memory registration

The MANA hardware support protection domain and memory registration for use
in RDMA environment. Add those definitions and expose them for use by the
RDMA driver.

Signed-off-by: Ajay Sharma <sharmaajay@microsoft.com>
Signed-off-by: Long Li <longli@microsoft.com>
Link: https://lore.kernel.org/r/1667502990-2559-12-git-send-email-longli@linuxonhyperv.com
features/all/ethernet microsoft/0013 net mana Fix return type of mana_start_xmit.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 2 1 + 1 - 0 !
include/net/mana/mana.h | 2 1 + 1 - 0 !
2 files changed, 2 insertions(+), 2 deletions(-)

 [patch 13/44] net: mana: fix return type of mana_start_xmit()

The ndo_start_xmit field in net_device_ops is expected to be of type
netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb, struct net_device *dev).

The mismatched return type breaks forward edge kCFI since the underlying
function definition does not match the function hook definition. A new
warning in clang will catch this at compile time:

  drivers/net/ethernet/microsoft/mana/mana_en.c:382:21: error: incompatible function pointer types initializing 'netdev_tx_t (*)(struct sk_buff *, struct net_device *)' (aka 'enum netdev_tx (*)(struct sk_buff *, struct net_device *)') with an expression of type 'int (struct sk_buff *, struct net_device *)' [-Werror,-Wincompatible-function-pointer-types-strict]
          .ndo_start_xmit         = mana_start_xmit,
                                    ^~~~~~~~~~~~~~~
  1 error generated.

The return type of mana_start_xmit should be changed from int to
netdev_tx_t.

Reported-by: Dan Carpenter <error27@gmail.com>
Link: https://github.com/ClangBuiltLinux/linux/issues/1703
Link: https://github.com/ClangBuiltLinux/linux/issues/1750
Signed-off-by: Nathan Huckleberry <nhuck@google.com>
features/all/ethernet microsoft/0014 net mana Fix accessing freed irq affinity_hint.patch | (download)

drivers/net/ethernet/microsoft/mana/gdma_main.c | 37 11 + 26 - 0 !
1 file changed, 11 insertions(+), 26 deletions(-)

 [patch 14/44] net: mana: fix accessing freed irq affinity_hint

After calling irq_set_affinity_and_hint(), the cpumask pointer is
saved in desc->affinity_hint, and will be used later when reading
/proc/irq/<num>/affinity_hint. So the cpumask variable needs to be
persistent. Otherwise, we are accessing freed memory when reading
the affinity_hint file.

Also, need to clear affinity_hint before free_irq(), otherwise there
is a one-time warning and stack trace during module unloading:

 [  243.948687] WARNING: CPU: 10 PID: 1589 at kernel/irq/manage.c:1913 free_irq+0x318/0x360
 ...
 [  243.948753] Call Trace:
 [  243.948754]  <TASK>
 [  243.948760]  mana_gd_remove_irqs+0x78/0xc0 [mana]
 [  243.948767]  mana_gd_remove+0x3e/0x80 [mana]
 [  243.948773]  pci_device_remove+0x3d/0xb0
 [  243.948778]  device_remove+0x46/0x70
 [  243.948782]  device_release_driver_internal+0x1fe/0x280
 [  243.948785]  driver_detach+0x4e/0xa0
 [  243.948787]  bus_remove_driver+0x70/0xf0
 [  243.948789]  driver_unregister+0x35/0x60
 [  243.948792]  pci_unregister_driver+0x44/0x90
 [  243.948794]  mana_driver_exit+0x14/0x3fe [mana]
 [  243.948800]  __do_sys_delete_module.constprop.0+0x185/0x2f0

To fix the bug, use the persistent mask, cpumask_of(cpu#), and set
affinity_hint to NULL before freeing the IRQ, as required by free_irq().

Cc: stable@vger.kernel.org
Fixes: 71fa6887eeca ("net: mana: Assign interrupts to CPUs based on NUMA nodes")
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
features/all/ethernet microsoft/0015 net mana Add new MANA VF performance counters for ea.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 62 59 + 3 - 0 !
drivers/net/ethernet/microsoft/mana/mana_ethtool.c | 52 51 + 1 - 0 !
include/net/mana/mana.h | 18 18 + 0 - 0 !
3 files changed, 128 insertions(+), 4 deletions(-)

 [patch 15/44] net: mana: add new mana vf performance counters for
 easier troubleshooting

Extended performance counter stats in 'ethtool -S <interface>' output
for MANA VF to facilitate troubleshooting.

Tested-on: Ubuntu22
Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit bd7fc6e1957c2102866f9e464c1f2302e891b7e9)
Signed-off-by: Bastian Blank <waldi@debian.org>

features/all/ethernet microsoft/0016 net mana Remove redundant pci_clear_master.patch | (download)

drivers/net/ethernet/microsoft/mana/gdma_main.c | 2 0 + 2 - 0 !
1 file changed, 2 deletions(-)

 [patch 16/44] net: mana: remove redundant pci_clear_master

Remove pci_clear_master to simplify the code,
the bus-mastering is also cleared in do_pci_disable_device,
like this:
./drivers/pci/pci.c:2197
static void do_pci_disable_device(struct pci_dev *dev)
{
	u16 pci_command;

	pci_read_config_word(dev, PCI_COMMAND, &pci_command);
	if (pci_command & PCI_COMMAND_MASTER) {
		pci_command &= ~PCI_COMMAND_MASTER;
		pci_write_config_word(dev, PCI_COMMAND, pci_command);
	}

	pcibios_disable_device(dev);
}.
And dev->is_busmaster is set to 0 in pci_disable_device.

Signed-off-by: Cai Huoqing <cai.huoqing@linux.dev>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 2d59af8307526f2829fdec9c5c5898a857d55180)
Signed-off-by: Bastian Blank <waldi@debian.org>

features/all/ethernet microsoft/0017 net mana Use napi_build_skb in RX path.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 [patch 17/44] net: mana: use napi_build_skb in rx path

Use napi_build_skb() instead of build_skb() to take advantage of the
NAPI percpu caches to obtain skbuff_head.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
features/all/ethernet microsoft/0018 net mana Refactor RX buffer allocation code to prepa.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 154 90 + 64 - 0 !
include/net/mana/mana.h | 6 1 + 5 - 0 !
2 files changed, 91 insertions(+), 69 deletions(-)

 [patch 18/44] net: mana: refactor rx buffer allocation code to
 prepare for various MTU

Move out common buffer allocation code from mana_process_rx_cqe() and
mana_alloc_rx_wqe() to helper functions.
Refactor related variables so they can be changed in one place, and buffer
sizes are in sync.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
features/all/ethernet microsoft/0019 net mana Enable RX path to handle various MTU sizes.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 38 28 + 10 - 0 !
include/net/mana/mana.h | 7 7 + 0 - 0 !
2 files changed, 35 insertions(+), 10 deletions(-)

 [patch 19/44] net: mana: enable rx path to handle various mtu sizes

Update RX data path to allocate and use RX queue DMA buffers with
proper size based on potentially various MTU sizes.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
features/all/ethernet microsoft/0020 net mana Add support for jumbo frame.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_bpf.c | 22 11 + 11 - 0 !
drivers/net/ethernet/microsoft/mana/mana_en.c | 217 204 + 13 - 0 !
include/net/mana/gdma.h | 4 4 + 0 - 0 !
include/net/mana/mana.h | 14 14 + 0 - 0 !
4 files changed, 233 insertions(+), 24 deletions(-)

 [patch 20/44] net: mana: add support for jumbo frame

During probe, get the hardware-allowed max MTU by querying the device
configuration. Users can select MTU up to the device limit.
When XDP is in use, limit MTU settings so the buffer size is within
one page. And, when MTU is set to a too large value, XDP is not allowed
to run.
Also, to prevent changing MTU fails, and leaves the NIC in a bad state,
pre-allocate all buffers before starting the change. So in low memory
condition, it will return error, without affecting the NIC.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
features/all/ethernet microsoft/0021 net mana Check if netdev napi_alloc_frag returns sin.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 15 15 + 0 - 0 !
1 file changed, 15 insertions(+)

 [patch 21/44] net: mana: check if netdev/napi_alloc_frag returns
 single page

netdev/napi_alloc_frag() may fall back to single page which is smaller
than the requested size.
Add error checking to avoid memory overwritten.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit df18f2da302f169e1a29098c6ca3b474f1b0269e)
Signed-off-by: Bastian Blank <waldi@debian.org>

features/all/ethernet microsoft/0022 net mana Fix perf regression remove rx_cqes tx_cqes .patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 10 0 + 10 - 0 !
drivers/net/ethernet/microsoft/mana/mana_ethtool.c | 2 0 + 2 - 0 !
include/net/mana/mana.h | 2 0 + 2 - 0 !
3 files changed, 14 deletions(-)

 [patch 22/44] net: mana: fix perf regression: remove rx_cqes, tx_cqes
 counters

The apc->eth_stats.rx_cqes is one per NIC (vport), and it's on the
frequent and parallel code path of all queues. So, r/w into this
features/all/ethernet microsoft/0023 net mana Add support for vlan tagging.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 19 17 + 2 - 0 !
1 file changed, 17 insertions(+), 2 deletions(-)

 [patch 23/44] net: mana: add support for vlan tagging

To support vlan, use MANA_LONG_PKT_FMT if vlan tag is present in TX
skb. Then extract the vlan tag from the skb struct, and save it to
tx_oob for the NIC to transmit. For vlan tags on the payload, they
are accepted by the NIC too.

For RX, extract the vlan tag from CQE and put it into skb.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit b803d1fded4085d268507a432dac8077ead68971)
Signed-off-by: Bastian Blank <waldi@debian.org>

features/all/ethernet microsoft/0024 RDMA mana_ib Use v2 version of cfg_rx_steer_req to e.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 5 4 + 1 - 0 !
include/net/mana/mana.h | 4 3 + 1 - 0 !
2 files changed, 7 insertions(+), 2 deletions(-)

 [patch 24/44] rdma/mana_ib: use v2 version of cfg_rx_steer_req to
 enable RX coalescing

With RX coalescing, one CQE entry can be used to indicate multiple packets
on the receive queue. This saves processing time and PCI bandwidth over
the CQ.

The MANA Ethernet driver also uses the v2 version of the protocol. It
doesn't use RX coalescing and its behavior is not changed.

Link: https://lore.kernel.org/r/1684045095-31228-1-git-send-email-longli@linuxonhyperv.com
Signed-off-by: Long Li <longli@microsoft.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
(cherry picked from commit 2145328515c8fa9b8a9f7889250bc6c032f2a0e6)
Signed-off-by: Bastian Blank <waldi@debian.org>

features/all/ethernet microsoft/0025 net mana use vmalloc_array and vcalloc.patch | (download)

drivers/net/ethernet/microsoft/mana/hw_channel.c | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 [patch 25/44] net: mana: use vmalloc_array and vcalloc

Use vmalloc_array and vcalloc to protect against
multiplication overflows.

The changes were done using the following Coccinelle
semantic patch:

// <smpl>
@initialize:ocaml@
@@

let rename alloc =
  match alloc with
    "vmalloc" -> "vmalloc_array"
  | "vzalloc" -> "vcalloc"
  | _ -> failwith "unknown"

@@
    size_t e1,e2;
    constant C1, C2;
    expression E1, E2, COUNT, x1, x2, x3;
    typedef u8;
    typedef __u8;
    type t = {u8,__u8,char,unsigned char};
    identifier alloc = {vmalloc,vzalloc};
    fresh identifier realloc = script:ocaml(alloc) { rename alloc };
@@

(
      alloc(x1*x2*x3)
|
      alloc(C1 * C2)
|
      alloc((sizeof(t)) * (COUNT), ...)
|
-     alloc((e1) * (e2))
+     realloc(e1, e2)
|
-     alloc((e1) * (COUNT))
+     realloc(COUNT, e1)
|
-     alloc((E1) * (E2))
+     realloc(E1, E2)
)
// </smpl>

Signed-off-by: Julia Lawall <Julia.Lawall@inria.fr>
Link: https://lore.kernel.org/r/20230627144339.144478-23-Julia.Lawall@inria.fr
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit e9c74f8b8a31f77f8e9d7bbed5fc9f2eacbf32a5)
Signed-off-by: Bastian Blank <waldi@debian.org>

features/all/ethernet microsoft/0026 net mana Batch ringing RX queue doorbell on receivin.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 10 8 + 2 - 0 !
1 file changed, 8 insertions(+), 2 deletions(-)

 [patch 26/44] net: mana: batch ringing rx queue doorbell on receiving
 packets

It's inefficient to ring the doorbell page every time a WQE is posted to
the received queue. Excessive MMIO writes result in CPU spending more
time waiting on LOCK instructions (atomic operations), resulting in
poor scaling performance.

Move the code for ringing doorbell page to where after we have posted all
WQEs to the receive queue during a callback from napi_poll().

With this change, tests showed an improvement from 120G/s to 160G/s on a
200G physical link, with 16 or 32 hardware queues.

Tests showed no regression in network latency benchmarks on single
connection.

features/all/ethernet microsoft/0027 net mana Use the correct WQE count for ringing RQ do.patch | (download)

drivers/net/ethernet/microsoft/mana/gdma_main.c | 5 4 + 1 - 0 !
1 file changed, 4 insertions(+), 1 deletion(-)

 [patch 27/44] net: mana: use the correct wqe count for ringing rq
 doorbell

The hardware specification specifies that WQE_COUNT should set to 0 for
the Receive Queue. Although currently the hardware doesn't enforce the
check, in the future releases it may check on this value.

features/all/ethernet microsoft/0028 net mana Configure hwc timeout from hardware.patch | (download)

drivers/net/ethernet/microsoft/mana/gdma_main.c | 30 29 + 1 - 0 !
drivers/net/ethernet/microsoft/mana/hw_channel.c | 24 23 + 1 - 0 !
include/net/mana/gdma.h | 20 19 + 1 - 0 !
include/net/mana/hw_channel.h | 5 5 + 0 - 0 !
4 files changed, 76 insertions(+), 3 deletions(-)

 [patch 28/44] net: mana: configure hwc timeout from hardware

At present hwc timeout value is a fixed value. This patch sets the hwc
timeout from the hardware. It now uses a new hardware capability
GDMA_DRV_CAP_FLAG_1_HWC_TIMEOUT_RECONFIG to query and set the value
in hwc_timeout.

Signed-off-by: Souradeep Chakrabarti <schakrabarti@linux.microsoft.com>
features/all/ethernet microsoft/0029 net mana Rename mana_refill_rxoob and remove some em.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 9 3 + 6 - 0 !
1 file changed, 3 insertions(+), 6 deletions(-)

 [patch 29/44] net: mana: rename mana_refill_rxoob and remove some
 empty lines

Rename mana_refill_rxoob for naming consistency.
And remove some empty lines between function call and error
checking.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit 5c74064f43c291d9add2b436a2d70205b71a7cc7)
Signed-off-by: Bastian Blank <waldi@debian.org>

features/all/ethernet microsoft/0030 net mana Add gdma stats to ethtool output for mana.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 40 40 + 0 - 0 !
drivers/net/ethernet/microsoft/mana/mana_ethtool.c | 15 15 + 0 - 0 !
include/net/mana/mana.h | 87 87 + 0 - 0 !
3 files changed, 142 insertions(+)

 [patch 30/44] net: mana: add gdma stats to ethtool output for mana

Extended performance counter stats in 'ethtool -S <interface>'
for MANA VF to include GDMA tx LSO packets and bytes count.

Tested-on: Ubuntu22
Testcases:
1. LISA testcase:
PERF-NETWORK-TCP-THROUGHPUT-MULTICONNECTION-NTTTCP-Synthetic
2. LISA testcase:
PERF-NETWORK-TCP-THROUGHPUT-MULTICONNECTION-NTTTCP-SRIOV
3. Validated the GDMA stat packets and byte counters
Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com>
features/all/ethernet microsoft/0031 net mana Add remaining GDMA stats for MANA to ethtoo.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 49 47 + 2 - 0 !
drivers/net/ethernet/microsoft/mana/mana_ethtool.c | 40 40 + 0 - 0 !
include/net/mana/mana.h | 46 33 + 13 - 0 !
3 files changed, 120 insertions(+), 15 deletions(-)

 [patch 31/44] net :mana :add remaining gdma stats for mana to ethtool

Extend performance counter stats in 'ethtool -S <interface>'
for MANA VF to include all GDMA stat counter.

Tested-on: Ubuntu22
Testcases:
1. LISA testcase:
PERF-NETWORK-TCP-THROUGHPUT-MULTICONNECTION-NTTTCP-Synthetic
2. LISA testcase:
PERF-NETWORK-TCP-THROUGHPUT-MULTICONNECTION-NTTTCP-SRIOV

Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com>
Link: https://lore.kernel.org/r/1700830950-803-1-git-send-email-shradhagupta@linux.microsoft.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
(cherry picked from commit e1df5202e879bce09845ac62bae30206e1edfb80)
Signed-off-by: Bastian Blank <waldi@debian.org>

features/all/ethernet microsoft/0032 net mana Fix Rx DMA datasize and skb_over_panic.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 2 1 + 1 - 0 !
include/net/mana/mana.h | 1 0 + 1 - 0 !
2 files changed, 1 insertion(+), 2 deletions(-)

 [patch 32/44] net: mana: fix rx dma datasize and skb_over_panic

mana_get_rxbuf_cfg() aligns the RX buffer's DMA datasize to be
multiple of 64. So a packet slightly bigger than mtu+14, say 1536,
can be received and cause skb_over_panic.

Sample dmesg:
[ 5325.237162] skbuff: skb_over_panic: text:ffffffffc043277a len:1536 put:1536 head:ff1100018b517000 data:ff1100018b517100 tail:0x700 end:0x6ea dev:<NULL>
[ 5325.243689] 
features/all/ethernet microsoft/0033 net mana Enable MANA driver on ARM64 with 4K page si.patch | (download)

drivers/net/ethernet/microsoft/Kconfig | 3 2 + 1 - 0 !
1 file changed, 2 insertions(+), 1 deletion(-)

 [patch 33/44] net: mana: enable mana driver on arm64 with 4k page
 size

Change the Kconfig dependency, so this driver can be built and run on ARM64
with 4K page size.
16/64K page sizes are not supported yet.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Link: https://lore.kernel.org/r/1715632141-8089-1-git-send-email-haiyangz@microsoft.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit 40a1d11fc670ac03c5dc2e5a9724b330e74f38b0)
Signed-off-by: Bastian Blank <waldi@debian.org>

features/all/ethernet microsoft/0034 net mana Fix the extra HZ in mana_hwc_send_request.patch | (download)

drivers/net/ethernet/microsoft/mana/hw_channel.c | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 [patch 34/44] net: mana: fix the extra hz in mana_hwc_send_request

Commit 62c1bff593b7 added an extra HZ along with msecs_to_jiffies.
This patch fixes that.

Cc: stable@vger.kernel.org
Fixes: 62c1bff593b7 ("net: mana: Configure hwc timeout from hardware")
Signed-off-by: Souradeep Chakrabarti <schakrabarti@linux.microsoft.com>
features/all/ethernet microsoft/0035 net mana Fix possible double free in error handling .patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 2 2 + 0 - 0 !
1 file changed, 2 insertions(+)

 [patch 35/44] net: mana: fix possible double free in error handling
 path

When auxiliary_device_add() returns error and then calls
auxiliary_device_uninit(), callback function adev_release
calls kfree(madev). We shouldn't call kfree(madev) again
in the error handling path. Set 'madev' to NULL.

Fixes: a69839d4327d ("net: mana: Add support for auxiliary device")
Signed-off-by: Ma Ke <make24@iscas.ac.cn>
Link: https://patch.msgid.link/20240625130314.2661257-1-make24@iscas.ac.cn
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

(cherry picked from commit 1864b8224195d0e43ddb92a8151f54f6562090cc)
Signed-off-by: Bastian Blank <waldi@debian.org>

features/all/ethernet microsoft/0036 net mana Fix RX buf alloc_size alignment and atomic .patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 6 5 + 1 - 0 !
1 file changed, 5 insertions(+), 1 deletion(-)

 [patch 36/44] net: mana: fix rx buf alloc_size alignment and atomic
 op panic

The MANA driver's RX buffer alloc_size is passed into napi_build_skb() to
create SKB. skb_shinfo(skb) is located at the end of skb, and its alignment
is affected by the alloc_size passed into napi_build_skb(). The size needs
to be aligned properly for better performance and atomic operations.
Otherwise, on ARM64 CPU, for certain MTU settings like 4000, atomic
operations may panic on the skb_shinfo(skb)->dataref due to alignment fault.

To fix this bug, add proper alignment to the alloc_size calculation.

Sample panic info:
[  253.298819] Unable to handle kernel paging request at virtual address ffff000129ba5cce
[  253.300900] Mem abort info:
[  253.301760]   ESR = 0x0000000096000021
[  253.302825]   EC = 0x25: DABT (current EL), IL = 32 bits
[  253.304268]   SET = 0, FnV = 0
[  253.305172]   EA = 0, S1PTW = 0
[  253.306103]   FSC = 0x21: alignment fault
Call trace:
 __skb_clone+0xfc/0x198
 skb_clone+0x78/0xe0
 raw6_local_deliver+0xfc/0x228
 ip6_protocol_deliver_rcu+0x80/0x500
 ip6_input_finish+0x48/0x80
 ip6_input+0x48/0xc0
 ip6_sublist_rcv_finish+0x50/0x78
 ip6_sublist_rcv+0x1cc/0x2b8
 ipv6_list_rcv+0x100/0x150
 __netif_receive_skb_list_core+0x180/0x220
 netif_receive_skb_list_internal+0x198/0x2a8
 __napi_poll+0x138/0x250
 net_rx_action+0x148/0x330
 handle_softirqs+0x12c/0x3a0

Cc: stable@vger.kernel.org
Fixes: 80f6215b450e ("net: mana: Add support for jumbo frame")
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
features/all/ethernet microsoft/0037 net mana Use mana_cleanup_port_context for rxq clean.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 6 2 + 4 - 0 !
1 file changed, 2 insertions(+), 4 deletions(-)

 [patch 37/44] net: mana: use mana_cleanup_port_context() for rxq
 cleanup

To cleanup rxqs in port context structures, instead of duplicating the
code, use existing function mana_cleanup_port_context() which does
the exact cleanup that's needed.

Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com>
features/all/ethernet microsoft/0038 net mana Add support for page sizes other than 4KB o.patch | (download)

drivers/net/ethernet/microsoft/Kconfig | 2 1 + 1 - 0 !
drivers/net/ethernet/microsoft/mana/gdma_main.c | 10 5 + 5 - 0 !
drivers/net/ethernet/microsoft/mana/hw_channel.c | 14 7 + 7 - 0 !
drivers/net/ethernet/microsoft/mana/mana_en.c | 8 4 + 4 - 0 !
drivers/net/ethernet/microsoft/mana/shm_channel.c | 13 7 + 6 - 0 !
include/net/mana/gdma.h | 10 9 + 1 - 0 !
include/net/mana/mana.h | 3 2 + 1 - 0 !
7 files changed, 35 insertions(+), 25 deletions(-)

 [patch 38/44] net: mana: add support for page sizes other than 4kb on
 ARM64

As defined by the MANA Hardware spec, the queue size for DMA is 4KB
minimal, and power of 2. And, the HWC queue size has to be exactly
4KB.

To support page sizes other than 4KB on ARM64, define the minimal
queue size as a macro separately from the PAGE_SIZE, which we always
assumed it to be 4KB before supporting ARM64.

Also, add MANA specific macros and update code related to size
alignment, DMA region calculations, etc.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
features/all/ethernet microsoft/0039 net mana Add page pool for RX buffers.patch | (download)

drivers/net/ethernet/microsoft/mana/mana_en.c | 89 73 + 16 - 0 !
include/net/mana/mana.h | 3 3 + 0 - 0 !
2 files changed, 76 insertions(+), 16 deletions(-)

 [patch 39/44] net: mana: add page pool for rx buffers

Add page pool for RX buffers for faster buffer cycle and reduce CPU
usage.

The standard page pool API is used.

With iperf and 128 threads test, this patch improved the throughput
by 12-15%, and decreased the IRQ associated CPU's usage from 99-100% to
10-50%.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>