<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/drivers/net, branch v4.4.14</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>vxlan, gre, geneve: Set a large MTU on ovs-created tunnel devices</title>
<updated>2016-06-24T17:18:18+00:00</updated>
<author>
<name>David Wragg</name>
<email>david@weave.works</email>
</author>
<published>2016-06-03T22:58:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=ce9c0dba5bf3ad4a25a9dc202e36e74d904df61d'/>
<id>ce9c0dba5bf3ad4a25a9dc202e36e74d904df61d</id>
<content type='text'>
[ Upstream commit 7e059158d57b79159eaf1f504825d19866ef2c42 ]

Prior to 4.3, openvswitch tunnel vports (vxlan, gre and geneve) could
transmit vxlan packets of any size, constrained only by the ability to
send out the resulting packets.  4.3 introduced netdevs corresponding
to tunnel vports.  These netdevs have an MTU, which limits the size of
a packet that can be successfully encapsulated.  The default MTU
values are low (1500 or less), which is awkwardly small in the context
of physical networks supporting jumbo frames, and leads to a
conspicuous change in behaviour for userspace.

Instead, set the MTU on openvswitch-created netdevs to be the relevant
maximum (i.e. the maximum IP packet size minus any relevant overhead),
effectively restoring the behaviour prior to 4.3.

Signed-off-by: David Wragg &lt;david@weave.works&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit 7e059158d57b79159eaf1f504825d19866ef2c42 ]

Prior to 4.3, openvswitch tunnel vports (vxlan, gre and geneve) could
transmit vxlan packets of any size, constrained only by the ability to
send out the resulting packets.  4.3 introduced netdevs corresponding
to tunnel vports.  These netdevs have an MTU, which limits the size of
a packet that can be successfully encapsulated.  The default MTU
values are low (1500 or less), which is awkwardly small in the context
of physical networks supporting jumbo frames, and leads to a
conspicuous change in behaviour for userspace.

Instead, set the MTU on openvswitch-created netdevs to be the relevant
maximum (i.e. the maximum IP packet size minus any relevant overhead),
effectively restoring the behaviour prior to 4.3.

Signed-off-by: David Wragg &lt;david@weave.works&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>geneve: Relax MTU constraints</title>
<updated>2016-06-24T17:18:18+00:00</updated>
<author>
<name>David Wragg</name>
<email>david@weave.works</email>
</author>
<published>2016-06-03T22:58:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=51d7c394605bd5d72e76745def0002dd938ec48b'/>
<id>51d7c394605bd5d72e76745def0002dd938ec48b</id>
<content type='text'>
[ Upstream commit 55e5bfb53cff286c1c1ff49f51325dc15c7fea63 ]

Allow the MTU of geneve devices to be set to large values, in order to
exploit underlying networks with larger frame sizes.

GENEVE does not have a fixed encapsulation overhead (an openvswitch
rule can add variable length options), so there is no relevant maximum
MTU to enforce.  A maximum of IP_MAX_MTU is used instead.
Encapsulated packets that are too big for the underlying network will
get dropped on the floor.

Signed-off-by: David Wragg &lt;david@weave.works&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit 55e5bfb53cff286c1c1ff49f51325dc15c7fea63 ]

Allow the MTU of geneve devices to be set to large values, in order to
exploit underlying networks with larger frame sizes.

GENEVE does not have a fixed encapsulation overhead (an openvswitch
rule can add variable length options), so there is no relevant maximum
MTU to enforce.  A maximum of IP_MAX_MTU is used instead.
Encapsulated packets that are too big for the underlying network will
get dropped on the floor.

Signed-off-by: David Wragg &lt;david@weave.works&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>vxlan: Relax MTU constraints</title>
<updated>2016-06-24T17:18:17+00:00</updated>
<author>
<name>David Wragg</name>
<email>david@weave.works</email>
</author>
<published>2016-06-03T22:58:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=3dc443059897b8a2fa3e3b18f794ee31c0063730'/>
<id>3dc443059897b8a2fa3e3b18f794ee31c0063730</id>
<content type='text'>
[ Upstream commit 72564b59ffc438ea103b0727a921aaddce766728 ]

Allow the MTU of vxlan devices without an underlying device to be set
to larger values (up to a maximum based on IP packet limits and vxlan
overhead).

Previously, their MTUs could not be set to higher than the
conventional ethernet value of 1500.  This is a very arbitrary value
in the context of vxlan, and prevented vxlan devices from being able
to take advantage of jumbo frames etc.

