1. 12 4月, 2017 6 次提交
  2. 07 4月, 2017 7 次提交
  3. 25 3月, 2017 2 次提交
    • J
      s390/qeth: no ETH header for outbound AF_IUCV · acd9776b
      Julian Wiedmann 提交于
      With AF_IUCV traffic, the skb passed to hard_start_xmit() has a 14 byte
      slot at skb->data, intended for an ETH header. qeth_l3_fill_af_iucv_hdr()
      fills this ETH header... and then immediately moves it to the
      skb's headroom, where it disappears and is never seen again.
      
      But it's still possible for us to return NETDEV_TX_BUSY after the skb has
      been modified. Since we didn't get a private copy of the skb, the next
      time the skb is delivered to hard_start_xmit() it no longer has the
      expected layout (we moved the ETH header to the headroom, so skb->data
      now starts at the IUCV_TRANS header). So when qeth_l3_fill_af_iucv_hdr()
      does another round of rebuilding, the resulting qeth header ends up
      all wrong. On transmission, the buffer is then rejected by
      the HiperSockets device with SBALF15 = x'04'.
      When this error is passed back to af_iucv as TX_NOTIFY_UNREACHABLE, it
      tears down the offending socket.
      
      As the ETH header for AF_IUCV serves no purpose, just align the code to
      what we do for IP traffic on L3 HiperSockets: keep the ETH header at
      skb->data, and pass down data_offset = ETH_HLEN to qeth_fill_buffer().
      When mapping the payload into the SBAL elements, the ETH header is then
      stripped off. This avoids the skb manipulations in
      qeth_l3_fill_af_iucv_hdr(), and any buffer re-entering hard_start_xmit()
      after NETDEV_TX_BUSY is now processed properly.
      Signed-off-by: NJulian Wiedmann <jwi@linux.vnet.ibm.com>
      Signed-off-by: NUrsula Braun <ubraun@linux.vnet.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      acd9776b
    • J
      s390/qeth: size calculation outbound buffers · 7d969d2e
      Julian Wiedmann 提交于
      Depending on the device type, hard_start_xmit() builds different output
      buffer formats. For instance with HiperSockets, on both L2 and L3 we
      strip the ETH header from the skb - L3 doesn't need it, and L2 carries
      it in the buffer's header element.
      For this, we pass data_offset = ETH_HLEN all the way down to
      __qeth_fill_buffer(), where skb->data is then adjusted accordingly.
      But the initial size calculation still considers the *full* skb length
      (including the ETH header). So qeth_get_elements_no() can erroneously
      reject a skb as too big, even though it would actually fit into an
      output buffer once the ETH header has been trimmed off later.
      
      Fix this by passing an additional offset to qeth_get_elements_no(),
      that indicates where in the skb the on-wire data actually begins.
      Since the current code uses data_offset=-1 for some special handling
      on OSA, we need to clamp data_offset to 0...
      
      On HiperSockets this helps when sending ~MTU-size skbs with weird page
      alignment. No change for OSA or AF_IUCV.
      Signed-off-by: NJulian Wiedmann <jwi@linux.vnet.ibm.com>
      Signed-off-by: NUrsula Braun <ubraun@linux.vnet.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7d969d2e
  4. 12 1月, 2017 12 次提交
  5. 25 12月, 2016 1 次提交
  6. 21 10月, 2016 1 次提交
  7. 13 10月, 2016 3 次提交
  8. 16 9月, 2016 7 次提交
    • T
      s390/qeth: fix setting VIPA address · 732a59cb
      Thomas Richter 提交于
      commit 5f78e29c ("qeth: optimize IP handling in rx_mode callback")
      restructured the internal address handling.
      This work broke setting a virtual IP address.
      The command
      echo 10.1.1.1 > /sys/bus/ccwgroup/devices/<device>/vipa/add4
      fails with file exist error even if the IP address has not
      been set before.
      
      It turned out that the search result for the IP address
      search is handled incorrectly in the VIPA case.
      
      This patch fixes the setting of an virtual IP address.
      Signed-off-by: NThomas Richter <tmricht@linux.vnet.ibm.com>
      Signed-off-by: NUrsula Braun <ubraun@linux.vnet.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      732a59cb
    • U
      qeth: do not turn on SG per default · 5722963a
      Ursula Braun 提交于
      According to recent performance measurements, turning on net_device
      feature NETIF_F_SG only behaves well, but turning on feature
      NETIF_F_GSO shows bad results. Since the kernel activates NETIF_F_GSO
      automatically as soon as the driver configures feature NETIF_F_SG, qeth
      should not activate feature NETIF_F_SG per default, until the qeth
      problems with NETIF_F_GSO are solved.
      Signed-off-by: NUrsula Braun <ubraun@linux.vnet.ibm.com>
      Reviewed-by: NThomas Richter <tmricht@linux.vnet.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5722963a
    • U
      qeth: do not limit number of gso segments · 243f750f
      Ursula Braun 提交于
      To reduce the need of skb_linearize() calls, gso_max_segs of qeth
      net_devices had been limited according to the maximum number of qdio SBAL
      elements. But a gso segment cannot be larger than the mtu-size, while an
      SBAL element can contain up to 4096 bytes. The gso_max_segs limitation
      limits the maximum packet size given to the qeth driver. Performance
      measurements with tso-enabled qeth network interfaces and mtu-size 1500
      showed, that the disadvantage of smaller packets is much more severe than
      the advantage of fewer skb_linearize() calls.
      This patch gets rid of the gso_max_segs limitations in the qeth driver.
      Signed-off-by: NUrsula Braun <ubraun@linux.vnet.ibm.com>
      Reviewed-by: NThomas Richter <tmricht@linux.vnet.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      243f750f
    • U
      qeth: check not more than 16 SBALEs on the completion queue · 903e4853
      Ursula Braun 提交于
      af_iucv socket programs with HiperSockets as transport make use of the qdio
      completion queue. Running such an af_iucv socket program may result in a
      crash:
      
      [90341.677709] Oops: 0038 ilc:2 [#1] SMP
      [90341.677743] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.6.0-20160720.0.0e86ec7.5e62689.fc23.s390xperformance #1
      [90341.677744] Hardware name: IBM              2964 N96              703              (LPAR)
      [90341.677746] task: 00000000edb79f00 ti: 00000000edb84000 task.ti: 00000000edb84000
      [90341.677748] Krnl PSW : 0704d00180000000 000000000075bc50 (qeth_qdio_input_handler+0x258/0x4e0)
      [90341.677756]            R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:1 PM:0 RI:0 EA:3
      Krnl GPRS: 000003d10391e900 0000000000000001 00000000e61e6000 0000000000000005
      [90341.677759]            0000000000a9e6ec 5420040001a77400 0000000000000001 000000000000006f
      [90341.677761]            00000000e0d83f00 0000000000000003 0000000000000010 5420040001a77400
      [90341.677784]            000000007ba8b000 0000000000943fd0 000000000075bc4e 00000000ed3b3c10
      [90341.677793] Krnl Code: 000000000075bc42: e320cc180004        lg      %r2,3096(%r12)
                 000000000075bc48: c0e5ffffc5cc       brasl   %r14,7547e0
                #000000000075bc4e: 1816               lr      %r1,%r6
                >000000000075bc50: ba19b008           cs      %r1,%r9,8(%r11)
                 000000000075bc54: ec180041017e       cij     %r1,1,8,75bcd6
                 000000000075bc5a: 5810b008           l       %r1,8(%r11)
                 000000000075bc5e: ec16005c027e       cij     %r1,2,6,75bd16
                 000000000075bc64: 5090b008           st      %r9,8(%r11)
      [90341.677807] Call Trace:
      [90341.677810] ([<000000000075bbc0>] qeth_qdio_input_handler+0x1c8/0x4e0)
      [90341.677812] ([<000000000070efbc>] qdio_kick_handler+0x124/0x2a8)
      [90341.677814] ([<0000000000713570>] __tiqdio_inbound_processing+0xf0/0xcd0)
      [90341.677818] ([<0000000000143312>] tasklet_action+0x92/0x120)
      [90341.677823] ([<00000000008b6e72>] __do_softirq+0x112/0x308)
      [90341.677824] ([<0000000000142bce>] irq_exit+0xd6/0xf8)
      [90341.677829] ([<000000000010b1d2>] do_IRQ+0x6a/0x88)
      [90341.677830] ([<00000000008b6322>] io_int_handler+0x112/0x220)
      [90341.677832] ([<0000000000102b2e>] enabled_wait+0x56/0xa8)
      [90341.677833] ([<0000000000000000>]           (null))
      [90341.677835] ([<0000000000102e32>] arch_cpu_idle+0x32/0x48)
      [90341.677838] ([<000000000018a126>] cpu_startup_entry+0x266/0x2b0)
      [90341.677841] ([<0000000000113b38>] smp_start_secondary+0x100/0x110)
      [90341.677843] ([<00000000008b68a6>] restart_int_handler+0x62/0x78)
      [90341.677845] ([<00000000008b6588>] psw_idle+0x3c/0x40)
      [90341.677846] Last Breaking-Event-Address:
      [90341.677848]  [<00000000007547ec>] qeth_dbf_longtext+0xc/0xc0
      [90341.677849]
      [90341.677850] Kernel panic - not syncing: Fatal exception in interrupt
      
      qeth_qdio_cq_handler() analyzes SBALs on this completion queue, but does
      not observe the limit of 16 SBAL elements per SBAL. This patch adds the
      additional check to process not more than 16 SBAL elements.
      Signed-off-by: NUrsula Braun <ubraun@linux.vnet.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      903e4853
    • U
      s390/qeth: allow hsuid configuration in DOWN state · a7531c1c
      Ursula Braun 提交于
      The qeth IP address mapping logic has been reworked recently. It
      causes now problems to specify qeth sysfs attribute "hsuid" in DOWN
      state, which is allowed. Postpone registering or deregistering of
      IP-addresses in this case.
      Signed-off-by: NUrsula Braun <ubraun@linux.vnet.ibm.com>
      Reviewed-by: NThomas Richter <tmricht@linux.vnet.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a7531c1c
    • U
      s390/qeth: use ip_lock for hsuid configuration · 016930b8
      Ursula Braun 提交于
      qeth_l3_dev_hsuid_store() changes the ip hash table, which
      requires the ip_lock.
      Signed-off-by: NUrsula Braun <ubraun@linux.vnet.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      016930b8
    • H
      qeth: restore device features after recovery · e830baa9
      Hans Wippel 提交于
      After device recovery, only a basic set of network device features is
      enabled on the device. If features like checksum offloading or TSO were
      enabled by the user before the recovery, this results in a mismatch
      between the network device features, that the kernel assumes to be
      enabled on the device, and the features actually enabled on the device.
      
      This patch tries to restore previously set features, that require
      changes on the device, after the recovery of a device. In case of an
      error, the network device's features are changed to contain only the
      features that are actually turned on.
      Signed-off-by: NHans Wippel <hwippel@linux.vnet.ibm.com>
      Signed-off-by: NUrsula Braun <ubraun@linux.vnet.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e830baa9
  9. 05 7月, 2016 1 次提交