1. 22 Oct, 2021 8 commits
    • David S. Miller's avatar
      ice: Nuild fix. · b89e7f2c
      David S. Miller authored
      M<erge issues...
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b89e7f2c
    • David S. Miller's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net · bdfa75ad
      David S. Miller authored
      Lots of simnple overlapping additions.
      
      With a build fix from Stephen Rothwell.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      bdfa75ad
    • Linus Torvalds's avatar
      Merge tag 'drm-fixes-2021-10-22' of git://anongit.freedesktop.org/drm/drm · 64222515
      Linus Torvalds authored
      Pull drm fixes from Dave Airlie:
       "Nothing too crazy at the end of the cycle, the kmb modesetting fixes
        are probably a bit large but it's not a major driver, and its fixing
        monitor doesn't turn on type problems.
      
        Otherwise it's just a few minor patches, one ast regression revert, an
        msm power stability fix.
      
        ast:
         - fix regression with connector detect
      
        msm:
         - fix power stability issue
      
        msxfb:
         - fix crash on unload
      
        panel:
         - sync fix
      
        kmb:
         - modesetting fixes"
      
      * tag 'drm-fixes-2021-10-22' of git://anongit.freedesktop.org/drm/drm:
        Revert "drm/ast: Add detect function support"
        drm/kmb: Enable ADV bridge after modeset
        drm/kmb: Corrected typo in handle_lcd_irq
        drm/kmb: Disable change of plane parameters
        drm/kmb: Remove clearing DPHY regs
        drm/kmb: Limit supported mode to 1080p
        drm/kmb: Work around for higher system clock
        drm/panel: ilitek-ili9881c: Fix sync for Feixin K101-IM2BYL02 panel
        drm: mxsfb: Fix NULL pointer dereference crash on unload
        drm/msm/devfreq: Restrict idle clamping to a618 for now
      64222515
    • Mike Rapoport's avatar
      memblock: exclude MEMBLOCK_NOMAP regions from kmemleak · 658aafc8
      Mike Rapoport authored
      Vladimir Zapolskiy reports:
      
      Commit a7259df7 ("memblock: make memblock_find_in_range method
      private") invokes a kernel panic while running kmemleak on OF platforms
      with nomaped regions:
      
        Unable to handle kernel paging request at virtual address fff000021e00000
        [...]
          scan_block+0x64/0x170
          scan_gray_list+0xe8/0x17c
          kmemleak_scan+0x270/0x514
          kmemleak_write+0x34c/0x4ac
      
      The memory allocated from memblock is registered with kmemleak, but if
      it is marked MEMBLOCK_NOMAP it won't have linear map entries so an
      attempt to scan such areas will fault.
      
      Ideally, memblock_mark_nomap() would inform kmemleak to ignore
      MEMBLOCK_NOMAP memory, but it can be called before kmemleak interfaces
      operating on physical addresses can use __va() conversion.
      
      Make sure that functions that mark allocated memory as MEMBLOCK_NOMAP
      take care of informing kmemleak to ignore such memory.
      
      Link: https://lore.kernel.org/all/8ade5174-b143-d621-8c8e-dc6a1898c6fb@linaro.org
      Link: https://lore.kernel.org/all/c30ff0a2-d196-c50d-22f0-bd50696b1205@quicinc.com
      Fixes: a7259df7 ("memblock: make memblock_find_in_range method private")
      Reported-by: default avatarVladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
      Signed-off-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Tested-by: default avatarVladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
      Tested-by: default avatarQian Cai <quic_qiancai@quicinc.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      658aafc8
    • Mike Rapoport's avatar
      Revert "memblock: exclude NOMAP regions from kmemleak" · 6c9a5455
      Mike Rapoport authored
      Commit 6e44bd6d ("memblock: exclude NOMAP regions from kmemleak")
      breaks boot on EFI systems with kmemleak and VM_DEBUG enabled:
      
        efi: Processing EFI memory map:
        efi:   0x000090000000-0x000091ffffff [Conventional|   |  |  |  |  |  |  |  |  |   |WB|WT|WC|UC]
        efi:   0x000092000000-0x0000928fffff [Runtime Data|RUN|  |  |  |  |  |  |  |  |   |WB|WT|WC|UC]
        ------------[ cut here ]------------
        kernel BUG at mm/kmemleak.c:1140!
        Internal error: Oops - BUG: 0 [#1] SMP
        Modules linked in:
        CPU: 0 PID: 0 Comm: swapper Not tainted 5.15.0-rc6-next-20211019+ #104
        pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
        pc : kmemleak_free_part_phys+0x64/0x8c
        lr : kmemleak_free_part_phys+0x38/0x8c
        sp : ffff800011eafbc0
        x29: ffff800011eafbc0 x28: 1fffff7fffb41c0d x27: fffffbfffda0e068
        x26: 0000000092000000 x25: 1ffff000023d5f94 x24: ffff800011ed84d0
        x23: ffff800011ed84c0 x22: ffff800011ed83d8 x21: 0000000000900000
        x20: ffff800011782000 x19: 0000000092000000 x18: ffff800011ee0730
        x17: 0000000000000000 x16: 0000000000000000 x15: 1ffff0000233252c
        x14: ffff800019a905a0 x13: 0000000000000001 x12: ffff7000023d5ed7
        x11: 1ffff000023d5ed6 x10: ffff7000023d5ed6 x9 : dfff800000000000
        x8 : ffff800011eaf6b7 x7 : 0000000000000001 x6 : ffff800011eaf6b0
        x5 : 00008ffffdc2a12a x4 : ffff7000023d5ed7 x3 : 1ffff000023dbf99
        x2 : 1ffff000022f0463 x1 : 0000000000000000 x0 : ffffffffffffffff
        Call trace:
         kmemleak_free_part_phys+0x64/0x8c
         memblock_mark_nomap+0x5c/0x78
         reserve_regions+0x294/0x33c
         efi_init+0x2d0/0x490
         setup_arch+0x80/0x138
         start_kernel+0xa0/0x3ec
         __primary_switched+0xc0/0xc8
        Code: 34000041 97d526e7 f9418e80 36000040 (d4210000)
        random: get_random_bytes called from print_oops_end_marker+0x34/0x80 with crng_init=0
        ---[ end trace 0000000000000000 ]---
      
      The crash happens because kmemleak_free_part_phys() tries to use __va()
      before memstart_addr is initialized and this triggers a VM_BUG_ON() in
      arch/arm64/include/asm/memory.h:
      
      Revert 6e44bd6d ("memblock: exclude NOMAP regions from kmemleak"),
      the issue it is fixing will be fixed differently.
      Reported-by: default avatarQian Cai <quic_qiancai@quicinc.com>
      Signed-off-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6c9a5455
    • Linus Torvalds's avatar
      Merge branch 'ucount-fixes-for-v5.15' of... · 9d235ac0
      Linus Torvalds authored
      Merge branch 'ucount-fixes-for-v5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
      
      Pull ucounts fixes from Eric Biederman:
       "There has been one very hard to track down bug in the ucount code that
        we have been tracking since roughly v5.14 was released. Alex managed
        to find a reliable reproducer a few days ago and then I was able to
        instrument the code and figure out what the issue was.
      
        It turns out the sigqueue_alloc single atomic operation optimization
        did not play nicely with ucounts multiple level rlimits. It turned out
        that either sigqueue_alloc or sigqueue_free could be operating on
        multiple levels and trigger the conditions for the optimization on
        more than one level at the same time.
      
        To deal with that situation I have introduced inc_rlimit_get_ucounts
        and dec_rlimit_put_ucounts that just focuses on the optimization and
        the rlimit and ucount changes.
      
        While looking into the big bug I found I couple of other little issues
        so I am including those fixes here as well.
      
        When I have time I would very much like to dig into process ownership
        of the shared signal queue and see if we could pick a single owner for
        the entire queue so that all of the rlimits can count to that owner.
        That should entirely remove the need to call get_ucounts and
        put_ucounts in sigqueue_alloc and sigqueue_free. It is difficult
        because Linux unlike POSIX supports setuid that works on a single
        thread"
      
      * 'ucount-fixes-for-v5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace:
        ucounts: Move get_ucounts from cred_alloc_blank to key_change_session_keyring
        ucounts: Proper error handling in set_cred_ucounts
        ucounts: Pair inc_rlimit_ucounts with dec_rlimit_ucoutns in commit_creds
        ucounts: Fix signal ucount refcounting
      9d235ac0
    • Linus Torvalds's avatar
      Merge tag 'net-5.15-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net · 6c2c7127
      Linus Torvalds authored
      Pull networking fixes from Jakub Kicinski:
       "Including fixes from netfilter, and can.
      
        We'll have one more fix for a socket accounting regression, it's still
        getting polished. Otherwise things look fine.
      
        Current release - regressions:
      
         - revert "vrf: reset skb conntrack connection on VRF rcv", there are
           valid uses for previous behavior
      
         - can: m_can: fix iomap_read_fifo() and iomap_write_fifo()
      
        Current release - new code bugs:
      
         - mlx5: e-switch, return correct error code on group creation failure
      
        Previous releases - regressions:
      
         - sctp: fix transport encap_port update in sctp_vtag_verify
      
         - stmmac: fix E2E delay mechanism (in PTP timestamping)
      
        Previous releases - always broken:
      
         - netfilter: ip6t_rt: fix out-of-bounds read of ipv6_rt_hdr
      
         - netfilter: xt_IDLETIMER: fix out-of-bound read caused by lack of
           init
      
         - netfilter: ipvs: make global sysctl read-only in non-init netns
      
         - tcp: md5: fix selection between vrf and non-vrf keys
      
         - ipv6: count rx stats on the orig netdev when forwarding
      
         - bridge: mcast: use multicast_membership_interval for IGMPv3
      
         - can:
            - j1939: fix UAF for rx_kref of j1939_priv abort sessions on
              receiving bad messages
      
            - isotp: fix TX buffer concurrent access in isotp_sendmsg() fix
              return error on FC timeout on TX path
      
         - ice: fix re-init of RDMA Tx queues and crash if RDMA was not inited
      
         - hns3: schedule the polling again when allocation fails, prevent
           stalls
      
         - drivers: add missing of_node_put() when aborting
           for_each_available_child_of_node()
      
         - ptp: fix possible memory leak and UAF in ptp_clock_register()
      
         - e1000e: fix packet loss in burst mode on Tiger Lake and later
      
         - mlx5e: ipsec: fix more checksum offload issues"
      
      * tag 'net-5.15-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (75 commits)
        usbnet: sanity check for maxpacket
        net: enetc: make sure all traffic classes can send large frames
        net: enetc: fix ethtool counter name for PM0_TERR
        ptp: free 'vclock_index' in ptp_clock_release()
        sfc: Don't use netif_info before net_device setup
        sfc: Export fibre-specific supported link modes
        net/mlx5e: IPsec: Fix work queue entry ethernet segment checksum flags
        net/mlx5e: IPsec: Fix a misuse of the software parser's fields
        net/mlx5e: Fix vlan data lost during suspend flow
        net/mlx5: E-switch, Return correct error code on group creation failure
        net/mlx5: Lag, change multipath and bonding to be mutually exclusive
        ice: Add missing E810 device ids
        igc: Update I226_K device ID
        e1000e: Fix packet loss on Tiger Lake and later
        e1000e: Separate TGP board type from SPT
        ptp: Fix possible memory leak in ptp_clock_register()
        net: stmmac: Fix E2E delay mechanism
        nfc: st95hf: Make spi remove() callback return zero
        net: hns3: disable sriov before unload hclge layer
        net: hns3: fix vf reset workqueue cannot exit
        ...
      6c2c7127
    • Linus Torvalds's avatar
      Merge tag 'powerpc-5.15-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux · 0a3221b6
      Linus Torvalds authored
      Pull powerpc fixes from Michael Ellerman:
      
       - Fix a bug exposed by a previous fix, where running guests with
         certain SMT topologies could crash the host on Power8.
      
       - Fix atomic sleep warnings when re-onlining CPUs, when PREEMPT is
         enabled.
      
      Thanks to Nathan Lynch, Srikar Dronamraju, and Valentin Schneider.
      
      * tag 'powerpc-5.15-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
        powerpc/smp: do not decrement idle task preempt count in CPU offline
        powerpc/idle: Don't corrupt back chain when going idle
      0a3221b6
  2. 21 Oct, 2021 32 commits
    • Jakub Kicinski's avatar
      Merge branch 'ax88796c-spi-ethernet-adapter' · ab98bbee
      Jakub Kicinski authored
      Łukasz Stelmach says:
      
      ====================
      AX88796C SPI Ethernet Adapter
      
      This is a driver for AX88796C Ethernet Adapter connected in SPI mode as
      found on ARTIK5 evaluation board. The driver has been ported from a
      v3.10.9 vendor kernel for ARTIK5 board.
      ====================
      
      Link: https://lore.kernel.org/r/20211020182422.362647-1-l.stelmach@samsung.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      ab98bbee
    • Łukasz Stelmach's avatar
      net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver · a97c69ba
      Łukasz Stelmach authored
      ASIX AX88796[1] is a versatile ethernet adapter chip, that can be
      connected to a CPU with a 8/16-bit bus or with an SPI. This driver
      supports SPI connection.
      
      The driver has been ported from the vendor kernel for ARTIK5[2]
      boards. Several changes were made to adapt it to the current kernel
      which include:
      
      + updated DT configuration,
      + clock configuration moved to DT,
      + new timer, ethtool and gpio APIs,
      + dev_* instead of pr_* and custom printk() wrappers,
      + removed awkward vendor power managemtn.
      + introduced ethtool tunable to control SPI compression
      
      [1] https://www.asix.com.tw/products.php?op=pItemdetail&PItemID=104;65;86&PLine=65
      [2] https://git.tizen.org/cgit/profile/common/platform/kernel/linux-3.10-artik/
      
      The other ax88796 driver is for NE2000 compatible AX88796L chip. These
      chips are not compatible. Hence, two separate drivers are required.
      Signed-off-by: default avatarŁukasz Stelmach <l.stelmach@samsung.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      a97c69ba
    • Łukasz Stelmach's avatar
      dt-bindings: net: Add bindings for AX88796C SPI Ethernet Adapter · b13c7a88
      Łukasz Stelmach authored
      Add bindings for AX88796C SPI Ethernet Adapter.
      Signed-off-by: default avatarŁukasz Stelmach <l.stelmach@samsung.com>
      Reviewed-by: default avatarRob Herring <robh@kernel.org>
      Acked-by: default avatarKrzysztof Kozlowski <krzk@kernel.org>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      b13c7a88
    • Łukasz Stelmach's avatar
      dt-bindings: vendor-prefixes: Add asix prefix · 4def0acb
      Łukasz Stelmach authored
      Add the prefix for ASIX Electronics Corporation.
      Signed-off-by: default avatarŁukasz Stelmach <l.stelmach@samsung.com>
      Reviewed-by: default avatarKrzysztof Kozlowski <krzk@kernel.org>
      Acked-by: default avatarRob Herring <robh@kernel.org>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      4def0acb
    • Jakub Kicinski's avatar
      Merge branch 'enetc-trivial-ptp-one-step-tx-timestamping-cleanups' · 8e8c1bfc
      Jakub Kicinski authored
      Vladimir Oltean says:
      
      ====================
      enetc: trivial PTP one-step TX timestamping cleanups
      
      These are two cleanup patches for some inconsistencies
      I noticed in the driver's TX ring cleanup function.
      ====================
      
      Link: https://lore.kernel.org/r/20211020174220.1093032-1-vladimir.oltean@nxp.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      8e8c1bfc
    • Vladimir Oltean's avatar
      net: enetc: use the skb variable directly in enetc_clean_tx_ring() · 52066149
      Vladimir Oltean authored
      The code checks whether the skb had one-step TX timestamping enabled, in
      order to schedule the work item for emptying the priv->tx_skbs queue.
      
      That code checks for "tx_swbd->skb" directly, when we already had a skb
      retrieved using enetc_tx_swbd_get_skb(tx_swbd) - a TX software BD can
      also hold an XDP_TX packet or an XDP frame. But since the direct tx_swbd
      dereference is in an "if" block guarded by the non-NULL quality of
      "skb", accessing "tx_swbd->skb" directly is not wrong, just confusing.
      
      Just use the local variable named "skb".
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarClaudiu Manoil <claudiu.manoil@nxp.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      52066149
    • Vladimir Oltean's avatar
      net: enetc: remove local "priv" variable in enetc_clean_tx_ring() · ae77bdbc
      Vladimir Oltean authored
      The "priv" variable is needed in the "check_writeback" scope since
      commit d3982312 ("enetc: add hardware timestamping support").
      
      Since commit 7294380c ("enetc: support PTP Sync packet one-step
      timestamping"), we also need "priv" in the larger function scope.
      
      So the local variable from the "if" block scope is not needed, and
      actually shadows the other one. Delete it.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarClaudiu Manoil <claudiu.manoil@nxp.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      ae77bdbc
    • Kim Phillips's avatar
      Revert "drm/ast: Add detect function support" · 595cb5e0
      Kim Phillips authored
      This reverts commit aae74ff9,
      since it prevents my AMD Milan system from booting, with:
      
      [   27.189558] BUG: kernel NULL pointer dereference, address: 0000000000000000
      [   27.197506] #PF: supervisor write access in kernel mode
      [   27.203333] #PF: error_code(0x0002) - not-present page
      [   27.209064] PGD 0 P4D 0
      [   27.211885] Oops: 0002 [#1] PREEMPT SMP NOPTI
      [   27.216744] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.15.0-rc6+ #15
      [   27.223928] Hardware name: AMD Corporation ETHANOL_X/ETHANOL_X, BIOS RXM1006B 08/20/2021
      [   27.232955] RIP: 0010:run_timer_softirq+0x38b/0x4a0
      [   27.238397] Code: 4c 89 f7 e8 37 27 ac 00 49 c7 46 08 00 00 00 00 49 8b 04 24 48 85 c0 74 71 4d 8b 3c 24 4d 89 7e 08 66 90 49 8b 07 49 8b 57 08 <48> 89 02 48 85 c0 74 04 48 89 50 08 49 8b 77 18 41 f6 47 22 20 4c
      [   27.259350] RSP: 0018:ffffc42d00003ee8 EFLAGS: 00010086
      [   27.265176] RAX: dead000000000122 RBX: 0000000000000000 RCX: 0000000000000101
      [   27.273134] RDX: 0000000000000000 RSI: 0000000000000087 RDI: 0000000000000001
      [   27.281084] RBP: ffffc42d00003f70 R08: 0000000000000000 R09: 00000000000003eb
      [   27.289043] R10: ffffa0860cb300d0 R11: ffffa0c44de290b0 R12: ffffc42d00003ef8
      [   27.297002] R13: 00000000fffef200 R14: ffffa0c44de18dc0 R15: ffffa0867a882350
      [   27.304961] FS:  0000000000000000(0000) GS:ffffa0c44de00000(0000) knlGS:0000000000000000
      [   27.313988] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   27.320396] CR2: 0000000000000000 CR3: 000000014569c001 CR4: 0000000000770ef0
      [   27.328346] PKRU: 55555554
      [   27.331359] Call Trace:
      [   27.334073]  <IRQ>
      [   27.336314]  ? __queue_work+0x420/0x420
      [   27.340589]  ? lapic_next_event+0x21/0x30
      [   27.345060]  ? clockevents_program_event+0x8f/0xe0
      [   27.350402]  __do_softirq+0xfb/0x2db
      [   27.354388]  irq_exit_rcu+0x98/0xd0
      [   27.358275]  sysvec_apic_timer_interrupt+0xac/0xd0
      [   27.363620]  </IRQ>
      [   27.365955]  asm_sysvec_apic_timer_interrupt+0x12/0x20
      [   27.371685] RIP: 0010:cpuidle_enter_state+0xcc/0x390
      [   27.377292] Code: 3d 01 79 0a 50 e8 44 ed 77 ff 49 89 c6 0f 1f 44 00 00 31 ff e8 f5 f8 77 ff 80 7d d7 00 0f 85 e6 01 00 00 fb 66 0f 1f 44 00 00 <45> 85 ff 0f 88 17 01 00 00 49 63 c7 4c 2b 75 c8 48 8d 14 40 48 8d
      [   27.398243] RSP: 0018:ffffffffb0e03dc8 EFLAGS: 00000246
      [   27.404069] RAX: ffffa0c44de00000 RBX: 0000000000000001 RCX: 000000000000001f
      [   27.412028] RDX: 0000000000000000 RSI: ffffffffb0bafc1f RDI: ffffffffb0bbdb81
      [   27.419986] RBP: ffffffffb0e03e00 R08: 00000006549f8f3f R09: ffffffffb1065200
      [   27.427935] R10: ffffa0c44de27ae4 R11: ffffa0c44de27ac4 R12: ffffa0c5634cb000
      [   27.435894] R13: ffffffffb1065200 R14: 00000006549f8f3f R15: 0000000000000001
      [   27.443854]  ? cpuidle_enter_state+0xbb/0x390
      [   27.448712]  cpuidle_enter+0x2e/0x40
      [   27.452695]  call_cpuidle+0x23/0x40
      [   27.456584]  do_idle+0x1f0/0x270
      [   27.460181]  cpu_startup_entry+0x20/0x30
      [   27.464553]  rest_init+0xd4/0xe0
      [   27.468149]  arch_call_rest_init+0xe/0x1b
      [   27.472619]  start_kernel+0x6bc/0x6e2
      [   27.476764]  x86_64_start_reservations+0x24/0x26
      [   27.481912]  x86_64_start_kernel+0x75/0x79
      [   27.486477]  secondary_startup_64_no_verify+0xb0/0xbb
      [   27.492111] Modules linked in: kvm_amd(+) kvm ipmi_si(+) ipmi_devintf rapl wmi_bmof ipmi_msghandler input_leds ccp k10temp mac_hid sch_fq_codel msr ip_tables x_tables autofs4 btrfs blake2b_generic zstd_compress raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid1 raid0 multipath linear ast i2c_algo_bit drm_vram_helper drm_ttm_helper ttm drm_kms_helper crct10dif_pclmul crc32_pclmul ghash_clmulni_intel syscopyarea aesni_intel sysfillrect crypto_simd sysimgblt fb_sys_fops cryptd hid_generic cec nvme ahci usbhid drm e1000e nvme_core hid libahci i2c_piix4 wmi
      [   27.551789] CR2: 0000000000000000
      [   27.555482] ---[ end trace 897987dfe93dccc6 ]---
      [   27.560630] RIP: 0010:run_timer_softirq+0x38b/0x4a0
      [   27.566069] Code: 4c 89 f7 e8 37 27 ac 00 49 c7 46 08 00 00 00 00 49 8b 04 24 48 85 c0 74 71 4d 8b 3c 24 4d 89 7e 08 66 90 49 8b 07 49 8b 57 08 <48> 89 02 48 85 c0 74 04 48 89 50 08 49 8b 77 18 41 f6 47 22 20 4c
      [   27.587021] RSP: 0018:ffffc42d00003ee8 EFLAGS: 00010086
      [   27.592848] RAX: dead000000000122 RBX: 0000000000000000 RCX: 0000000000000101
      [   27.600808] RDX: 0000000000000000 RSI: 0000000000000087 RDI: 0000000000000001
      [   27.608765] RBP: ffffc42d00003f70 R08: 0000000000000000 R09: 00000000000003eb
      [   27.616716] R10: ffffa0860cb300d0 R11: ffffa0c44de290b0 R12: ffffc42d00003ef8
      [   27.624673] R13: 00000000fffef200 R14: ffffa0c44de18dc0 R15: ffffa0867a882350
      [   27.632624] FS:  0000000000000000(0000) GS:ffffa0c44de00000(0000) knlGS:0000000000000000
      [   27.641650] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   27.648159] CR2: 0000000000000000 CR3: 000000014569c001 CR4: 0000000000770ef0
      [   27.656119] PKRU: 55555554
      [   27.659133] Kernel panic - not syncing: Fatal exception in interrupt
      [   29.030411] Shutting down cpus with NMI
      [   29.034699] Kernel Offset: 0x2e600000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
      [   29.046790] ---[ end Kernel panic - not syncing: Fatal exception in interrupt ]---
      
      Since unreliable, found by bisecting for KASAN's use-after-free in
      enqueue_timer+0x4f/0x1e0, where the timer callback is called.
      Reported-by: default avatarKim Phillips <kim.phillips@amd.com>
      Signed-off-by: default avatarKim Phillips <kim.phillips@amd.com>
      Fixes: aae74ff9 ("drm/ast: Add detect function support")
      Link: https://lore.kernel.org/lkml/0f7871be-9ca6-5ae4-3a40-5db9a8fb2365@amd.com/
      Cc: Ainux <ainux.wang@gmail.com>
      Cc: Thomas Zimmermann <tzimmermann@suse.de>
      Cc: David Airlie <airlied@redhat.com>
      Cc: David Airlie <airlied@linux.ie>
      Cc: Daniel Vetter <daniel@ffwll.ch>
      Cc: sterlingteng@gmail.com
      Cc: chenhuacai@kernel.org
      Cc: Chuck Lever III <chuck.lever@oracle.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Jon Grimm <jon.grimm@amd.com>
      Cc: dri-devel <dri-devel@lists.freedesktop.org>
      Cc: linux-kernel <linux-kernel@vger.kernel.org>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211021153006.92983-1-kim.phillips@amd.com
      595cb5e0
    • Dave Airlie's avatar
      Merge tag 'drm-misc-fixes-2021-10-21-1' of... · 7e1c5440
      Dave Airlie authored
      Merge tag 'drm-misc-fixes-2021-10-21-1' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes
      
      drm-misc-fixes for v5.15-rc7:
      - Rebased, to remove vc4 patches.
      - Fix mxsfb crash on unload.
      - Use correct sync parameters for Feixin K101-IM2BYL02.
      - Assorted kmb modeset/atomic fixes.
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      
      From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/e66eaf89-b9b9-41f5-d0d2-dad7e59fabb5@linux.intel.com
      7e1c5440
    • Dave Airlie's avatar
      Merge tag 'drm-msm-fixes-2021-10-18' of https://gitlab.freedesktop.org/drm/msm into drm-fixes · 730b64d8
      Dave Airlie authored
      One more fix for v5.15, to work around a power stability issue on a630
      (and possibly others)
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      From: Rob Clark <robdclark@gmail.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/CAF6AEGs1WPLthmd=ToDcEHm=u-7O38RAVJ2XwRoS8xPmC520vg@mail.gmail.com
      730b64d8
    • Oliver Neukum's avatar
      usbnet: sanity check for maxpacket · 397430b5
      Oliver Neukum authored
      maxpacket of 0 makes no sense and oopses as we need to divide
      by it. Give up.
      
      V2: fixed typo in log and stylistic issues
      Signed-off-by: default avatarOliver Neukum <oneukum@suse.com>
      Reported-by: syzbot+76bb1d34ffa0adc03baa@syzkaller.appspotmail.com
      Reviewed-by: default avatarJohan Hovold <johan@kernel.org>
      Link: https://lore.kernel.org/r/20211021122944.21816-1-oneukum@suse.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      397430b5
    • Vladimir Oltean's avatar
      net: enetc: make sure all traffic classes can send large frames · e378f496
      Vladimir Oltean authored
      The enetc driver does not implement .ndo_change_mtu, instead it
      configures the MAC register field PTC{Traffic Class}MSDUR[MAXSDU]
      statically to a large value during probe time.
      
      The driver used to configure only the max SDU for traffic class 0, and
      that was fine while the driver could only use traffic class 0. But with
      the introduction of mqprio, sending a large frame into any other TC than
      0 is broken.
      
      This patch fixes that by replicating per traffic class the static
      configuration done in enetc_configure_port_mac().
      
      Fixes: cbe9e835 ("enetc: Enable TC offloading with mqprio")
      Reported-by: default avatarRichie Pearn <richard.pearn@nxp.com>
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatar&lt;Claudiu Manoil <claudiu.manoil@nxp.com>
      Link: https://lore.kernel.org/r/20211020173340.1089992-1-vladimir.oltean@nxp.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      e378f496
    • Vladimir Oltean's avatar
      net: enetc: fix ethtool counter name for PM0_TERR · fb8dc5fc
      Vladimir Oltean authored
      There are two counters named "MAC tx frames", one of them is actually
      incorrect. The correct name for that counter should be "MAC tx error
      frames", which is symmetric to the existing "MAC rx error frames".
      
      Fixes: 16eb4c85 ("enetc: Add ethtool statistics")
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatar&lt;Claudiu Manoil <claudiu.manoil@nxp.com>
      Link: https://lore.kernel.org/r/20211020165206.1069889-1-vladimir.oltean@nxp.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      fb8dc5fc
    • Yang Yingliang's avatar
      ptp: free 'vclock_index' in ptp_clock_release() · b6b19a71
      Yang Yingliang authored
      'vclock_index' is accessed from sysfs, it shouled be freed
      in release function, so move it from ptp_clock_unregister()
      to ptp_clock_release().
      Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b6b19a71
    • luo penghao's avatar
      net/core: Remove unused assignment operations and variable · 50af5969
      luo penghao authored
      Although if_info_size is assigned, it has not been used. And the variable
      should also be deleted.
      
      The clang_analyzer complains as follows:
      
      net/core/rtnetlink.c:3806: warning:
      
      Although the value stored to 'if_info_size' is used in the enclosing
      expression, the value is never actually read from 'if_info_size'.
      Reported-by: default avatarZeal Robot <zealci@zte.com.cn>
      Signed-off-by: default avatarluo penghao <luo.penghao@zte.com.cn>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      50af5969
    • Sebastian Andrzej Siewior's avatar
      net: stats: Read the statistics in ___gnet_stats_copy_basic() instead of adding. · c5c6e589
      Sebastian Andrzej Siewior authored
      Since the rework, the statistics code always adds up the byte and packet
      value(s). On 32bit architectures a seqcount_t is used in
      gnet_stats_basic_sync to ensure that the 64bit values are not modified
      during the read since two 32bit loads are required. The usage of a
      seqcount_t requires a lock to ensure that only one writer is active at a
      time. This lock leads to disabled preemption during the update.
      
      The lack of disabling preemption is now creating a warning as reported
      by Naresh since the query done by gnet_stats_copy_basic() is in
      preemptible context.
      
      For ___gnet_stats_copy_basic() there is no need to disable preemption
      since the update is performed on stack and can't be modified by another
      writer. Instead of disabling preemption, to avoid the warning,
      simply create a read function to just read the values and return as u64.
      Reported-by: default avatarNaresh Kamboju <naresh.kamboju@linaro.org>
      Fixes: 67c9e627 ("net: sched: Protect Qdisc::bstats with u64_stats")
      Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c5c6e589
    • David S. Miller's avatar
      Merge branch 'dsa_to_port-loops' · ce272973
      David S. Miller authored
      Vladimir Oltean says:
      
      ====================
      Remove the "dsa_to_port in a loop" antipattern
      
      v1->v2: more patches
      v2->v3: less patches
      
      As opposed to previous series, I would now like to first refactor the
      DSA core, since that sees fewer patches than drivers, and make the
      helpers available. Since the refactoring is fairly noisy, I don't want
      to force it on driver maintainers right away, patches can be submitted
      independently.
      
      The original cover letter is below:
      
      The DSA core and drivers currently iterate too much through the port
      list of a switch. For example, this snippet:
      
      	for (port = 0; port < ds->num_ports; port++) {
      		if (!dsa_is_cpu_port(ds, port))
      			continue;
      
      		ds->ops->change_tag_protocol(ds, port, tag_ops->proto);
      	}
      
      iterates through ds->num_ports once, and then calls dsa_is_cpu_port to
      filter out the other types of ports. But that function has a hidden call
      to dsa_to_port() in it, which contains:
      
      	list_for_each_entry(dp, &dst->ports, list)
      		if (dp->ds == ds && dp->index == p)
      			return dp;
      
      where the only thing we wanted to know in the first place was whether
      dp->type == DSA_PORT_TYPE_CPU or not.
      
      So it seems that the problem is that we are not iterating with the right
      variable. We have an "int port" but in fact need a "struct dsa_port *dp".
      
      This has started being an issue since this patch series:
      https://patchwork.ozlabs.org/project/netdev/cover/20191020031941.3805884-1-vivien.didelot@gmail.com/
      
      The currently proposed set of changes iterates like this:
      
      	dsa_switch_for_each_cpu_port(cpu_dp, ds)
      		err = ds->ops->change_tag_protocol(ds, cpu_dp->index,
      						   tag_ops->proto);
      
      which iterates directly over ds->dst->ports, which is a list of struct
      dsa_port *dp. This makes it much easier and more efficient to check
      dp->type.
      
      As a nice side effect, with the proposed driver API, driver writers are
      now encouraged to use more efficient patterns, and not only due to less
      iterations through the port list. For example, something like this:
      
      	for (port = 0; port < ds->num_ports; port++)
      		do_something();
      
      probably does not need to do_something() for the ports that are disabled
      in the device tree. But adding extra code for that would look like this:
      
      	for (port = 0; port < ds->num_ports; port++) {
      		if (!dsa_is_unused_port(ds, port))
      			continue;
      
      		do_something();
      	}
      
      and therefore, it is understandable that some driver writers may decide
      to not bother. This patch series introduces a "dsa_switch_for_each_available_port"
      macro which comes at no extra cost in terms of lines of code / number of
      braces to the driver writer, but it has the "dsa_is_unused_port" check
      embedded within it.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ce272973
    • Vladimir Oltean's avatar
      net: dsa: tag_8021q: make dsa_8021q_{rx,tx}_vid take dp as argument · 992e5cc7
      Vladimir Oltean authored
      Pass a single argument to dsa_8021q_rx_vid and dsa_8021q_tx_vid that
      contains the necessary information from the two arguments that are
      currently provided: the switch and the port number.
      
      Also rename those functions so that they have a dsa_port_* prefix, since
      they operate on a struct dsa_port *.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      992e5cc7
    • Vladimir Oltean's avatar
      net: dsa: tag_sja1105: do not open-code dsa_switch_for_each_port · 5068887a
      Vladimir Oltean authored
      Find the remaining iterators over dst->ports that only filter for the
      ports belonging to a certain switch, and replace those with the
      dsa_switch_for_each_port helper that we have now.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      5068887a
    • Vladimir Oltean's avatar
      net: dsa: convert cross-chip notifiers to iterate using dp · fac6abd5
      Vladimir Oltean authored
      The majority of cross-chip switch notifiers need to filter in some way
      over the type of ports: some install VLANs etc on all cascade ports.
      
      The difference is that the matching function, which filters by port
      type, is separate from the function where the iteration happens. So this
      patch needs to refactor the matching functions' prototypes as well, to
      take the dp as argument.
      
      In a future patch/series, I might convert dsa_towards_port to return a
      struct dsa_port *dp too, but at the moment it is a bit entangled with
      dsa_routing_port which is also used by mv88e6xxx and they both return an
      int port. So keep dsa_towards_port the way it is and convert it into a
      dp using dsa_to_port.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fac6abd5
    • Vladimir Oltean's avatar
      net: dsa: remove gratuitous use of dsa_is_{user,dsa,cpu}_port · 57d77986
      Vladimir Oltean authored
      Find the occurrences of dsa_is_{user,dsa,cpu}_port where a struct
      dsa_port *dp was already available in the function scope, and replace
      them with the dsa_port_is_{user,dsa,cpu} equivalent function which uses
      that dp directly and does not perform another hidden dsa_to_port().
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      57d77986
    • Vladimir Oltean's avatar
      net: dsa: do not open-code dsa_switch_for_each_port · 65c563a6
      Vladimir Oltean authored
      Find the remaining iterators over dst->ports that only filter for the
      ports belonging to a certain switch, and replace those with the
      dsa_switch_for_each_port helper that we have now.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      65c563a6
    • Vladimir Oltean's avatar
      net: dsa: remove the "dsa_to_port in a loop" antipattern from the core · d0004a02
      Vladimir Oltean authored
      Ever since Vivien's conversion of the ds->ports array into a dst->ports
      list, and the introduction of dsa_to_port, iterations through the ports
      of a switch became quadratic whenever dsa_to_port was needed.
      
      dsa_to_port can either be called directly, or indirectly through the
      dsa_is_{user,cpu,dsa,unused}_port helpers.
      
      Use the newly introduced dsa_switch_for_each_port() iteration macro
      that works with the iterator variable being a struct dsa_port *dp
      directly, and not an int i. It is an expensive variable to go from i to
      dp, but cheap to go from dp to i.
      
      This macro iterates through the entire ds->dst->ports list and filters
      by the ports belonging just to the switch provided as argument.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d0004a02
    • Vladimir Oltean's avatar
      net: dsa: introduce helpers for iterating through ports using dp · 82b31898
      Vladimir Oltean authored
      Since the DSA conversion from the ds->ports array into the dst->ports
      list, the DSA API has encouraged driver writers, as well as the core
      itself, to write inefficient code.
      
      Currently, code that wants to filter by a specific type of port when
      iterating, like {!unused, user, cpu, dsa}, uses the dsa_is_*_port helper.
      Under the hood, this uses dsa_to_port which iterates again through
      dst->ports. But the driver iterates through the port list already, so
      the complexity is quadratic for the typical case of a single-switch
      tree.
      
      This patch introduces some iteration helpers where the iterator is
      already a struct dsa_port *dp, so that the other variant of the
      filtering functions, dsa_port_is_{unused,user,cpu_dsa}, can be used
      directly on the iterator. This eliminates the second lookup.
      
      These functions can be used both by the core and by drivers.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      82b31898
    • Erik Ekman's avatar
      sfc: Don't use netif_info before net_device setup · bf6abf34
      Erik Ekman authored
      Use pci_info instead to avoid unnamed/uninitialized noise:
      
      [197088.688729] sfc 0000:01:00.0: Solarflare NIC detected
      [197088.690333] sfc 0000:01:00.0: Part Number : SFN5122F
      [197088.729061] sfc 0000:01:00.0 (unnamed net_device) (uninitialized): no SR-IOV VFs probed
      [197088.729071] sfc 0000:01:00.0 (unnamed net_device) (uninitialized): no PTP support
      
      Inspired by fa44821a ("sfc: don't use netif_info et al before
      net_device is registered") from Heiner Kallweit.
      Signed-off-by: default avatarErik Ekman <erik@kryo.se>
      Acked-by: default avatarMartin Habets <habetsm.xilinx@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      bf6abf34
    • Erik Ekman's avatar
      sfc: Export fibre-specific supported link modes · c62041c5
      Erik Ekman authored
      The 1/10GbaseT modes were set up for cards with SFP+ cages in
      3497ed8c ("sfc: report supported link speeds on SFP connections").
      10GbaseT was likely used since no 10G fibre mode existed.
      
      The missing fibre modes for 1/10G were added to ethtool.h in 5711a982
      ("net: ethtool: add support for 1000BaseX and missing 10G link modes")
      shortly thereafter.
      
      The user guide available at https://support-nic.xilinx.com/wp/drivers
      lists support for the following cable and transceiver types in section 2.9:
      - QSFP28 100G Direct Attach Cables
      - QSFP28 100G SR Optical Transceivers (with SR4 modules listed)
      - SFP28 25G Direct Attach Cables
      - SFP28 25G SR Optical Transceivers
      - QSFP+ 40G Direct Attach Cables
      - QSFP+ 40G Active Optical Cables
      - QSFP+ 40G SR4 Optical Transceivers
      - QSFP+ to SFP+ Breakout Direct Attach Cables
      - QSFP+ to SFP+ Breakout Active Optical Cables
      - SFP+ 10G Direct Attach Cables
      - SFP+ 10G SR Optical Transceivers
      - SFP+ 10G LR Optical Transceivers
      - SFP 1000BASE‐T Transceivers
      - 1G Optical Transceivers
      (From user guide issue 28. Issue 16 which also includes older cards like
      SFN5xxx/SFN6xxx has matching lists for 1/10/40G transceiver types.)
      
      Regarding SFP+ 10GBASE‐T transceivers the latest guide says:
      "Solarflare adapters do not support 10GBASE‐T transceiver modules."
      
      Tested using SFN5122F-R7 (with 2 SFP+ ports). Supported link modes do not change
      depending on module used (tested with 1000BASE-T, 1000BASE-BX10, 10GBASE-LR).
      Before:
      
      $ ethtool ext
      Settings for ext:
      	Supported ports: [ FIBRE ]
      	Supported link modes:   1000baseT/Full
      	                        10000baseT/Full
      	Supported pause frame use: Symmetric Receive-only
      	Supports auto-negotiation: No
      	Supported FEC modes: Not reported
      	Advertised link modes:  Not reported
      	Advertised pause frame use: No
      	Advertised auto-negotiation: No
      	Advertised FEC modes: Not reported
      	Link partner advertised link modes:  Not reported
      	Link partner advertised pause frame use: No
      	Link partner advertised auto-negotiation: No
      	Link partner advertised FEC modes: Not reported
      	Speed: 1000Mb/s
      	Duplex: Full
      	Auto-negotiation: off
      	Port: FIBRE
      	PHYAD: 255
      	Transceiver: internal
              Current message level: 0x000020f7 (8439)
                                     drv probe link ifdown ifup rx_err tx_err hw
      	Link detected: yes
      
      After:
      
      $ ethtool ext
      Settings for ext:
      	Supported ports: [ FIBRE ]
      	Supported link modes:   1000baseT/Full
      	                        1000baseX/Full
      	                        10000baseCR/Full
      	                        10000baseSR/Full
      	                        10000baseLR/Full
      	Supported pause frame use: Symmetric Receive-only
      	Supports auto-negotiation: No
      	Supported FEC modes: Not reported
      	Advertised link modes:  Not reported
      	Advertised pause frame use: No
      	Advertised auto-negotiation: No
      	Advertised FEC modes: Not reported
      	Link partner advertised link modes:  Not reported
      	Link partner advertised pause frame use: No
      	Link partner advertised auto-negotiation: No
      	Link partner advertised FEC modes: Not reported
      	Speed: 1000Mb/s
      	Duplex: Full
      	Auto-negotiation: off
      	Port: FIBRE
      	PHYAD: 255
      	Transceiver: internal
      	Supports Wake-on: g
      	Wake-on: d
              Current message level: 0x000020f7 (8439)
                                     drv probe link ifdown ifup rx_err tx_err hw
      	Link detected: yes
      Signed-off-by: default avatarErik Ekman <erik@kryo.se>
      Acked-by: default avatarMartin Habets <habetsm.xilinx@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c62041c5
    • David S. Miller's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf · 1439caa1
      David S. Miller authored
      Pablo Neira Ayuso says:
      
      ====================
      Netfilter/IPVS fixes for net
      
      The following patchset contains Netfilter fixes for net:
      
      1) Crash due to missing initialization of timer data in
         xt_IDLETIMER, from Juhee Kang.
      
      2) NF_CONNTRACK_SECMARK should be bool in Kconfig, from Vegard Nossum.
      
      3) Skip netdev events on netns removal, from Florian Westphal.
      
      4) Add testcase to show port shadowing via UDP, also from Florian.
      
      5) Remove pr_debug() code in ip6t_rt, this fixes a crash due to
         unsafe access to non-linear skbuff, from Xin Long.
      
      6) Make net/ipv4/vs/debug_level read-only from non-init netns,
         from Antoine Tenart.
      
      7) Remove bogus invocation to bash in selftests/netfilter/nft_flowtable.sh
         also from Florian.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1439caa1
    • David S. Miller's avatar
      Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue · dedb0809
      David S. Miller authored
      Tony Nguyen says:
      
      ====================
      100GbE Intel Wired LAN Driver Updates 2021-10-20
      
      Sudheer Mogilappagari says:
      
      This series introduces initial support for Application Device Queues(ADQ)
      in ice driver. ADQ provides traffic isolation for application flows in
      hardware and ability to steer traffic to a given traffic class. This
      helps in aligning NIC queues to application threads.
      
      Traffic classes are configured using mqprio framework of tc command
      and mapped to HW channels(VSIs) in the driver. The queue set of each
      traffic class is managed by corresponding VSI. Each traffic channel
      can be configured with bandwidth rate-limiting limits and is offloaded
      to the hardware through the mqprio framework by specifying the mode
      option as 'channel' and shaper option as 'bw_rlimit'.
      
      Next, the flows of application can be steered into a given traffic class
      using "tc filter" command. The option "skip_sw hw_tc x" indicates
      hw-offload of filtering and steering filtered traffic into specified TC.
      Non-matching traffic flows through TC0.
      
      When channel configuration are removed queue configuration is set to
      default and filters configured on individual traffic classes are deleted.
      
      example:
      $ ethtool -K eth0 hw-tc-offload on
      
      Configure 3 traffic classes and map priority 0,1,2 to TC0, TC1 and TC2
      respectively. TC0 has 2 queues from offset 0 & TC1 has 8 queues from
      offset 2 and TC2 has 4 queues from offset 10. Enable hardware offload
      of channels.
      
      $ tc qdisc add dev eth0 root mqprio num_tc 3 map 0 1 2 queues \
              2@0 8@2 4@10 hw 1 mode channel
      
      $ tc qdisc show dev eth0
      qdisc mqprio 8001: root  tc 2 map 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0
                   queues:(0:1) (2:9) (10:13)
                   mode:channel
      
      Configure two filters to match based on dst ipaddr, dst tcp port and
      redirect to TC1 and TC2.
      $ tc qdisc add dev eth0 clsact
      
      $ tc filter add dev eth0 protocol ip ingress prio 1 flower\
        dst_ip 192.168.1.1/32 ip_proto tcp dst_port 80\
        skip_sw hw_tc 1
      $ tc filter add dev eth0 protocol ip ingress prio 1 flower\
        dst_ip 192.168.1.1/32 ip_proto tcp dst_port 5001\
        skip_sw hw_tc 2
      
      $ tc filter show dev eth0 ingress
      
      Delete traffic classes configuration:
      $ sudo tc qdisc del dev eth0 root
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      dedb0809
    • David S. Miller's avatar
    • Vladimir Oltean's avatar
      net: mscc: ocelot: track the port pvid using a pointer · d4004422
      Vladimir Oltean authored
      Now that we have a list of struct ocelot_bridge_vlan entries, we can
      rewrite the pvid logic to simply point to one of those structures,
      instead of having a separate structure with a "bool valid".
      The NULL pointer will represent the lack of a bridge pvid (not to be
      confused with the lack of a hardware pvid on the port, that is present
      at all times).
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d4004422
    • Vladimir Oltean's avatar
      net: mscc: ocelot: add the local station MAC addresses in VID 0 · bfbab310
      Vladimir Oltean authored
      The ocelot switchdev driver does not include the CPU port in the list of
      flooding destinations for unknown traffic, instead that traffic is
      supposed to match FDB entries to reach the CPU.
      
      The addresses it installs are:
      (a) the station MAC address, in ocelot_probe_port() and later during
          runtime in ocelot_port_set_mac_address(). These are the VLAN-unaware
          addresses. The VLAN-aware addresses are in ocelot_vlan_vid_add().
      (b) multicast addresses added with dev_mc_add() (not bridge host MDB
          entries) in ocelot_mc_sync()
      (c) multicast destination MAC addresses for MRP in ocelot_mrp_save_mac(),
          to make sure those are dropped (not forwarded) by the bridging
          service, just trapped to the CPU
      
      So we can see that the logic is slightly buggy ever since the initial
      commit a556c76a ("net: mscc: Add initial Ocelot switch support").
      This is because, when ocelot_probe_port() runs, the port pvid is 0.
      Then we join a VLAN-aware bridge, the pvid becomes 1, we call
      ocelot_port_set_mac_address(), this learns the new MAC address in VID 1
      (also fails to forget the old one, since it thinks it's in VID 1, but
      that's not so important). Then when we leave the VLAN-aware bridge,
      outside world is unable to ping our new MAC address because it isn't
      learned in VID 0, the VLAN-unaware pvid.
      
      [ note: this is strictly based on static analysis, I don't have hardware
        to test. But there are also many more corner cases ]
      
      The basic idea is that we should have a separation of concerns, and the
      FDB entries used for standalone operation should be managed by the
      driver, and the FDB entries used by the bridging service should be
      managed by the bridge. So the standalone and VLAN-unaware bridge FDB
      entries should not follow the bridge PVID, because that will only be
      active when the bridge is VLAN-aware. So since the port pvid is
      coincidentally zero during probe time, just make those entries
      statically go to VID 0.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      bfbab310
    • Vladimir Oltean's avatar
      net: mscc: ocelot: allow a config where all bridge VLANs are egress-untagged · 0da1a1c4
      Vladimir Oltean authored
      At present, the ocelot driver accepts a single egress-untagged bridge
      VLAN, meaning that this sequence of operations:
      
      ip link add br0 type bridge vlan_filtering 1
      ip link set swp0 master br0
      bridge vlan add dev swp0 vid 2 pvid untagged
      
      fails because the bridge automatically installs VID 1 as a pvid & untagged
      VLAN, and vid 2 would be the second untagged VLAN on this port. It is
      necessary to delete VID 1 before proceeding to add VID 2.
      
      This limitation comes from the fact that we operate the port tag, when
      it has an egress-untagged VID, in the OCELOT_PORT_TAG_NATIVE mode.
      The ocelot switches do not have full flexibility and can either have one
      single VID as egress-untagged, or all of them.
      
      There are use cases for having all VLANs as egress-untagged as well, and
      this patch adds support for that.
      
      The change rewrites ocelot_port_set_native_vlan() into a more generic
      ocelot_port_manage_port_tag() function. Because the software bridge's
      state, transmitted to us via switchdev, can become very complex, we
      don't attempt to track all possible state transitions, but instead take
      a more declarative approach and just make ocelot_port_manage_port_tag()
      figure out which more to operate in:
      
      - port is VLAN-unaware: the classified VLAN (internal, unrelated to the
                              802.1Q header) is not inserted into packets on egress
      - port is VLAN-aware:
        - port has tagged VLANs:
          -> port has no untagged VLAN: set up as pure trunk
          -> port has one untagged VLAN: set up as trunk port + native VLAN
          -> port has more than one untagged VLAN: this is an invalid config
             which is rejected by ocelot_vlan_prepare
        - port has no tagged VLANs
          -> set up as pure egress-untagged port
      
      We don't keep the number of tagged and untagged VLANs, we just count the
      structures we keep.
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0da1a1c4