The default MTU remains 1500, for compatibility.

Signed-off-by: David Wragg &lt;david@weave.works&gt;
Acked-by: Roopa Prabhu &lt;roopa@cumulusnetworks.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit 72564b59ffc438ea103b0727a921aaddce766728 ]

Allow the MTU of vxlan devices without an underlying device to be set
to larger values (up to a maximum based on IP packet limits and vxlan
overhead).

Previously, their MTUs could not be set to higher than the
conventional ethernet value of 1500.  This is a very arbitrary value
in the context of vxlan, and prevented vxlan devices from being able
to take advantage of jumbo frames etc.

The default MTU remains 1500, for compatibility.

Signed-off-by: David Wragg &lt;david@weave.works&gt;
Acked-by: Roopa Prabhu &lt;roopa@cumulusnetworks.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>vxlan: Accept user specified MTU value when create new vxlan link</title>
<updated>2016-06-24T17:18:17+00:00</updated>
<author>
<name>Chen Haiquan</name>
<email>oc@yunify.com</email>
</author>
<published>2016-05-27T02:49:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=721976e93e5d8963d0c937ee236489968bfcfb81'/>
<id>721976e93e5d8963d0c937ee236489968bfcfb81</id>
<content type='text'>
[ Upstream commit ce577668a426c6a9e2470a09dcd07fbd6e45272a ]

When create a new vxlan link, example:
  ip link add vtap mtu 1440 type vxlan vni 1 dev eth0

The argument "mtu" has no effect, because it is not set to conf-&gt;mtu. The
default value is used in vxlan_dev_configure function.

This problem was introduced by commit 0dfbdf4102b9 (vxlan: Factor out device
configuration).

Fixes: 0dfbdf4102b9 (vxlan: Factor out device configuration)
Signed-off-by:  Chen Haiquan &lt;oc@yunify.com&gt;
Acked-by: Cong Wang &lt;xiyou.wangcong@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit ce577668a426c6a9e2470a09dcd07fbd6e45272a ]

When create a new vxlan link, example:
  ip link add vtap mtu 1440 type vxlan vni 1 dev eth0

The argument "mtu" has no effect, because it is not set to conf-&gt;mtu. The
default value is used in vxlan_dev_configure function.

This problem was introduced by commit 0dfbdf4102b9 (vxlan: Factor out device
configuration).

Fixes: 0dfbdf4102b9 (vxlan: Factor out device configuration)
Signed-off-by:  Chen Haiquan &lt;oc@yunify.com&gt;
Acked-by: Cong Wang &lt;xiyou.wangcong@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>team: don't call netdev_change_features under team-&gt;lock</title>
<updated>2016-06-24T17:18:17+00:00</updated>
<author>
<name>Ivan Vecera</name>
<email>ivecera@redhat.com</email>
</author>
<published>2016-05-25T19:21:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=13a055d6ca34dcce324ccfab63cc05db726030bc'/>
<id>13a055d6ca34dcce324ccfab63cc05db726030bc</id>
<content type='text'>
[ Upstream commit f6988cb63a4e698d8a62a1d085d263d1fcc351ea ]

The team_device_event() notifier calls team_compute_features() to fix
vlan_features under team-&gt;lock to protect team-&gt;port_list. The problem is
that subsequent __team_compute_features() calls netdev_change_features()
to propagate vlan_features to upper vlan devices while team-&gt;lock is still
taken. This can lead to deadlock when NETIF_F_LRO is modified on lower
devices or team device itself.

Example:
The team0 as active backup with eth0 and eth1 NICs. Both eth0 &amp; eth1 are
LRO capable and LRO is enabled. Thus LRO is also enabled on team0.

The command 'ethtool -K team0 lro off' now hangs due to this deadlock:

dev_ethtool()
-&gt; ethtool_set_features()
 -&gt; __netdev_update_features(team)
  -&gt; netdev_sync_lower_features()
   -&gt; netdev_update_features(lower_1)
    -&gt; __netdev_update_features(lower_1)
    -&gt; netdev_features_change(lower_1)
     -&gt; call_netdevice_notifiers(...)
      -&gt; team_device_event(lower_1)
       -&gt; team_compute_features(team) [TAKES team-&gt;lock]
        -&gt; netdev_change_features(team)
         -&gt; __netdev_update_features(team)
          -&gt; netdev_sync_lower_features()
           -&gt; netdev_update_features(lower_2)
            -&gt; __netdev_update_features(lower_2)
            -&gt; netdev_features_change(lower_2)
             -&gt; call_netdevice_notifiers(...)
              -&gt; team_device_event(lower_2)
               -&gt; team_compute_features(team) [DEADLOCK]

