1. 13 Sep, 2017 3 commits
    • Stephen Hurd's avatar
      Roll up iflib commits from github. This pulls in most of the work done · d300df01
      Stephen Hurd authored
      by Matt Macy as well as other changes which he has accepted via pull
      request to his github repo at https://github.com/mattmacy/networking/
      This should bring -CURRENT and the github repo into close enough sync to
      allow small feature branches rather than a large chain of interdependant
      patches being developed out of tree.  The reset of the synchronization
      should be able to be completed on github by splitting the remaining
      changes that are not yet ready into short feature branches for later
      review as smaller commits.
      Here is a summary of changes included in this patch:
      1)  More checks when INVARIANTS are enabled for eariler problem
      2)  Group Task Queue cleanups
          - Fix use of duplicate shortdesc for gtaskqueue malloc type.
            Some interfaces such as memguard(9) use the short description to
            identify malloc types, so duplicates should be avoided.
      3)  Allow gtaskqueues to use ithreads in addition to taskqueues
          - In some cases, this can improve performance
      4)  Better logging when taskqgroup_attach*() fails to set interrupt
      5)  Do not start gtaskqueues until they're needed
      6)  Have mp_ring enqueue function enter the ABDICATED rather than BUSY
          state.  This moves the TX to the gtaskq and allows processing to
          continue faster as well as make TX batching more likely.
      7)  Add an ift_txd_errata function to struct if_txrx.  This allows
          drivers to inspect/modify mbufs before transmission.
      8)  Add a new IFLIB_NEED_ZERO_CSUM for drivers to indicate they need
          checksums zeroed for checksum offload to work.  This avoids modifying
          packet data in the TX path when possible.
      9)  Use ithreads for iflib I/O instead of taskqueues
      10) Clean up ioctl and support async ioctl functions
      11) Prefetch two cachlines from each mbuf instead of one up to 128B.  We
          often need to parse packet header info beyond 64B.
      12) Fix potential memory corruption due to fence post error in
          bit_nclear() usage.
      13) Improved hang detection and handling
      14) If the packet is smaller than MTU, disable the TSO flags.
          This avoids extra packet parsing when not needed.
      15) Move TCP header parsing inside the IS_TSO?() test.
          This avoids extra packet parsing when not needed.
      16) Pass chains of mbufs that are not consumed by lro to if_input()
          rather call if_input() for each mbuf.
      17) Re-arrange packet header loads to get as much work as possible done
          before a cache stall.
      18) Lock the context when calling IFDI_ATTACH_PRE()/IFDI_ATTACH_POST()/
      19) Attempt to distribute RX/TX tasks across cores more sensibly,
          especially when RX and TX share an interrupt.  RX will attempt to
          take the first threads on a core, and TX will attempt to take
          successive threads.
      20) Allow iflib_softirq_alloc_generic() to request affinity to the same
          cpus an interrupt has affinity with.  This allows TX queues to
          ensure they are serviced by the socket the device is on.
      21) Add new iflib sysctls to net.iflib:
          - timer_int - interval at which to run per-queue timers in ticks
          - force_busdma
      22) Add new per-device iflib sysctls to dev.X.Y.iflib
          - rx_budget allows tuning the batch size on the RX path
          - watchdog_events Count of watchdog events seen since load
      23) Fix error where netmap_rxq_init() could get called before
      24) e1000: Fixed version of r323008: post-cold sleep instead of DELAY
          when waiting for firmware
          - After interrupts are enabled, convert all waits to sleeps
          - Eliminates e1000 software/firmware synchronization busy waits after
      25) e1000: Remove special case for budget=1 in em_txrx.c
          - Premature optimization which may actually be incorrect with
            multi-segment packets
      26) e1000: Split out TX interrupt rather than share an interrupt for
          RX and TX.
          - Allows better performance by keeping RX and TX paths separate
      27) e1000: Separate igb from em code where suitable
          Much easier to understand separate functions and "if (is_igb)" than
          previous tests like "if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))"
      Reviewed by:	sbruno
      Approved by:	sbruno (mentor)
      Sponsored by:	Limelight Networks
      Differential Revision:	https://reviews.freebsd.org/D12235
    • Navdeep Parhar's avatar
      cxgbetool(8): mode must be specified when creating the dump file. · 7f7a2bce
      Navdeep Parhar authored
      MFC after:	1 week
      Sponsored by:	Chelsio Communications
    • Matt Joras's avatar
      Allow vlan interfaces to rx through netmap(4). · fdbf1174
      Matt Joras authored
      Normally after receiving a packet, a vlan(4) interface sends the packet
      back through its parent interface's rx routine so that it can be
      processed as an untagged frame. It does this by using the parent's
      ifp->if_input. This is incompatible with netmap(4), which replaces the
      vlan(4) interface's if_input with a netmap(4) hook. Fix this by using
      the vlan(4) interface's ifp instead of the parent's directly.
      Reported by:	Harry Schmalzbauer <freebsd@omnilan.de>
      Reviewed by:	rstone
      Approved by:	rstone (mentor)
      MFC after:	3 days
      Sponsored by:	Dell EMC Isilon
      Differential Revision:	https://reviews.freebsd.org/D12191
  2. 12 Sep, 2017 28 commits
  3. 11 Sep, 2017 9 commits
    • Ian Lepore's avatar
      Add a default implementation that returns ENODEV for start, repeat_start, · 813c1b27
      Ian Lepore authored
      stop, read, and write methods.  Some controllers don't implement these
      individual operations and have only a transfer method.  In that case, we
      should return an indication that the device is present but doesn't support
      the method, as opposed to the kobj default error ENXIO which makes it
      look like the whole device is missing.  Userland tools such as i2c(8) can
      use the differing return values to switch between the two different i2c
      IO mechanisms.
    • John Baldwin's avatar
      Add CFI directives for _rtld_bind_start. · 21a8b386
      John Baldwin authored
      This allows debuggers to unwind back into the caller when stopped in the
      runtime linker.
      Sponsored by:	DARPA / AFRL
    • Ian Lepore's avatar
      Make i2c -s (device scan) work on hardware that supports only full xfers. · c3c16dce
      Ian Lepore authored
      The existing scan code is based on sending an i2c START condition and if
      there is no error it assumes there is a device at that i2c address.  Some
      i2c controllers don't support sending individual start/stop signals on the
      bus, they can only perform complete data transfers with start/stop handled
      in the silicon.
      This adds a fallback mechanism that attempts to read a single byte from each
      i2c address.  It's less reliable than looking for an an ACK repsonse to a
      start, because some devices will NAK an attempt to read that isn't preceeded
      by a write of a register address.  Writing to devices to probe them is too
      dangerous to even consider.  The user is told that a less-reliable scan is
      being done, so even if the read-scan comes up empty too, it's still a vast
      improvement over the old situation where it would just claim there were no
      devices on the bus even though the devices were there and working fine.
      If the i2c controller responds with a proper ENODEV (device doesn't support
      operation) or an almost-proper EOPNOTSUPP, the START/STOP scan is switched
      to a read-scan right away.  Most controllers respond with ENXIO or EIO if
      they don't support START/STOP, so no quick-out is available.  For those,
      if a scan of all 127 addresses and come up empty, the scan is re-done using
      the read method.
      Reported by:	Maxim Filimonov <che@bein.link>
    • Conrad Meyer's avatar
      MCA: Rename AMD MISC bits/masks · d63edb4d
      Conrad Meyer authored
      They apply to all AMD MCAi_MISC0 registers, not just MCA4 (NB).
      No functional change.
      Sponsored by:	Dell EMC Isilon
    • Conrad Meyer's avatar
      x86 MCA: Extract CMCI support predicate into function · f739be66
      Conrad Meyer authored
      On AMD, the MCG_CAP feature bit is reserved -- not explicitly zero.  Do not
      use it to determine CMCI support.
      Reviewed by:	avg, markj
      Sponsored by:	Dell EMC Isilon
      Differential Revision:	https://reviews.freebsd.org/D12320
    • Marcin Wojtas's avatar
      Restore alphabetical order in UART Makefile · 5a2f997c
      Marcin Wojtas authored
      Commit r323359 introduced new Marvell UART controller driver
      and by mistake it broke correct order in the Makefile. Fix this.
      Reported by: emaste
    • Ilya Bakulin's avatar
      Add MMCCAM-enabled kernel config for arm64 · 61df30cf
      Ilya Bakulin authored
      Approved by:	imp (mentor)
      Differential Revision:	https://reviews.freebsd.org/D12114
    • Marcin Wojtas's avatar
      Expand Marvell NIC description in arm64 GENERIC config · 885a7418
      Marcin Wojtas authored
      Suggested by: emaste
    • Konstantin Belousov's avatar
      Fix ioapic acpi id matching on PCI attach and rid calculation. · 809f2d8b
      Konstantin Belousov authored
      Sponsored by:	The FreeBSD Foundation
      MFC after:	11 days