1. 27 Jul, 2021 40 commits
    • Shannon Nelson's avatar
      ionic: use fewer inits on the buf_info struct · e75ccac1
      Shannon Nelson authored
      Based on Alex's review notes on [1], we don't need to write
      to the buf_info elements as often, and can tighten up how they
      are used.  Also, use prefetchw() to warm up the page struct
      for a later get_page().
      
      [1] https://lore.kernel.org/netdev/CAKgT0UfyjoAN7LTnq0NMZfXRv4v7iTCPyAb9pVr3qWMhop_BVw@mail.gmail.com/Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e75ccac1
    • Shannon Nelson's avatar
      ionic: init reconfig err to 0 · e7f52aa4
      Shannon Nelson authored
      Initialize err to 0 instead of ENOMEM, and specifically set
      err to ENOMEM in the devm_kcalloc() failure cases.
      
      Also, add an error message to the end of reconfig.
      Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e7f52aa4
    • Shannon Nelson's avatar
      ionic: print firmware version on identify · 73d618bb
      Shannon Nelson authored
      Print the version of the DSC firmware seen when we do a fresh
      ident check.  Because the FW can be updated by the external
      orchestration system, this helps us track that FW has been
      updated on the DSC.
      Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      73d618bb
    • Shannon Nelson's avatar
      ionic: monitor fw status generation · d2662072
      Shannon Nelson authored
      The top 4 bits of the fw_status in dev_info_regs is reserved
      for the status generation.  This generation number is an
      arbitrary value defined when firmware starts up.  If the FW
      is killed/crashed/stopped and then restarted, it will create
      a different generation number.  With this mechanism, the host
      driver can detect that the FW has crashed and restarted, and
      the driver can then take steps to re-initialize its connection.
      Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d2662072
    • Shannon Nelson's avatar
      ionic: minimize resources when under kdump · c0b03e83
      Shannon Nelson authored
      When running in a small kdump kernel, we can play nice and
      minimize our resource use to help make sure that kdump is
      successful in its mission.
      Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c0b03e83
    • David S. Miller's avatar
      Merge branch 'ndo_ioctl-rework' · 7c57706b
      David S. Miller authored
      Arnd Bergmann says:
      
      ====================
      ndo_ioctl rework
      
      This series is a follow-up to the series for removing
      compat_alloc_user_space() and copy_in_user() that has now
      been merged.
      
      I wanted to be sure I address all the ways that 'struct ifreq' is used
      in device drivers through .ndo_do_ioctl, originally to prove that
      my approach of changing the struct definition was correct, but then
      I discarded that approach and went on anyway.
      
      Roughly, the contents here are:
      
       - split out all the users of SIOCDEVPRIVATE ioctls into a
         separate ndo_siocdevprivate callback, to better see what
         gets used where
      
       - fix compat handling for those drivers that pass data
         directly inside of 'ifreq' rather than using an indirect
         ifr_data pointer
      
       - remove unreachable code in ndo_ioctl handlers that relies
         on command codes we never pass into that, in particular
         for wireless drivers
      
       - split out the ethernet specific ioctls into yet another
         ndo_eth_ioctl callback, as these are by far the most
         common use of ndo_do_ioctl today. I considered splitting
         them further into MII and timestamp controls, but
         went with the simpler change for now.
      
       - split out bonding and wandev ioctls into separate helpers
      
       - rework the bridge handling with a separate callback
      
      At this point, only a few oddball things remain in ndo_do_ioctl:
      appletalk and ieee802154 pass down SIOCSIFADDR/SIOCGIFADDR and
      some wireless drivers have completely dead code.
      
      I have thoroughly compile tested this on randconfig builds,
      but not done any notable runtime testing, so please review.
      All of it is also available as part of a larger branch at
      
      https://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground.git \
      	compat-alloc-user-space-12
      
      Changes since v2:
      - rebase to net-next
      - fix qeth regression
      - Cc driver maintainers for each patch and in cover letter
      
      Changes since v1:
      
      - rebase to linux-5.14-rc2
      - add conversion for ndo_siowandev, bridge and bonding drivers
      - leave broken wifi drivers untouched for now
      
      Link: https://lore.kernel.org/netdev/20201106221743.3271965-14-arnd@kernel.org/
      ====================
      7c57706b
    • Arnd Bergmann's avatar
      net: bonding: move ioctl handling to private ndo operation · 3d9d00bd
      Arnd Bergmann authored
      All other user triggered operations are gone from ndo_ioctl, so move
      the SIOCBOND family into a custom operation as well.
      
      The .ndo_ioctl() helper is no longer called by the dev_ioctl.c code now,
      but there are still a few definitions in obsolete wireless drivers as well
      as the appletalk and ieee802154 layers to call SIOCSIFADDR/SIOCGIFADDR
      helpers from inside the kernel.
      
      Cc: Jay Vosburgh <j.vosburgh@gmail.com>
      Cc: Veaceslav Falico <vfalico@gmail.com>
      Cc: Andy Gospodarek <andy@greyhouse.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3d9d00bd
    • Arnd Bergmann's avatar
      net: bridge: move bridge ioctls out of .ndo_do_ioctl · ad2f99ae
      Arnd Bergmann authored
      Working towards obsoleting the .ndo_do_ioctl operation entirely,
      stop passing the SIOCBRADDIF/SIOCBRDELIF device ioctl commands
      into this callback.
      
      My first attempt was to add another ndo_siocbr() callback, but
      as there is only a single driver that takes these commands and
      there is already a hook mechanism to call directly into this
      driver, extend this hook instead, and use it for both the
      deviceless and the device specific ioctl commands.
      
      Cc: Roopa Prabhu <roopa@nvidia.com>
      Cc: Nikolay Aleksandrov <nikolay@nvidia.com>
      Cc: bridge@lists.linux-foundation.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ad2f99ae
    • Arnd Bergmann's avatar
      net: socket: return changed ifreq from SIOCDEVPRIVATE · 88fc023f
      Arnd Bergmann authored
      Some drivers that use SIOCDEVPRIVATE ioctl commands modify
      the ifreq structure and expect it to be passed back to user
      space, which has never really happened for compat mode
      because the calling these drivers through ndo_do_ioctl
      requires overwriting the ifr_data pointer.
      
      Now that all drivers are converted to ndo_siocdevprivate,
      change it to handle this correctly in both compat and
      native mode.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      88fc023f
    • Arnd Bergmann's avatar
      net: split out ndo_siowandev ioctl · ad7eab2a
      Arnd Bergmann authored
      In order to further reduce the scope of ndo_do_ioctl(), move
      out the SIOCWANDEV handling into a new network device operation
      function.
      
      Adjust the prototype to only pass the if_settings sub-structure
      in place of the ifreq, and remove the redundant 'cmd' argument
      in the process.
      
      Cc: Krzysztof Halasa <khc@pm.waw.pl>
      Cc: "Jan \"Yenya\" Kasprzak" <kas@fi.muni.cz>
      Cc: Kevin Curtis <kevin.curtis@farsite.co.uk>
      Cc: Zhao Qiang <qiang.zhao@nxp.com>
      Cc: Martin Schiller <ms@dev.tdt.de>
      Cc: Jiri Slaby <jirislaby@kernel.org>
      Cc: linux-x25@vger.kernel.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ad7eab2a
    • Arnd Bergmann's avatar
      dev_ioctl: split out ndo_eth_ioctl · a7605370
      Arnd Bergmann authored
      Most users of ndo_do_ioctl are ethernet drivers that implement
      the MII commands SIOCGMIIPHY/SIOCGMIIREG/SIOCSMIIREG, or hardware
      timestamping with SIOCSHWTSTAMP/SIOCGHWTSTAMP.
      
      Separate these from the few drivers that use ndo_do_ioctl to
      implement SIOCBOND, SIOCBR and SIOCWANDEV commands.
      
      This is a purely cosmetic change intended to help readers find
      their way through the implementation.
      
      Cc: Doug Ledford <dledford@redhat.com>
      Cc: Jason Gunthorpe <jgg@ziepe.ca>
      Cc: Jay Vosburgh <j.vosburgh@gmail.com>
      Cc: Veaceslav Falico <vfalico@gmail.com>
      Cc: Andy Gospodarek <andy@greyhouse.net>
      Cc: Andrew Lunn <andrew@lunn.ch>
      Cc: Vivien Didelot <vivien.didelot@gmail.com>
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Cc: Vladimir Oltean <olteanv@gmail.com>
      Cc: Leon Romanovsky <leon@kernel.org>
      Cc: linux-rdma@vger.kernel.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Acked-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a7605370
    • Arnd Bergmann's avatar
      dev_ioctl: pass SIOCDEVPRIVATE data separately · a554bf96
      Arnd Bergmann authored
      The compat handlers for SIOCDEVPRIVATE are incorrect for any driver that
      passes data as part of struct ifreq rather than as an ifr_data pointer, or
      that passes data back this way, since the compat_ifr_data_ioctl() helper
      overwrites the ifr_data pointer and does not copy anything back out.
      
      Since all drivers using devprivate commands are now converted to the
      new .ndo_siocdevprivate callback, fix this by adding the missing piece
      and passing the pointer separately the whole way.
      
      This further unifies the native and compat logic for socket ioctls,
      as the new code now passes the correct pointer as well as the correct
      data for both native and compat ioctls.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a554bf96
    • Arnd Bergmann's avatar
      wan: cosa: remove dead cosa_net_ioctl() function · 8fb75b79
      Arnd Bergmann authored
      The ndo_do_ioctl callback is never called with the COSAIO* commands,
      so this is never used. Call the hdlc_ioctl function directly instead.
      
      Any user space code that relied on this function working as intended
      has never worked in a mainline kernel since before linux-1.0.
      
      Cc: "Jan \"Yenya\" Kasprzak" <kas@fi.muni.cz>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8fb75b79
    • Arnd Bergmann's avatar
      wan: use ndo_siocdevprivate · 73d74f61
      Arnd Bergmann authored
      The wan drivers each support some custom SIOCDEVPRIVATE
      ioctls, plus the common SIOCWANDEV command.
      
      Split these so the ioctl callback only deals with SIOCWANDEV
      and the rest is handled by ndo_siocdevprivate.
      
      It might make sense to also split out SIOCWANDEV into a
      separate callback in order to eventually remove ndo_do_ioctl
      entirely.
      
      Cc: Krzysztof Halasa <khc@pm.waw.pl>
      Cc: Kevin Curtis <kevin.curtis@farsite.co.uk>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      73d74f61
    • Arnd Bergmann's avatar
      ppp: use ndo_siocdevprivate · 34f7cac0
      Arnd Bergmann authored
      ppp has a custom statistics interface using SIOCDEVPRIVATE
      ioctl commands that works correctly in compat mode.
      
      Convert it to use ndo_siocdevprivate as a cleanup.
      
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: linux-ppp@vger.kernel.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      34f7cac0
    • Arnd Bergmann's avatar
      sb1000: use ndo_siocdevprivate · cc0aa831
      Arnd Bergmann authored
      The private sb1000 ioctl commands all work correctly in
      compat mode. Change the to ndo_siocdevprivate as a cleanup.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      cc0aa831
    • Arnd Bergmann's avatar
      hippi: use ndo_siocdevprivate · 81a68110
      Arnd Bergmann authored
      The rr_ioctl uses private ioctl commands that correctly pass
      all data through ifr_data, which works fine in compat mode.
      
      Change it to use ndo_siocdevprivate as a cleanup.
      
      Cc: Jes Sorensen <jes@trained-monkey.org>
      Cc: linux-hippi@sunsite.dk
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      81a68110
    • Arnd Bergmann's avatar
      ip_tunnel: use ndo_siocdevprivate · 3e7a1c7c
      Arnd Bergmann authored
      The various ipv4 and ipv6 tunnel drivers each implement a set
      of 12 SIOCDEVPRIVATE commands for managing tunnels. These
      all work correctly in compat mode.
      
      Move them over to the new .ndo_siocdevprivate operation.
      
      Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
      Cc: David Ahern <dsahern@kernel.org>
      Cc: Steffen Klassert <steffen.klassert@secunet.com>
      Cc: Herbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3e7a1c7c
    • Arnd Bergmann's avatar
      airo: use ndo_siocdevprivate · ae6af012
      Arnd Bergmann authored
      The airo driver overloads SIOCDEVPRIVATE ioctls with another
      set based on SIOCIWFIRSTPRIV. Only the first ones actually
      work (also in compat mode) as the others do not get passed
      down any more.
      
      Change it over to ndo_siocdevprivate for clarification.
      
      Cc: Kalle Valo <kvalo@codeaurora.org>
      Cc: linux-wireless@vger.kernel.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ae6af012
    • Arnd Bergmann's avatar
      hamradio: use ndo_siocdevprivate · 25ec92fb
      Arnd Bergmann authored
      hamradio uses a set of private ioctls that do seem to work
      correctly in compat mode, as they only rely on the ifr_data
      pointer.
      
      Move them over to the ndo_siocdevprivate callback as a cleanup.
      
      Cc: Thomas Sailer <t.sailer@alumni.ethz.ch>
      Cc: Joerg Reuter <jreuter@yaina.de>
      Cc: Jean-Paul Roubelat <jpr@f6fbb.org>
      Cc: linux-hams@vger.kernel.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      25ec92fb
    • Arnd Bergmann's avatar
      cxgb3: use ndo_siocdevprivate · ebb4a911
      Arnd Bergmann authored
      cxgb3 has a private multiplexor that works correctly in compat
      mode, split out the siocdevprivate callback from do_ioctl for
      simplification.
      
      Cc: Raju Rangoju <rajur@chelsio.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ebb4a911
    • Arnd Bergmann's avatar
      qeth: use ndo_siocdevprivate · 18787eee
      Arnd Bergmann authored
      qeth has both standard MII ioctls and custom SIOCDEVPRIVATE ones,
      all of which work correctly with compat user space.
      
      Move the private ones over to the new ndo_siocdevprivate callback.
      
      Cc: Julian Wiedmann <jwi@linux.ibm.com>
      Cc: Karsten Graul <kgraul@linux.ibm.com>
      Cc: Heiko Carstens <hca@linux.ibm.com>
      Cc: Vasily Gorbik <gor@linux.ibm.com>
      Cc: Christian Borntraeger <borntraeger@de.ibm.com>
      Cc: linux-s390@vger.kernel.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      18787eee
    • Arnd Bergmann's avatar
      slip/plip: use ndo_siocdevprivate · 76b5878c
      Arnd Bergmann authored
      slip and plip both use a couple of SIOCDEVPRIVATE ioctl
      commands that overload the ifreq layout in a way that is
      incompatible with compat mode.
      
      Convert to use ndo_siocdevprivate to allow passing the
      data this way, but return an error in compat mode anyway
      because the private structure is still incompatible.
      
      This could be fixed as well to make compat work properly.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      76b5878c
    • Arnd Bergmann's avatar
      net: usb: use ndo_siocdevprivate · ef1b5b0c
      Arnd Bergmann authored
      The pegasus and rtl8150 drivers use SIOCDEVPRIVATE ioctls
      to access their MII registers, in place of the normal
      commands. This is broken for all compat ioctls today.
      
      Change to ndo_siocdevprivate to fix it.
      
      Cc: Petko Manolov <petkan@nucleusys.com>
      Cc: linux-usb@vger.kernel.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ef1b5b0c
    • Arnd Bergmann's avatar
      fddi: use ndo_siocdevprivate · 043393d8
      Arnd Bergmann authored
      The skfddi driver has a private ioctl and passes the data correctly
      through ifr_data, but the use of a pointer in s_skfp_ioctl is
      broken in compat mode.
      
      Change the driver to use ndo_siocdevprivate and disallow calling
      it in compat mode until a conversion handler is added.
      
      Cc: "Maciej W. Rozycki" <macro@orcam.me.uk>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      043393d8
    • Arnd Bergmann's avatar
      eql: use ndo_siocdevprivate · d92f7b59
      Arnd Bergmann authored
      The private ioctls in eql pass the arguments correctly through ifr_data,
      but the slaving_request_t and slave_config_t structures are incompatible
      with compat mode and need special conversion code in the driver.
      
      Convert to siocdevprivate for now, and return an error when called
      in compat mode.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d92f7b59
    • Arnd Bergmann's avatar
      tehuti: use ndo_siocdevprivate · 32d05468
      Arnd Bergmann authored
      Tehuti only implements private ioctl commands, and implements
      them by overriding the ifreq layout, which is broken in
      compat mode.
      
      Move it to the ndo_siocdevprivate callback in order to fix this.
      
      Cc: Andy Gospodarek <andy@greyhouse.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      32d05468
    • Arnd Bergmann's avatar
      hamachi: use ndo_siocdevprivate · 99b78a37
      Arnd Bergmann authored
      hamachi has one command that overloads the ifreq argument
      and requires a conversion to ndo_siocdevprivate in order to
      make compat mode work, so split it from ndo_ioctl.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      99b78a37
    • Arnd Bergmann's avatar
      appletalk: use ndo_siocdevprivate · dbecb011
      Arnd Bergmann authored
      appletalk has three SIOCDEVPRIVATE ioctl commands that are
      broken in compat mode because the passed structure contains
      a pointer.
      
      Change it over to ndo_siocdevprivate for consistency and
      make it return an error when called in compat mode. This
      could be fixed if there are still users.
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      dbecb011
    • Arnd Bergmann's avatar
      bonding: use siocdevprivate · 232ec98e
      Arnd Bergmann authored
      The bonding driver supports two command codes for each operation: one
      in the SIOCDEVPRIVATE range and another one with the same definition
      but a unique command code.
      
      Only the second set currently works in compat mode, as the ifr_data
      expansion overwrites part of the ifr_slave field.
      
      Move the private ones into ndo_siocdevprivate and change the
      implementation to call the other function.  This makes both version
      work correctly.
      
      Cc: Jay Vosburgh <j.vosburgh@gmail.com>
      Cc: Veaceslav Falico <vfalico@gmail.com>
      Cc: Andy Gospodarek <andy@greyhouse.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      232ec98e
    • Arnd Bergmann's avatar
      tulip: use ndo_siocdevprivate · 029a4fef
      Arnd Bergmann authored
      The tulip driver has a debugging method over ioctl built-in, but it
      does not actually check the command type, which may end up leading
      to random behavior when trying to run other ioctls on it.
      
      Change the driver to use ndo_siocdevprivate and limit the execution
      further to the first private command code. If anyone still has tools
      to run these debugging commands, they might have to be patched for
      it if they pass different ioctl command.
      
      The function has existed in this form since the driver was merged in
      Linux-1.1.86.
      
      Cc: linux-parisc@vger.kernel.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      029a4fef
    • Arnd Bergmann's avatar
      phonet: use siocdevprivate · 4747c1a8
      Arnd Bergmann authored
      phonet has a single private ioctl that is broken in compat
      mode on big-endian machines today because the data returned
      from it is never copied back to user space.
      
      Move it over to the ndo_siocdevprivate callback, which also
      fixes the compat issue.
      
      Cc: Remi Denis-Courmont <courmisch@gmail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Acked-by: default avatarRémi Denis-Courmont <courmisch@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4747c1a8
    • Arnd Bergmann's avatar
      bridge: use ndo_siocdevprivate · 561d8352
      Arnd Bergmann authored
      The bridge driver has an old set of ioctls using the SIOCDEVPRIVATE
      namespace that have never worked in compat mode and are explicitly
      forbidden already.
      
      Move them over to ndo_siocdevprivate and fix compat mode for these,
      because we can.
      
      Cc: Roopa Prabhu <roopa@nvidia.com>
      Cc: Nikolay Aleksandrov <nikolay@nvidia.com>
      Cc: bridge@lists.linux-foundation.org
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      561d8352
    • Arnd Bergmann's avatar
      hostap: use ndo_siocdevprivate · 3f3fa534
      Arnd Bergmann authored
      hostap has a combination of iwpriv ioctls that do not work at
      all, and two SIOCDEVPRIVATE commands that work natively but
      lack a compat conversion handler.
      
      For the moment, move them over to the new ndo_siocdevprivate
      interface and return an error for compat mode.
      
      Cc: Jouni Malinen <j@w1.fi>
      Cc: Kalle Valo <kvalo@codeaurora.org>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3f3fa534
    • Arnd Bergmann's avatar
      staging: wlan-ng: use siocdevprivate · 3343c49a
      Arnd Bergmann authored
      wlan-ng has two private ioctls that correctly work in compat
      mode. Move these over to the new ndo_siocdevprivate mechanism.
      
      The p80211netdev_ethtool() function is commented out and
      has no use here, so this can be removed
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3343c49a
    • Arnd Bergmann's avatar
      staging: rtlwifi: use siocdevprivate · 89939e89
      Arnd Bergmann authored
      rtl8188eu has an "android private" ioctl command multiplexer
      that is not currently safe for use in compat mode because
      of its triple-indirect pointer.
      
      rtl8723bs uses a different interface on the SIOCDEVPRIVATE
      command, based on the iwpriv data structure
      
      Both also have normal unreachable iwpriv commands, and all
      of the above should probably just get removed. For the
      moment, just switch over to the new interface.
      
      Cc: Larry Finger <Larry.Finger@lwfinger.net>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      89939e89
    • Arnd Bergmann's avatar
      net: split out SIOCDEVPRIVATE handling from dev_ioctl · b9067f5d
      Arnd Bergmann authored
      SIOCDEVPRIVATE ioctl commands are mainly used in really old
      drivers, and they have a number of problems:
      
      - They hide behind the normal .ndo_do_ioctl function that
        is also used for other things in modern drivers, so it's
        hard to spot a driver that actually uses one of these
      
      - Since drivers use a number different calling conventions,
        it is impossible to support compat mode for them in
        a generic way.
      
      - With all drivers using the same 16 commands codes, there
        is no way to introspect the data being passed through
        things like strace.
      
      Add a new net_device_ops callback pointer, to address the
      first two of these. Separating them from .ndo_do_ioctl
      makes it easy to grep for drivers with a .ndo_siocdevprivate
      callback, and the unwieldy name hopefully makes it easier
      to spot in code review.
      
      By passing the ifreq structure and the ifr_data pointer
      separately, it is no longer necessary to overload these,
      and the driver can use either one for a given command.
      
      Cc: Cong Wang <cong.wang@bytedance.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b9067f5d
    • David S. Miller's avatar
      Merge branch 'tcp-rack' · 2fba2eae
      David S. Miller authored
      Neal Cardwell says:
      
      ====================
      more accurate DSACK processing for RACK-TLP
      
      This patch series includes two minor improvements to tighten up the accuracy of
      the processing of incoming DSACK information, so that RACK-TLP behavior is
      faster and more precise: first, to ensure we detect packet loss in some extra
      corner cases; and second, to avoid growing the RACK reordering window (and
      delaying fast recovery) in cases where it seems clear we don't need to.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2fba2eae
    • Neal Cardwell's avatar
      tcp: more accurately check DSACKs to grow RACK reordering window · a657db03
      Neal Cardwell authored
      Previously, a DSACK could expand the RACK reordering window when no
      reordering has been seen, and/or when the DSACK was due to an
      unnecessary TLP retransmit (rather than a spurious fast recovery due
      to reordering). This could result in unnecessarily growing the RACK
      reordering window and thus unnecessarily delaying RACK-based fast
      recovery episodes.
      
      To avoid these issues, this commit tightens the conditions under which
      a DSACK triggers the RACK reordering window to grow, so that a
      connection only expands its RACK reordering window if:
      
      (a) reordering has been seen in the connection
      (b) a DSACKed range does not match the most recent TLP retransmit
      Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
      Acked-by: default avatarYuchung Cheng <ycheng@google.com>
      Acked-by: default avatarPriyaranjan Jha <priyarjha@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a657db03
    • Yuchung Cheng's avatar
      tcp: more accurately detect spurious TLP probes · 63f367d9
      Yuchung Cheng authored
      Previously TLP is considered spurious if the sender receives any
      DSACK during a TLP episode. This patch further checks the DSACK
      sequences match the TLP's to improve accuracy.
      Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
      Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
      Acked-by: default avatarPriyaranjan Jha <priyarjha@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      63f367d9