The bug is present in team from the beginning but it appeared after the commit
fd867d5 (net/core: generic support for disabling netdev features down stack)
that adds synchronization of features with lower devices.

Fixes: fd867d5 (net/core: generic support for disabling netdev features down stack)
Cc: Jiri Pirko &lt;jiri@resnulli.us&gt;
Signed-off-by: Ivan Vecera &lt;ivecera@redhat.com&gt;
Signed-off-by: Jiri Pirko &lt;jiri@mellanox.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit f6988cb63a4e698d8a62a1d085d263d1fcc351ea ]

The team_device_event() notifier calls team_compute_features() to fix
vlan_features under team-&gt;lock to protect team-&gt;port_list. The problem is
that subsequent __team_compute_features() calls netdev_change_features()
to propagate vlan_features to upper vlan devices while team-&gt;lock is still
taken. This can lead to deadlock when NETIF_F_LRO is modified on lower
devices or team device itself.

Example:
The team0 as active backup with eth0 and eth1 NICs. Both eth0 &amp; eth1 are
LRO capable and LRO is enabled. Thus LRO is also enabled on team0.

The command 'ethtool -K team0 lro off' now hangs due to this deadlock:

dev_ethtool()
-&gt; ethtool_set_features()
 -&gt; __netdev_update_features(team)
  -&gt; netdev_sync_lower_features()
   -&gt; netdev_update_features(lower_1)
    -&gt; __netdev_update_features(lower_1)
    -&gt; netdev_features_change(lower_1)
     -&gt; call_netdevice_notifiers(...)
      -&gt; team_device_event(lower_1)
       -&gt; team_compute_features(team) [TAKES team-&gt;lock]
        -&gt; netdev_change_features(team)
         -&gt; __netdev_update_features(team)
          -&gt; netdev_sync_lower_features()
           -&gt; netdev_update_features(lower_2)
            -&gt; __netdev_update_features(lower_2)
            -&gt; netdev_features_change(lower_2)
             -&gt; call_netdevice_notifiers(...)
              -&gt; team_device_event(lower_2)
               -&gt; team_compute_features(team) [DEADLOCK]

The bug is present in team from the beginning but it appeared after the commit
fd867d5 (net/core: generic support for disabling netdev features down stack)
that adds synchronization of features with lower devices.

Fixes: fd867d5 (net/core: generic support for disabling netdev features down stack)
Cc: Jiri Pirko &lt;jiri@resnulli.us&gt;
Signed-off-by: Ivan Vecera &lt;ivecera@redhat.com&gt;
Signed-off-by: Jiri Pirko &lt;jiri@mellanox.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>sfc: on MC reset, clear PIO buffer linkage in TXQs</title>
<updated>2016-06-24T17:18:17+00:00</updated>
<author>
<name>Edward Cree</name>
<email>ecree@solarflare.com</email>
</author>
<published>2016-05-24T17:53:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=450db517b9223908ab5c1a9b5ddce3b6c4d75b18'/>
<id>450db517b9223908ab5c1a9b5ddce3b6c4d75b18</id>
<content type='text'>
[ Upstream commit c0795bf64cba4d1b796fdc5b74b33772841ed1bb ]

Otherwise, if we fail to allocate new PIO buffers, our TXQs will try to
use the old ones, which aren't there any more.

Fixes: 183233bec810 "sfc: Allocate and link PIO buffers; map them with write-combining"
Signed-off-by: Edward Cree &lt;ecree@solarflare.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit c0795bf64cba4d1b796fdc5b74b33772841ed1bb ]

Otherwise, if we fail to allocate new PIO buffers, our TXQs will try to
use the old ones, which aren't there any more.

Fixes: 183233bec810 "sfc: Allocate and link PIO buffers; map them with write-combining"
Signed-off-by: Edward Cree &lt;ecree@solarflare.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>udp: prevent skbs lingering in tunnel socket queues</title>
<updated>2016-06-24T17:18:16+00:00</updated>
<author>
<name>Hannes Frederic Sowa</name>
<email>hannes@stressinduktion.org</email>
</author>
<published>2016-05-19T13:58:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=ab1f253ddccc235520fa4f70d32a8dd6bf8ef346'/>
<id>ab1f253ddccc235520fa4f70d32a8dd6bf8ef346</id>
<content type='text'>
[ Upstream commit e5aed006be918af163eb397e45aa5ea6cefd5e01 ]

In case we find a socket with encapsulation enabled we should call
the encap_recv function even if just a udp header without payload is
available. The callbacks are responsible for correctly verifying and
dropping the packets.

Also, in case the header validation fails for geneve and vxlan we
shouldn't put the skb back into the socket queue, no one will pick
them up there.  Instead we can simply discard them in the respective
encap_recv functions.

Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit e5aed006be918af163eb397e45aa5ea6cefd5e01 ]

In case we find a socket with encapsulation enabled we should call
the encap_recv function even if just a udp header without payload is
available. The callbacks are responsible for correctly verifying and
dropping the packets.

Also, in case the header validation fails for geneve and vxlan we
shouldn't put the skb back into the socket queue, no one will pick
them up there.  Instead we can simply discard them in the respective
encap_recv functions.

Signed-off-by: Hannes Frederic Sowa &lt;hannes@stressinduktion.org&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tuntap: correctly wake up process during uninit</title>
<updated>2016-06-24T17:18:16+00:00</updated>
<author>
<name>Jason Wang</name>
<email>jasowang@redhat.com</email>
</author>
<published>2016-05-19T05:36:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=bccd56fad0433ef1ed0661bb3a4055503cdec4e9'/>
<id>bccd56fad0433ef1ed0661bb3a4055503cdec4e9</id>
<content type='text'>
[ Upstream commit addf8fc4acb1cf79492ac64966f07178793cb3d7 ]

We used to check dev-&gt;reg_state against NETREG_REGISTERED after each
time we are woke up. But after commit 9e641bdcfa4e ("net-tun:
restructure tun_do_read for better sleep/wakeup efficiency"), it uses
skb_recv_datagram() which does not check dev-&gt;reg_state. This will
result if we delete a tun/tap device after a process is blocked in the
reading. The device will wait for the reference count which was held
by that process for ever.

Fixes this by using RCV_SHUTDOWN which will be checked during
sk_recv_datagram() before trying to wake up the process during uninit.

Fixes: 9e641bdcfa4e ("net-tun: restructure tun_do_read for better
sleep/wakeup efficiency")
Cc: Eric Dumazet &lt;edumazet@google.com&gt;
Cc: Xi Wang &lt;xii@google.com&gt;
Cc: Michael S. Tsirkin &lt;mst@redhat.com&gt;
Signed-off-by: Jason Wang &lt;jasowang@redhat.com&gt;
Acked-by: Eric Dumazet &lt;edumazet@google.com&gt;
Acked-by: Michael S. Tsirkin &lt;mst@redhat.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit addf8fc4acb1cf79492ac64966f07178793cb3d7 ]

We used to check dev-&gt;reg_state against NETREG_REGISTERED after each
time we are woke up. But after commit 9e641bdcfa4e ("net-tun:
restructure tun_do_read for better sleep/wakeup efficiency"), it uses
skb_recv_datagram() which does not check dev-&gt;reg_state. This will
result if we delete a tun/tap device after a process is blocked in the
reading. The device will wait for the reference count which was held
by that process for ever.

Fixes this by using RCV_SHUTDOWN which will be checked during
sk_recv_datagram() before trying to wake up the process during uninit.

Fixes: 9e641bdcfa4e ("net-tun: restructure tun_do_read for better
sleep/wakeup efficiency")
Cc: Eric Dumazet &lt;edumazet@google.com&gt;
Cc: Xi Wang &lt;xii@google.com&gt;
Cc: Michael S. Tsirkin &lt;mst@redhat.com&gt;
Signed-off-by: Jason Wang &lt;jasowang@redhat.com&gt;
Acked-by: Eric Dumazet &lt;edumazet@google.com&gt;
Acked-by: Michael S. Tsirkin &lt;mst@redhat.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>switchdev: pass pointer to fib_info instead of copy</title>
<updated>2016-06-24T17:18:16+00:00</updated>
<author>
<name>Jiri Pirko</name>
<email>jiri@mellanox.com</email>
</author>
<published>2016-05-17T16:58:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=835d0122a57ffaea43162d0e7a4f5bf25d2af78b'/>
<id>835d0122a57ffaea43162d0e7a4f5bf25d2af78b</id>
<content type='text'>
[ Upstream commit da4ed55165d41b1073f9a476f1c18493e9bf8c8e ]

The problem is that fib_info-&gt;nh is [0] so the struct fib_info
allocation size depends on number of nexthops. If we just copy fib_info,
we do not copy the nexthops info and driver accesses memory which is not
ours.

Given the fact that fib4 does not defer operations and therefore it does
not need copy, just pass the pointer down to drivers as it was done
before.

Fixes: 850d0cbc91 ("switchdev: remove pointers from switchdev objects")
Signed-off-by: Jiri Pirko &lt;jiri@mellanox.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
[ Upstream commit da4ed55165d41b1073f9a476f1c18493e9bf8c8e ]

The problem is that fib_info-&gt;nh is [0] so the struct fib_info
allocation size depends on number of nexthops. If we just copy fib_info,
we do not copy the nexthops info and driver accesses memory which is not
ours.

Given the fact that fib4 does not defer operations and therefore it does
not need copy, just pass the pointer down to drivers as it was done
before.

Fixes: 850d0cbc91 ("switchdev: remove pointers from switchdev objects")
Signed-off-by: Jiri Pirko &lt;jiri@mellanox.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rtlwifi: pci: use dev_kfree_skb_irq instead of kfree_skb in rtl_pci_reset_trx_ring</title>
<updated>2016-06-08T01:14:33+00:00</updated>
<author>
<name>wang yanqing</name>
<email>udknight@gmail.com</email>
</author>
<published>2016-05-06T16:33:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=04a6bcca2f76f7aa5b8749644e3a2947a3cf040d'/>
<id>04a6bcca2f76f7aa5b8749644e3a2947a3cf040d</id>
<content type='text'>
commit cf968937d27751296920e6b82ffa89735e3a0023 upstream.

We can't use kfree_skb in irq disable context, because spin_lock_irqsave
make sure we are always in irq disable context, use dev_kfree_skb_irq
instead of kfree_skb is better than dev_kfree_skb_any.

This patch fix below kernel warning:
[ 7612.095528] ------------[ cut here ]------------
[ 7612.095546] WARNING: CPU: 3 PID: 4460 at kernel/softirq.c:150 __local_bh_enable_ip+0x58/0x80()
[ 7612.095550] Modules linked in: rtl8723be x86_pkg_temp_thermal btcoexist rtl_pci rtlwifi rtl8723_common
[ 7612.095567] CPU: 3 PID: 4460 Comm: ifconfig Tainted: G        W       4.4.0+ #4
[ 7612.095570] Hardware name: LENOVO 20DFA04FCD/20DFA04FCD, BIOS J5ET48WW (1.19 ) 08/27/2015
[ 7612.095574]  00000000 00000000 da37fc70 c12ce7c5 00000000 da37fca0 c104cc59 c19d4454
[ 7612.095584]  00000003 0000116c c19d4784 00000096 c10508a8 c10508a8 00000200 c1b42400
[ 7612.095594]  f29be780 da37fcb0 c104ccad 00000009 00000000 da37fcbc c10508a8 f21f08b8
[ 7612.095604] Call Trace:
[ 7612.095614]  [&lt;c12ce7c5&gt;] dump_stack+0x41/0x5c
[ 7612.095620]  [&lt;c104cc59&gt;] warn_slowpath_common+0x89/0xc0
[ 7612.095628]  [&lt;c10508a8&gt;] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095634]  [&lt;c10508a8&gt;] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095640]  [&lt;c104ccad&gt;] warn_slowpath_null+0x1d/0x20
[ 7612.095646]  [&lt;c10508a8&gt;] __local_bh_enable_ip+0x58/0x80
[ 7612.095653]  [&lt;c16b7d34&gt;] destroy_conntrack+0x64/0xa0
[ 7612.095660]  [&lt;c16b300f&gt;] nf_conntrack_destroy+0xf/0x20
[ 7612.095665]  [&lt;c1677565&gt;] skb_release_head_state+0x55/0xa0
[ 7612.095670]  [&lt;c16775bb&gt;] skb_release_all+0xb/0x20
[ 7612.095674]  [&lt;c167760b&gt;] __kfree_skb+0xb/0x60
[ 7612.095679]  [&lt;c16776f0&gt;] kfree_skb+0x30/0x70
[ 7612.095686]  [&lt;f81b869d&gt;] ? rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095692]  [&lt;f81b869d&gt;] rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095698]  [&lt;f81b87f9&gt;] rtl_pci_start+0x19/0x190 [rtl_pci]
[ 7612.095705]  [&lt;f81970e6&gt;] rtl_op_start+0x56/0x90 [rtlwifi]
[ 7612.095712]  [&lt;c17e3f16&gt;] drv_start+0x36/0xc0
[ 7612.095717]  [&lt;c17f5ab3&gt;] ieee80211_do_open+0x2d3/0x890
[ 7612.095725]  [&lt;c16820fe&gt;] ? call_netdevice_notifiers_info+0x2e/0x60
[ 7612.095730]  [&lt;c17f60bd&gt;] ieee80211_open+0x4d/0x50
[ 7612.095736]  [&lt;c16891b3&gt;] __dev_open+0xa3/0x130
[ 7612.095742]  [&lt;c183fa53&gt;] ? _raw_spin_unlock_bh+0x13/0x20
[ 7612.095748]  [&lt;c1689499&gt;] __dev_change_flags+0x89/0x140
[ 7612.095753]  [&lt;c127c70d&gt;] ? selinux_capable+0xd/0x10
[ 7612.095759]  [&lt;c1689589&gt;] dev_change_flags+0x29/0x60
[ 7612.095765]  [&lt;c1700b93&gt;] devinet_ioctl+0x553/0x670
[ 7612.095772]  [&lt;c12db758&gt;] ? _copy_to_user+0x28/0x40
[ 7612.095777]  [&lt;c17018b5&gt;] inet_ioctl+0x85/0xb0
[ 7612.095783]  [&lt;c166e647&gt;] sock_ioctl+0x67/0x260
[ 7612.095788]  [&lt;c166e5e0&gt;] ? sock_fasync+0x80/0x80
[ 7612.095795]  [&lt;c115c99b&gt;] do_vfs_ioctl+0x6b/0x550
[ 7612.095800]  [&lt;c127c812&gt;] ? selinux_file_ioctl+0x102/0x1e0
[ 7612.095807]  [&lt;c10a8914&gt;] ? timekeeping_suspend+0x294/0x320
[ 7612.095813]  [&lt;c10a256a&gt;] ? __hrtimer_run_queues+0x14a/0x210
[ 7612.095820]  [&lt;c1276e24&gt;] ? security_file_ioctl+0x34/0x50
[ 7612.095827]  [&lt;c115cef0&gt;] SyS_ioctl+0x70/0x80
[ 7612.095832]  [&lt;c1001804&gt;] do_fast_syscall_32+0x84/0x120
[ 7612.095839]  [&lt;c183ff91&gt;] sysenter_past_esp+0x36/0x55
[ 7612.095844] ---[ end trace 97e9c637a20e8348 ]---

Signed-off-by: Wang YanQing &lt;udknight@gmail.com&gt;
Acked-by: Larry Finger &lt;Larry.Finger@lwfinger.net&gt;
Signed-off-by: Kalle Valo &lt;kvalo@codeaurora.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit cf968937d27751296920e6b82ffa89735e3a0023 upstream.

We can't use kfree_skb in irq disable context, because spin_lock_irqsave
make sure we are always in irq disable context, use dev_kfree_skb_irq
instead of kfree_skb is better than dev_kfree_skb_any.

This patch fix below kernel warning:
[ 7612.095528] ------------[ cut here ]------------
[ 7612.095546] WARNING: CPU: 3 PID: 4460 at kernel/softirq.c:150 __local_bh_enable_ip+0x58/0x80()
[ 7612.095550] Modules linked in: rtl8723be x86_pkg_temp_thermal btcoexist rtl_pci rtlwifi rtl8723_common
[ 7612.095567] CPU: 3 PID: 4460 Comm: ifconfig Tainted: G        W       4.4.0+ #4
[ 7612.095570] Hardware name: LENOVO 20DFA04FCD/20DFA04FCD, BIOS J5ET48WW (1.19 ) 08/27/2015
[ 7612.095574]  00000000 00000000 da37fc70 c12ce7c5 00000000 da37fca0 c104cc59 c19d4454
[ 7612.095584]  00000003 0000116c c19d4784 00000096 c10508a8 c10508a8 00000200 c1b42400
[ 7612.095594]  f29be780 da37fcb0 c104ccad 00000009 00000000 da37fcbc c10508a8 f21f08b8
[ 7612.095604] Call Trace:
[ 7612.095614]  [&lt;c12ce7c5&gt;] dump_stack+0x41/0x5c
[ 7612.095620]  [&lt;c104cc59&gt;] warn_slowpath_common+0x89/0xc0
[ 7612.095628]  [&lt;c10508a8&gt;] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095634]  [&lt;c10508a8&gt;] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095640]  [&lt;c104ccad&gt;] warn_slowpath_null+0x1d/0x20
[ 7612.095646]  [&lt;c10508a8&gt;] __local_bh_enable_ip+0x58/0x80
[ 7612.095653]  [&lt;c16b7d34&gt;] destroy_conntrack+0x64/0xa0
[ 7612.095660]  [&lt;c16b300f&gt;] nf_conntrack_destroy+0xf/0x20
[ 7612.095665]  [&lt;c1677565&gt;] skb_release_head_state+0x55/0xa0
[ 7612.095670]  [&lt;c16775bb&gt;] skb_release_all+0xb/0x20
[ 7612.095674]  [&lt;c167760b&gt;] __kfree_skb+0xb/0x60
[ 7612.095679]  [&lt;c16776f0&gt;] kfree_skb+0x30/0x70
[ 7612.095686]  [&lt;f81b869d&gt;] ? rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095692]  [&lt;f81b869d&gt;] rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095698]  [&lt;f81b87f9&gt;] rtl_pci_start+0x19/0x190 [rtl_pci]
[ 7612.095705]  [&lt;f81970e6&gt;] rtl_op_start+0x56/0x90 [rtlwifi]
[ 7612.095712]  [&lt;c17e3f16&gt;] drv_start+0x36/0xc0
[ 7612.095717]  [&lt;c17f5ab3&gt;] ieee80211_do_open+0x2d3/0x890
[ 7612.095725]  [&lt;c16820fe&gt;] ? call_netdevice_notifiers_info+0x2e/0x60
[ 7612.095730]  [&lt;c17f60bd&gt;] ieee80211_open+0x4d/0x50
[ 7612.095736]  [&lt;c16891b3&gt;] __dev_open+0xa3/0x130
[ 7612.095742]  [&lt;c183fa53&gt;] ? _raw_spin_unlock_bh+0x13/0x20
[ 7612.095748]  [&lt;c1689499&gt;] __dev_change_flags+0x89/0x140
[ 7612.095753]  [&lt;c127c70d&gt;] ? selinux_capable+0xd/0x10
[ 7612.095759]  [&lt;c1689589&gt;] dev_change_flags+0x29/0x60
[ 7612.095765]  [&lt;c1700b93&gt;] devinet_ioctl+0x553/0x670
[ 7612.095772]  [&lt;c12db758&gt;] ? _copy_to_user+0x28/0x40
[ 7612.095777]  [&lt;c17018b5&gt;] inet_ioctl+0x85/0xb0
[ 7612.095783]  [&lt;c166e647&gt;] sock_ioctl+0x67/0x260
[ 7612.095788]  [&lt;c166e5e0&gt;] ? sock_fasync+0x80/0x80
[ 7612.095795]  [&lt;c115c99b&gt;] do_vfs_ioctl+0x6b/0x550
[ 7612.095800]  [&lt;c127c812&gt;] ? selinux_file_ioctl+0x102/0x1e0
[ 7612.095807]  [&lt;c10a8914&gt;] ? timekeeping_suspend+0x294/0x320
[ 7612.095813]  [&lt;c10a256a&gt;] ? __hrtimer_run_queues+0x14a/0x210
[ 7612.095820]  [&lt;c1276e24&gt;] ? security_file_ioctl+0x34/0x50
[ 7612.095827]  [&lt;c115cef0&gt;] SyS_ioctl+0x70/0x80
[ 7612.095832]  [&lt;c1001804&gt;] do_fast_syscall_32+0x84/0x120
[ 7612.095839]  [&lt;c183ff91&gt;] sysenter_past_esp+0x36/0x55
[ 7612.095844] ---[ end trace 97e9c637a20e8348 ]---

Signed-off-by: Wang YanQing &lt;udknight@gmail.com&gt;
Acked-by: Larry Finger &lt;Larry.Finger@lwfinger.net&gt;
Signed-off-by: Kalle Valo &lt;kvalo@codeaurora.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
</feed>
