* Re: [PATCH net-next 2/2] sunvnet: Re-check for a VIO_DESC_READY data descriptor after short udelay()
From: Sowmini Varadhan @ 2014-09-02 16:56 UTC (permalink / raw)
To: Raghuram Kothakota; +Cc: David Miller, netdev
In-Reply-To: <665366D4-384B-45E1-B371-239EA87F5A15@oracle.com>
On (09/02/14 09:43), Raghuram Kothakota wrote:
> We could optimize this a bit by not wait for normal traffic, I mean,
> non-burst traffic
> and apply the retry only when we detect a stream of packets?
How could you tell the difference efficiently? You'd need to
track some kind of history/state for inter-packet arrival time.
All seems like over-kill (more useful to go and optimize other
parts of the system, such as do less work in interrupt context).
> We could detect a stream based on how many packets are picked
> up in this function, picking up 3 or more could be considered as a stream,
> of course tune based on testing.
>
> You probably tried it already, but checking to see if you tried with
> less number
> of iterations, we could reduce the iterations if the numbers are equally good
> with less iterations.
yes, the 3 * 4 micro-seconds was arrived at heuristically.
--Sowmini
^ permalink raw reply
* [PATCH] 3c59x: avoid panic in boomerang_start_xmit when finding page address:
From: Neil Horman @ 2014-09-02 16:51 UTC (permalink / raw)
To: netdev; +Cc: Neil Horman, klassert, David S. Miller
This bug was reported on a very old kernel (RHEL6, 2.6.32-491.el6):
BUG: unable to handle kernel paging request at 00800000
IP: [<c04107b5>] nommu_map_page+0x15/0x110
*pdpt = 000000003454f001 *pde = 000000003f03d067
Oops: 0000 [#1] SMP
last sysfs file: /sys/devices/system/cpu/online
Modules linked in: nfsd lockd nfs_acl auth_rpcgss sunrpc exportfs p4_clockmod
ipv6 ppdev parport_pc parport microcode iTCO_wdt iTCO_vendor_support 3c59x mii
dcdbas serio_raw snd_intel8x0 snd_ac97_codec ac97_bus snd_seq snd_seq_device
snd_pcm snd_timer snd soundcore snd_page_alloc i2c_i801 sg lpc_ich mfd_core ext4
jbd2 mbcache sr_mod cdrom sd_mod crc_t10dif pata_acpi ata_generic ata_piix
radeon ttm drm_kms_helper drm i2c_algo_bit i2c_core dm_mirror dm_region_hash
dm_log dm_mod [last unloaded: mperf]
Pid: 4219, comm: nfsd Not tainted 2.6.32-491.el6.i686 #1 Dell Computer
Corporation OptiPlex GX240 /OptiPlex GX240
EIP: 0060:[<c04107b5>] EFLAGS: 00010246 CPU: 0
EIP is at nommu_map_page+0x15/0x110
EAX: 00000000 EBX: c0a83480 ECX: 00000000 EDX: 00800000
ESI: 00000000 EDI: f70e7860 EBP: e2d09b54 ESP: e2d09b24
DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
Process nfsd (pid: 4219, ti=e2d08000 task=e2ceaaa0 task.ti=e2d08000)
Stack:
00000056 00000000 0000000e c65efd38 00000020 00000296 00000206 00000206
<0> c050c850 c0a83480 e2cef154 00000001 e2d09ba8 f8fcd585 00000510 00000001
<0> 00000000 00000000 f5172200 f8fdac00 0039ef8c f5277020 f70e7860 00000510
Call Trace:
[<c050c850>] ? page_address+0xd0/0xe0
[<f8fcd585>] ? boomerang_start_xmit+0x3b5/0x520 [3c59x]
[<c07b2975>] ? dev_hard_start_xmit+0xe5/0x400
[<f9182b00>] ? ip6_output_finish+0x0/0xf0 [ipv6]
[<c07ca053>] ? sch_direct_xmit+0x113/0x180
[<c07d5588>] ? nf_hook_slow+0x68/0x120
[<c07b2ea5>] ? dev_queue_xmit+0x1b5/0x290
[<f9182b6d>] ? ip6_output_finish+0x6d/0xf0 [ipv6]
[<f9184cb8>] ? ip6_xmit+0x3e8/0x490 [ipv6]
[<f91ab9f9>] ? inet6_csk_xmit+0x289/0x2f0 [ipv6]
[<c07f6451>] ? tcp_transmit_skb+0x431/0x7f0
[<c07a403f>] ? __alloc_skb+0x4f/0x140
[<c07f85a2>] ? tcp_write_xmit+0x1c2/0xa50
[<c07f90b1>] ? __tcp_push_pending_frames+0x31/0xe0
[<c07ea47a>] ? tcp_sendpage+0x44a/0x4b0
[<c07ea030>] ? tcp_sendpage+0x0/0x4b0
[<c079be1e>] ? kernel_sendpage+0x4e/0x90
[<f8457bb9>] ? svc_send_common+0xc9/0x120 [sunrpc]
[<f8457c85>] ? svc_sendto+0x75/0x1f0 [sunrpc]
[<c060d0d9>] ? _atomic_dec_and_lock+0x59/0x90
[<f87d55d0>] ? nfs3svc_encode_readres+0x0/0xc0 [nfsd]
[<f845876d>] ? svc_authorise+0x2d/0x40 [sunrpc]
[<f87d4410>] ? nfs3svc_release_fhandle+0x0/0x10 [nfsd]
[<f8455721>] ? svc_process_common+0xf1/0x5a0 [sunrpc]
[<f8457e86>] ? svc_tcp_sendto+0x36/0xa0 [sunrpc]
[<f8461778>] ? svc_send+0x98/0xd0 [sunrpc]
[<f87c698c>] ? nfsd+0xac/0x140 [nfsd]
[<c04470e0>] ? complete+0x40/0x60
[<f87c68e0>] ? nfsd+0x0/0x140 [nfsd]
[<c04802ac>] ? kthread+0x7c/0xa0
[<c0480230>] ? kthread+0x0/0xa0
[<c0409f9f>] ? kernel_thread_helper+0x7/0x10
Code: 8d b6 00 00 00 00 eb f8 8d b4 26 00 00 00 00 8d bc 27 00 00 00 00 55 89 e5
83 ec 30 89 75 f8 31 f6 89 7d fc 89 c7 89 c8 89 5d f4 <8b> 1a 8b 4d 08 c1 eb 19
c1 e3 04 8b 9b c0 29 c7 c0 83 e3 fc 29
But the problem seems to still exist upstream. It seems on 32 bit kernels
page_address() can reutrn a NULL value in some circumstances, and the
pci_map_single api isn't prepared to handle that (on this system it results in a
bogus pointer deference in nommu_map_page.
The fix is pretty easy, if we convert the 3c59x driver to use the more
convieient skb_frag_dma_map api we don't need to find the virtual address of the
page at all, and page gets mapped to the hardware properly. Verified to fix the
problem as described by the reporter.
Applies to the net tree
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: klassert@mathematik.tu-chemnitz.de
CC: "David S. Miller" <davem@davemloft.net>
---
drivers/net/ethernet/3com/3c59x.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
index 059c741..e55f39c 100644
--- a/drivers/net/ethernet/3com/3c59x.c
+++ b/drivers/net/ethernet/3com/3c59x.c
@@ -2177,10 +2177,10 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
vp->tx_ring[entry].frag[i+1].addr =
- cpu_to_le32(pci_map_single(
- VORTEX_PCI(vp),
- (void *)skb_frag_address(frag),
- skb_frag_size(frag), PCI_DMA_TODEVICE));
+ cpu_to_le32(skb_frag_dma_map(
+ &VORTEX_PCI(vp)->dev,
+ frag,
+ frag->page_offset, frag->size, PCI_DMA_TODEVICE));
if (i == skb_shinfo(skb)->nr_frags-1)
vp->tx_ring[entry].frag[i+1].length = cpu_to_le32(skb_frag_size(frag)|LAST_FRAG);
--
1.9.3
^ permalink raw reply related
* Re: RTNL: assertion failed at net/ipv6/addrconf.c (1699)
From: Cong Wang @ 2014-09-02 16:50 UTC (permalink / raw)
To: Hannes Frederic Sowa
Cc: Sabrina Dubroca, Tommi Rantala, David S. Miller, Alexey Kuznetsov,
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, netdev, LKML,
trinity, Dave Jones
In-Reply-To: <1409363489.2980.17.camel@localhost>
On Fri, Aug 29, 2014 at 6:51 PM, Hannes Frederic Sowa
<hannes@stressinduktion.org> wrote:
>
> Also rtnl_lock and rcu_read_lock compose in that order, so we don't need
> to change dev_get_by_flags, but as this is the only user it sure is
> possible. RCU locked version is just easier composeable, so I wouldn't
> touch that if needed in future, just also take rcu lock as before.
There is no point to keep RCU read lock if we have rtnl lock,
I don't know why you don't want to change dev_get_by_flags(),
it is pretty easy to do since it only has one caller.
Even if you really need RCU in future, you are always welcome
to bring it back when you do, sorry we should never be blocked by
code NOT merged yet.
>
> Also we should move ASSERT_RTNL checks from addrconf_join_solict to
> ipv6_dev_mc_inc/dec.
>
Make it another patch.
^ permalink raw reply
* Re: 3.16/3.16.1: Kernel Oops in nft_do_chain
From: leroy christophe @ 2014-09-02 16:44 UTC (permalink / raw)
To: Pablo Neira Ayuso
Cc: linux-kernel@vger.kernel.org, netdev, netfilter-devel,
David S. Miller
In-Reply-To: <20140902104114.GA10805@salvia>
Le 02/09/2014 12:41, Pablo Neira Ayuso a écrit :
> On Tue, Sep 02, 2014 at 12:14:27PM +0200, leroy christophe wrote:
>> Calling 'iptables-compat -L', first time nothing is listed on the screen.
>> Second try, it generates following Oops.
> I'm going to pass this patch to -stable asap:
>
> commit b88825de8545ad252c31543fef13cadf4de7a2bc
> Author: Pablo Neira Ayuso <pablo@netfilter.org>
> Date: Tue Aug 5 17:25:59 2014 +0200
>
> netfilter: nf_tables: don't update chain with unset counters
>
> Fix possible replacement of the per-cpu chain counters by null
> pointer when updating an existing chain in the commit path.
>
> Reported-by: Matteo Croce <technoboy85@gmail.com>
> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
>
> I think it's the root cause for this problem.
Thanks, it does fix the Oops I had.
Christophe
^ permalink raw reply
* [PATCH 2/2] net: ethernet: cpsw: fix interrupt lookup logic in cpsw_probe()
From: Daniel Mack @ 2014-09-02 16:44 UTC (permalink / raw)
To: davem; +Cc: julia.lawall, netdev, mugunthanvnm, george.cherian, Daniel Mack
In-Reply-To: <1409676245-13897-1-git-send-email-zonque@gmail.com>
The code in cpsw_probe() currently iterates over the available
interrupt resources and requests each of them. While doing so, it
keeps track of their indices through priv->irqs_table.
However, the code currently only remembers the last interrupt in
a resource, and will leak the others if there is more than one.
This can only happen for board-file driven platforms and not via DT,
however.
Also, there is currently no bounds check, while priv->irqs_table is a
fixed-size array. If we are passed more than 4 resources, we're in
trouble.
This patch introduces a bounds check and changes the way interrupt
indices are kept. Tested on a Beagle Bone Black board only.
Signed-off-by: Daniel Mack <zonque@gmail.com>
---
drivers/net/ethernet/ti/cpsw.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index cdbbb58..e747e55 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -2233,13 +2233,18 @@ static int cpsw_probe(struct platform_device *pdev)
while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k))) {
for (i = res->start; i <= res->end; i++) {
+ if (priv->num_irqs >= ARRAY_SIZE(priv->irqs_table)) {
+ ret = -EINVAL;
+ goto clean_irq_ret;
+ }
+
if (request_irq(i, cpsw_interrupt, 0,
dev_name(&pdev->dev), priv)) {
dev_err(priv->dev, "error attaching irq\n");
goto clean_irq_ret;
}
- priv->irqs_table[k] = i;
- priv->num_irqs = k + 1;
+ priv->irqs_table[priv->num_irqs] = i;
+ priv->num_irqs++;
}
k++;
}
--
2.1.0
^ permalink raw reply related
* [PATCH 1/2] net: ethernet: cpsw: don't claim IRQs with devm_request_irq()
From: Daniel Mack @ 2014-09-02 16:44 UTC (permalink / raw)
To: davem; +Cc: julia.lawall, netdev, mugunthanvnm, george.cherian, Daniel Mack
Julia Lawall spotted a problem with aa1a15e ("net: ethernet: cpsw:
switch to devres allocations") which introduced a race condition in
cpsw_probe() by removing explicit interrupt disable calls before
calling free_netdev(). Hence, an interrupt can fire after free_netdev()
was called. The same problem exists in cpsw_remove().
Fix this by reverting the IRQ part of the aforementioned patch and
handle those resources explicitly.
Reported-by: Julia Lawall <julia.lawall@lip6.fr>
Signed-off-by: Daniel Mack <zonque@gmail.com>
---
drivers/net/ethernet/ti/cpsw.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index 999fb72..cdbbb58 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -2233,10 +2233,10 @@ static int cpsw_probe(struct platform_device *pdev)
while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k))) {
for (i = res->start; i <= res->end; i++) {
- if (devm_request_irq(&pdev->dev, i, cpsw_interrupt, 0,
- dev_name(&pdev->dev), priv)) {
+ if (request_irq(i, cpsw_interrupt, 0,
+ dev_name(&pdev->dev), priv)) {
dev_err(priv->dev, "error attaching irq\n");
- goto clean_ale_ret;
+ goto clean_irq_ret;
}
priv->irqs_table[k] = i;
priv->num_irqs = k + 1;
@@ -2256,7 +2256,7 @@ static int cpsw_probe(struct platform_device *pdev)
if (ret) {
dev_err(priv->dev, "error registering net device\n");
ret = -ENODEV;
- goto clean_ale_ret;
+ goto clean_irq_ret;
}
cpsw_notice(priv, probe, "initialized device (regs %pa, irq %d)\n",
@@ -2266,12 +2266,15 @@ static int cpsw_probe(struct platform_device *pdev)
ret = cpsw_probe_dual_emac(pdev, priv);
if (ret) {
cpsw_err(priv, probe, "error probe slave 2 emac interface\n");
- goto clean_ale_ret;
+ goto clean_irq_ret;
}
}
return 0;
+clean_irq_ret:
+ for (i = 0; i < priv->num_irqs; i++)
+ free_irq(priv->irqs_table[i], priv);
clean_ale_ret:
cpsw_ale_destroy(priv->ale);
clean_dma_ret:
@@ -2289,11 +2292,15 @@ static int cpsw_remove(struct platform_device *pdev)
{
struct net_device *ndev = platform_get_drvdata(pdev);
struct cpsw_priv *priv = netdev_priv(ndev);
+ int i;
if (priv->data.dual_emac)
unregister_netdev(cpsw_get_slave_ndev(priv, 1));
unregister_netdev(ndev);
+ for (i = 0; i < priv->num_irqs; i++)
+ free_irq(priv->irqs_table[i], priv);
+
cpsw_ale_destroy(priv->ale);
cpdma_chan_destroy(priv->txch);
cpdma_chan_destroy(priv->rxch);
--
2.1.0
^ permalink raw reply related
* Re: [PATCH net-next 2/2] sunvnet: Re-check for a VIO_DESC_READY data descriptor after short udelay()
From: Raghuram Kothakota @ 2014-09-02 16:43 UTC (permalink / raw)
To: sowmini.varadhan; +Cc: David Miller, netdev
In-Reply-To: <54059BAA.1080307@oracle.com>
On Sep 2, 2014, at 3:27 AM, Sowmini Varadhan <sowmini.varadhan@oracle.com> wrote:
> On 09/01/2014 11:47 PM, David Miller wrote:
>
>>
>> If there were no more packets coming, this is wasted useless polling
>> time in atomic context.
>
> turns out that this gives a 20-30% perf improvement for tests like
> iperf.
>
> when there are no more packets coming, the extra 12 microsecond
> delay is not that big of a deal anyway. The point was that the extra
> 12 micro-second tax in the quiescent network state is less expensive
> than exiting interrupt context, taking another interrupt and doing
> another ldc_read, when there is actually a burst of packets.
>
We could optimize this a bit by not wait for normal traffic, I mean, non-burst traffic
and apply the retry only when we detect a stream of packets?
We could detect a stream based on how many packets are picked
up in this function, picking up 3 or more could be considered as a stream,
of course tune based on testing.
You probably tried it already, but checking to see if you tried with less number
of iterations, we could reduce the iterations if the numbers are equally good
with less iterations.
-Raghuram
> notice that there are many other such udelay() loops elsewhere in
> the code.
>
> I can remove the retries and submit patch 1/1 again later today.
>
>>
>> Everything should be event based, and we should not be compensating
>> and making sacrifices for a producer slower than we are as a consumer.
>> --
>> To unsubscribe from this list: send the line "unsubscribe netdev" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
^ permalink raw reply
* Re: [PATCH net v2] ipv6: fix rtnl locking in setsockopt for anycast and multicast
From: Cong Wang @ 2014-09-02 16:43 UTC (permalink / raw)
To: Sabrina Dubroca
Cc: Hannes Frederic Sowa, Cong Wang, Tommi Rantala, David S. Miller,
Alexey Kuznetsov, James Morris, Hideaki YOSHIFUJI,
Patrick McHardy, netdev, LKML, trinity, Dave Jones
In-Reply-To: <20140902082929.GA8483@kria>
On Tue, Sep 2, 2014 at 1:29 AM, Sabrina Dubroca <sd@queasysnail.net> wrote:
>
> v2:
> - based on net
> - keep dev_get_by_flags_rcu and RCU in ipv6_sock_ac_*
> - remove two ASSERT_RTNL() that are not necessary
There is no point to keep RCU here. Hannes' reply doesn't make
any sense.
^ permalink raw reply
* Re: question about drivers/net/ethernet/ti/cpsw.c
From: Daniel Mack @ 2014-09-02 16:34 UTC (permalink / raw)
To: David Miller, julia.lawall; +Cc: netdev, Mugunthan V N, George Cherian
In-Reply-To: <20140901.181101.2132157946809255487.davem@davemloft.net>
Hi,
On 09/02/2014 03:11 AM, David Miller wrote:
> From: Julia Lawall <julia.lawall@lip6.fr>
> Date: Thu, 28 Aug 2014 21:26:55 +0200 (CEST)
>
>> I wonder if the following patch:
>>
>> commit aa1a15e2d9199711cdcc9399fdb22544ab835a83
>> Author: Daniel Mack <zonque@gmail.com>
>> Date: Sat Sep 21 00:50:38 2013 +0530
>>
>> introduced a race condition in drivers/net/ethernet/ti/cpsw.c. I was
>> looking at an old version of the file (Linux 3.10), and it has
>>
>> clean_irq_ret:
>> for (i = 0; i < priv->num_irqs; i++)
>> free_irq(priv->irqs_table[i], priv);
>>
>> at the beginning of the cleanup code of the probe function (cpsw_probe).
>> The above patch replaces request_irq by devm_request_irq and gets rid of
>> the above cleanup code. But that moves the stopping of the interrupts
>> after the following code at the end of the function:
>>
>> free_netdev(priv->ndev);
>>
>> The interrupt handler (cpsw_interrupt) does reference priv->ndev:
>>
>> if (netif_running(priv->ndev)) {
>> napi_schedule(&priv->napi);
>> return IRQ_HANDLED;
>> }
>>
>> so perhaps this could be a problem. The same happens in the remove
>> function.
>
> It could definitely be a problem.
>
> Probably it would be better for this device to request IRQs in open
> and release them in close like so many other networking drivers do.
I had a quick look and it seems there are more issues that I don't
understand. Mugunthan, can you help here?
We have
struct cpsw_priv {
...
/* snapshot of IRQ numbers */
u32 irqs_table[4];
u32 num_irqs;
...
};
And the code in cpsw_probe() has:
while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k))) {
for (i = res->start; i <= res->end; i++) {
if (devm_request_irq(&pdev->dev, i, cpsw_interrupt, 0,
dev_name(&pdev->dev), priv)) {
dev_err(priv->dev, "error attaching irq\n");
goto clean_ale_ret;
}
priv->irqs_table[k] = i;
priv->num_irqs = k + 1;
}
k++;
}
So, first of all, we miss a bounds check, because there could be more
than 4 resources. And second, I don't understand that if a resource
describes more than one IRQ (res->start != res->end), all of them are
claimed, but only the last one is stored in priv->irqs_table. The code
as it formerly stood would also only have free'd the last one and leak
the others. Are there actually board files that have more than one IRQ
denoted in one resource for this driver? For DT, at least, this can't
happen AFAICS.
Also, cpsw_probe_dual_emac() copies the interrupt indices from one slave
instance to another, so we need to claim them at probe time. As they can
only be claimed once, we can't request/free them in open/release
unfortunately.
I guess the best we can do for now is to revert the IRQ part of aa1a15e
("net: ethernet: cpsw: switch to devres allocations"), and add some
cleanups for boundary checks on top. I'll send patches in a second.
However, I only have a BBB here for tests right now, which is not
dual-mac. Could anyone give them a try?
Please tell me if I'm missing anything.
Thanks,
Daniel
^ permalink raw reply
* Re: [PATCH net-next v2 2/2] Re-check for a VIO_DESC_READY data descriptor after short udelay()
From: Sowmini Varadhan @ 2014-09-02 16:32 UTC (permalink / raw)
To: David L Stevens; +Cc: netdev
In-Reply-To: <5405EFE7.4090302@oracle.com>
On (09/02/14 12:27), David L Stevens wrote:
> Sowmini,
> One of the things I found while looking at the code is that the
> write memory barrier is in the wrong place. I have a patch to fix it, but
> it means the last descriptor will NOT be marked as ready until the cache
> is flushed, which may be delayed.
I see.
I can certainly try that (could you please share that patch offline?)
But this fudge-factored delay (which, fwiw, I too cringed to add)
was actually motivated by some observations on other non-linux OS-es.
> That fix may make this one moot. Maybe not, but certainly there is
> an unnecessary delay in notifying the peer because of that bug. The fix is
> simply to move the "wmb()" after, instead of before, setting VIO_DESC_READY.
> I mentioned it in our stand-up last week, which you couldn't attend, because
> I pointed it out for the VDC driver, which also has the same problem.
>
> You may want to retry with that change to see if the delay still
> helps.
^ permalink raw reply
* [PATCH] VMXNET3: Check for map error in vmxnet3_set_mc
From: Andy King @ 2014-09-02 16:30 UTC (permalink / raw)
To: netdev, linux-kernel, virtualization
Cc: pv-drivers, penguin-kernel, Andy King, davem
We should check if the map of the table actually succeeds, and also free
resources accordingly. This fixes the kernel panic reported by Tetsuo
Handa.
Version bumped to 1.2.1.0
Acked-by: Shelley Gong <shelleygong@vmware.com>
Acked-by: Bhavesh Davda <bhavesh@vmware.com>
Signed-off-by: Andy King <acking@vmware.com>
---
drivers/net/vmxnet3/vmxnet3_drv.c | 14 ++++++++------
drivers/net/vmxnet3/vmxnet3_int.h | 4 ++--
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index d6e90c7..f450010 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -2056,7 +2056,6 @@ vmxnet3_set_mc(struct net_device *netdev)
if (!netdev_mc_empty(netdev)) {
new_table = vmxnet3_copy_mc(netdev);
if (new_table) {
- new_mode |= VMXNET3_RXM_MCAST;
rxConf->mfTableLen = cpu_to_le16(
netdev_mc_count(netdev) * ETH_ALEN);
new_table_pa = dma_map_single(
@@ -2064,15 +2063,18 @@ vmxnet3_set_mc(struct net_device *netdev)
new_table,
rxConf->mfTableLen,
PCI_DMA_TODEVICE);
+ }
+
+ if (new_table_pa) {
+ new_mode |= VMXNET3_RXM_MCAST;
rxConf->mfTablePA = cpu_to_le64(new_table_pa);
} else {
- netdev_info(netdev, "failed to copy mcast list"
- ", setting ALL_MULTI\n");
+ netdev_info(netdev,
+ "failed to copy mcast list, setting ALL_MULTI\n");
new_mode |= VMXNET3_RXM_ALL_MULTI;
}
}
-
if (!(new_mode & VMXNET3_RXM_MCAST)) {
rxConf->mfTableLen = 0;
rxConf->mfTablePA = 0;
@@ -2091,11 +2093,11 @@ vmxnet3_set_mc(struct net_device *netdev)
VMXNET3_CMD_UPDATE_MAC_FILTERS);
spin_unlock_irqrestore(&adapter->cmd_lock, flags);
- if (new_table) {
+ if (new_table_pa)
dma_unmap_single(&adapter->pdev->dev, new_table_pa,
rxConf->mfTableLen, PCI_DMA_TODEVICE);
+ if (new_table)
kfree(new_table);
- }
}
void
diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h
index 29ee77f2..3759479 100644
--- a/drivers/net/vmxnet3/vmxnet3_int.h
+++ b/drivers/net/vmxnet3/vmxnet3_int.h
@@ -69,10 +69,10 @@
/*
* Version numbers
*/
-#define VMXNET3_DRIVER_VERSION_STRING "1.2.0.0-k"
+#define VMXNET3_DRIVER_VERSION_STRING "1.2.1.0-k"
/* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
-#define VMXNET3_DRIVER_VERSION_NUM 0x01020000
+#define VMXNET3_DRIVER_VERSION_NUM 0x01020100
#if defined(CONFIG_PCI_MSI)
/* RSS only makes sense if MSI-X is supported. */
--
1.7.4.1
^ permalink raw reply related
* Re: [PATCH net-next v2 2/2] Re-check for a VIO_DESC_READY data descriptor after short udelay()
From: David L Stevens @ 2014-09-02 16:27 UTC (permalink / raw)
To: Sowmini Varadhan; +Cc: netdev
In-Reply-To: <20140902162029.GC31516@oracle.com>
Sowmini,
One of the things I found while looking at the code is that the
write memory barrier is in the wrong place. I have a patch to fix it, but
it means the last descriptor will NOT be marked as ready until the cache
is flushed, which may be delayed.
That fix may make this one moot. Maybe not, but certainly there is
an unnecessary delay in notifying the peer because of that bug. The fix is
simply to move the "wmb()" after, instead of before, setting VIO_DESC_READY.
I mentioned it in our stand-up last week, which you couldn't attend, because
I pointed it out for the VDC driver, which also has the same problem.
You may want to retry with that change to see if the delay still
helps.
+-DLS
On 09/02/2014 12:20 PM, Sowmini Varadhan wrote:
>
> Upon encountering the first !VIO_DESC_READY in vnet_walk_rx(),
> it is frequently worthwhile to re-check the descriptor status
> after a short microsecond delay, as a bursty sender could
> be actively populating the descriptors, and the short udelay()
> is far less expensive than rolling back to ldc_rx() and having
> to wake up and read data on another LDC message.
>
> Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
> Acked-by: Raghuram Kothakota <raghuram.kothakota@oracle.com>
> ---
> changes since v1: moved label `again', variable `retries' to this patchset.
>
> drivers/net/ethernet/sun/sunvnet.c | 23 ++++++++++++++++++++---
> 1 file changed, 20 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c
> index 8f90b57..7b1f320 100644
> --- a/drivers/net/ethernet/sun/sunvnet.c
> +++ b/drivers/net/ethernet/sun/sunvnet.c
> @@ -390,11 +390,28 @@ static int vnet_walk_rx(struct vnet_port *port, struct vio_dring_state *dr,
> viodbg(DATA, "vnet_walk_rx start[%08x] end[%08x]\n", start, end);
>
> while (start != end) {
> - int ack = 0, err = vnet_walk_rx_one(port, dr, start, &ack);
> + int retries;
> + int ack = 0, err;
> +
> + retries = 0;
> +again:
> + err = vnet_walk_rx_one(port, dr, start, &ack);
> if (err == -ECONNRESET)
> return err;
> - if (err != 0)
> - break;
> + if (err != 0) {
> + /* The descriptor was not READY. Retry with a
> + * small delay, in case we have a bursty sender
> + * that is actively populating the descriptors, to
> + * reduce the overhead of stopping and re-entering
> + * which would involve expensive LDC messages.
> + */
> + if (retries++ < 3) {
> + udelay(4);
> + goto again;
> + } else {
> + break;
> + }
> + }
> if (ack_start == -1)
> ack_start = start;
> ack_end = start;
>
^ permalink raw reply
* [PATCH net-next v2 2/2] Re-check for a VIO_DESC_READY data descriptor after short udelay()
From: Sowmini Varadhan @ 2014-09-02 16:20 UTC (permalink / raw)
To: davem, raghuram.kothakota, sowmini.varadhan; +Cc: netdev
Upon encountering the first !VIO_DESC_READY in vnet_walk_rx(),
it is frequently worthwhile to re-check the descriptor status
after a short microsecond delay, as a bursty sender could
be actively populating the descriptors, and the short udelay()
is far less expensive than rolling back to ldc_rx() and having
to wake up and read data on another LDC message.
Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Acked-by: Raghuram Kothakota <raghuram.kothakota@oracle.com>
---
changes since v1: moved label `again', variable `retries' to this patchset.
drivers/net/ethernet/sun/sunvnet.c | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c
index 8f90b57..7b1f320 100644
--- a/drivers/net/ethernet/sun/sunvnet.c
+++ b/drivers/net/ethernet/sun/sunvnet.c
@@ -390,11 +390,28 @@ static int vnet_walk_rx(struct vnet_port *port, struct vio_dring_state *dr,
viodbg(DATA, "vnet_walk_rx start[%08x] end[%08x]\n", start, end);
while (start != end) {
- int ack = 0, err = vnet_walk_rx_one(port, dr, start, &ack);
+ int retries;
+ int ack = 0, err;
+
+ retries = 0;
+again:
+ err = vnet_walk_rx_one(port, dr, start, &ack);
if (err == -ECONNRESET)
return err;
- if (err != 0)
- break;
+ if (err != 0) {
+ /* The descriptor was not READY. Retry with a
+ * small delay, in case we have a bursty sender
+ * that is actively populating the descriptors, to
+ * reduce the overhead of stopping and re-entering
+ * which would involve expensive LDC messages.
+ */
+ if (retries++ < 3) {
+ udelay(4);
+ goto again;
+ } else {
+ break;
+ }
+ }
if (ack_start == -1)
ack_start = start;
ack_end = start;
--
1.8.4.2
^ permalink raw reply related
* [PATCH net-next v2 1/2] Avoid sending superfluous LDC messages.
From: Sowmini Varadhan @ 2014-09-02 16:20 UTC (permalink / raw)
To: davem, raghuram.kothakota, sowmini.varadhan; +Cc: netdev
When sending out a burst of packets across multiple descriptor,
it is sufficient to send one LDC "start" trigger for
the first descriptor, so do not send an LDC "start" for every
pass through vnet_start_xmit. Similarly, it is sufficient to send
one "DRING_STOPPED" trigger for the last dring (and if that
fails, hold off and send the trigger later).
Optimizations to the number of LDC messages helps avoid
filling up the LDC channel with superfluous LDC messages
that risk triggering flow-control on the channel,
and also boosts performance.
Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Acked-by: Raghuram Kothakota <raghuram.kothakota@oracle.com>
---
changes since v1: moved unused label/variable to patch 2/2
drivers/net/ethernet/sun/sunvnet.c | 64 +++++++++++++++++++++++++++++++++++---
drivers/net/ethernet/sun/sunvnet.h | 4 +++
2 files changed, 63 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c
index 23c89ab..8f90b57 100644
--- a/drivers/net/ethernet/sun/sunvnet.c
+++ b/drivers/net/ethernet/sun/sunvnet.c
@@ -37,6 +37,8 @@ MODULE_VERSION(DRV_MODULE_VERSION);
*/
#define VNET_MAX_RETRIES 10
+static int __vnet_tx_trigger(struct vnet_port *port, u32 start);
+
/* Ordered from largest major to lowest */
static struct vio_version vnet_versions[] = {
{ .major = 1, .minor = 0 },
@@ -283,10 +285,18 @@ static int vnet_send_ack(struct vnet_port *port, struct vio_dring_state *dr,
port->raddr[0], port->raddr[1],
port->raddr[2], port->raddr[3],
port->raddr[4], port->raddr[5]);
- err = -ECONNRESET;
+ break;
}
} while (err == -EAGAIN);
+ if (err <= 0 && vio_dring_state == VIO_DRING_STOPPED) {
+ port->stop_rx_idx = end;
+ port->stop_rx = true;
+ } else {
+ port->stop_rx_idx = 0;
+ port->stop_rx = false;
+ }
+
return err;
}
@@ -448,7 +458,7 @@ static int vnet_ack(struct vnet_port *port, void *msgbuf)
struct net_device *dev;
struct vnet *vp;
u32 end;
-
+ struct vio_net_desc *desc;
if (unlikely(pkt->tag.stype_env != VIO_DRING_DATA))
return 0;
@@ -456,7 +466,24 @@ static int vnet_ack(struct vnet_port *port, void *msgbuf)
if (unlikely(!idx_is_pending(dr, end)))
return 0;
+ /* sync for race conditions with vnet_start_xmit() and tell xmit it
+ * is time to send a trigger.
+ */
dr->cons = next_idx(end, dr);
+ desc = vio_dring_entry(dr, dr->cons);
+ if (desc->hdr.state == VIO_DESC_READY && port->start_cons) {
+ /* vnet_start_xmit() just populated this dring but missed
+ * sending the "start" LDC message to the consumer.
+ * Send a "start" trigger on its behalf.
+ */
+ if (__vnet_tx_trigger(port, dr->cons) > 0)
+ port->start_cons = false;
+ else
+ port->start_cons = true;
+ } else {
+ port->start_cons = true;
+ }
+
vp = port->vp;
dev = vp->dev;
@@ -597,7 +624,7 @@ static void vnet_event(void *arg, int event)
local_irq_restore(flags);
}
-static int __vnet_tx_trigger(struct vnet_port *port)
+static int __vnet_tx_trigger(struct vnet_port *port, u32 start)
{
struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING];
struct vio_dring_data hdr = {
@@ -608,12 +635,21 @@ static int __vnet_tx_trigger(struct vnet_port *port)
.sid = vio_send_sid(&port->vio),
},
.dring_ident = dr->ident,
- .start_idx = dr->prod,
+ .start_idx = start,
.end_idx = (u32) -1,
};
int err, delay;
int retries = 0;
+ if (port->stop_rx) {
+ err = vnet_send_ack(port,
+ &port->vio.drings[VIO_DRIVER_RX_RING],
+ port->stop_rx_idx, -1,
+ VIO_DRING_STOPPED);
+ if (err <= 0)
+ return err;
+ }
+
hdr.seq = dr->snd_nxt;
delay = 1;
do {
@@ -734,7 +770,21 @@ static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev)
d->hdr.state = VIO_DESC_READY;
- err = __vnet_tx_trigger(port);
+ /* Exactly one ldc "start" trigger (for dr->cons) needs to be sent
+ * to notify the consumer that some descriptors are READY.
+ * After that "start" trigger, no additional triggers are needed until
+ * a DRING_STOPPED is received from the consumer. The dr->cons field
+ * (set up by vnet_ack()) has the value of the next dring index
+ * that has not yet been ack-ed. We send a "start" trigger here
+ * if, and only if, start_cons is true (reset it afterward). Conversely,
+ * vnet_ack() should check if the dring corresponding to cons
+ * is marked READY, but start_cons was false.
+ * If so, vnet_ack() should send out the missed "start" trigger.
+ */
+ if (!port->start_cons)
+ goto ldc_start_done; /* previous trigger suffices */
+
+ err = __vnet_tx_trigger(port, dr->cons);
if (unlikely(err < 0)) {
netdev_info(dev, "TX trigger error %d\n", err);
d->hdr.state = VIO_DESC_FREE;
@@ -742,6 +792,9 @@ static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev)
goto out_dropped_unlock;
}
+ldc_start_done:
+ port->start_cons = false;
+
dev->stats.tx_packets++;
dev->stats.tx_bytes += skb->len;
@@ -1035,6 +1088,7 @@ static int vnet_port_alloc_tx_bufs(struct vnet_port *port)
(sizeof(struct ldc_trans_cookie) * 2));
dr->num_entries = VNET_TX_RING_SIZE;
dr->prod = dr->cons = 0;
+ port->start_cons = true; /* need an initial trigger */
dr->pending = VNET_TX_RING_SIZE;
dr->ncookies = ncookies;
diff --git a/drivers/net/ethernet/sun/sunvnet.h b/drivers/net/ethernet/sun/sunvnet.h
index de5c2c6..da49337 100644
--- a/drivers/net/ethernet/sun/sunvnet.h
+++ b/drivers/net/ethernet/sun/sunvnet.h
@@ -40,6 +40,10 @@ struct vnet_port {
struct vnet_tx_entry tx_bufs[VNET_TX_RING_SIZE];
struct list_head list;
+
+ u32 stop_rx_idx;
+ bool stop_rx;
+ bool start_cons;
};
static inline struct vnet_port *to_vnet_port(struct vio_driver_state *vio)
--
1.8.4.2
^ permalink raw reply related
* [PATCH net-next v2 0/2] sunvnet: Reduce LDC message overhead.
From: Sowmini Varadhan @ 2014-09-02 16:19 UTC (permalink / raw)
To: davem, raghuram.kothakota, sowmini.varadhan; +Cc: netdev
This patchset has an updated version of the v1 changes to reduce the
overhead from LDC messages.
Re-submitting both patches for completeness.
- Send the minimum number of start and stop messages between producer
and consumer.
Changes since v1 to pull out the unused label `again' and the unused
`retries' variable
- When reading the descriptor rings, don't give up as soon as a dring
that is not VIO_DESC_READY is found.
Changes since v1: the `again' label and retries variable belong to
this patch.
I understand the Puristic objection to the polling-delay from
patch 2/2, but the practical reality is that when there is
a burst of data, and performance is actually most critical,
the overhead from hastily sending an LDC stop and then
processing another LDC start message is far greater than the
slight penalty of a small delay when the network traffic is light.
Note that I'm separately working on moving the data handling to a
bottom-half or softirq context, where the poll-based delay will be
even less critical. We could also consider adding a procfs or ethtool
based knob to disable the fudge-factored delay, and avoid the minor
polling penalty.
Sowmini Varadhan (2):
Avoid sending superfluous LDC messages.
Re-check for a VIO_DESC_READY data descriptor after short udelay()
drivers/net/ethernet/sun/sunvnet.c | 87 ++++++++++++++++++++++++++++++++++----
drivers/net/ethernet/sun/sunvnet.h | 4 ++
2 files changed, 83 insertions(+), 8 deletions(-)
--
1.8.4.2
^ permalink raw reply
* Re: [net-next PATCH 2/3] qdisc: bulk dequeue support for qdiscs with TCQ_F_ONETXQUEUE
From: Daniel Borkmann @ 2014-09-02 16:14 UTC (permalink / raw)
To: Jesper Dangaard Brouer
Cc: David S. Miller, netdev, Florian Westphal, Hannes Frederic Sowa
In-Reply-To: <20140902143538.1918.82870.stgit@dragon>
On 09/02/2014 04:35 PM, Jesper Dangaard Brouer wrote:
> Based on DaveM's recent API work on dev_hard_start_xmit(), that allows
> sending/processing an entire skb list.
>
> This patch implements qdisc bulk dequeue, by allowing multiple packets
> to be dequeued in dequeue_skb().
>
> One restriction of the new API is that every SKB must belong to the
> same TXQ. This patch takes the easy way out, by restricting bulk
> dequeue to qdisc's with the TCQ_F_ONETXQUEUE flag, that specifies the
> qdisc only have attached a single TXQ.
>
> Testing if this have the desired effect is the challenging part.
> Generating enough packets for a backlog queue to form at the qdisc is
> a challenge (because overhead else-where is a limiting factor
> e.g. I've measured the pure skb_alloc/free cycle to cost 80ns).
>
> After trying many qdisc setups, I figured out that, the easiest way to
> make a backlog form is to fully load the system, all CPUs. And I can
> even demonstrate this with the default MQ disc.
>
> This is a 12 core CPU (without HT) running trafgen on all 12 cores,
> via qdisc-path using sendto():
> * trafgen --cpp --dev $DEV --conf udp_example02_const.trafgen --qdisc-path -t0 --cpus 12
>
> Measuring TX pps:
> * Baseline : 12,815,925 pps
> * This patch: 14,892,001 pps
I'm curious about *_RR tests and *_STREAM results e.g. from super_netperf.
One thing we might want to be careful about when comparing before and
after numbers though is that now we still have the old quota limit, but
don't adjust it here. It probably depends on how you interpret quota,
but we now do more work within our quota than before.
> This is crazy fast. This measurement is actually "too-high" as
> 10Gbit/s wirespeed is 14,880,952 (11049 pps too fast).
>
> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
...
> net/sched/sch_generic.c | 23 ++++++++++++++++++++++-
> 1 files changed, 22 insertions(+), 1 deletions(-)
>
> diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
> index 5b261e9..30814ef 100644
> --- a/net/sched/sch_generic.c
> +++ b/net/sched/sch_generic.c
> @@ -56,6 +56,9 @@ static inline int dev_requeue_skb(struct sk_buff *skb, struct Qdisc *q)
> return 0;
> }
>
> +/* Note that dequeue_skb can possibly return a SKB list (via skb->next).
> + * A requeued skb (via q->gso_skb) can also be a SKB list.
> + */
> static inline struct sk_buff *dequeue_skb(struct Qdisc *q)
> {
> struct sk_buff *skb = q->gso_skb;
> @@ -70,10 +73,28 @@ static inline struct sk_buff *dequeue_skb(struct Qdisc *q)
> } else
> skb = NULL;
> } else {
> - if (!(q->flags & TCQ_F_ONETXQUEUE) || !netif_xmit_frozen_or_stopped(txq)) {
> + if (!(q->flags & TCQ_F_ONETXQUEUE)
> + || !netif_xmit_frozen_or_stopped(txq)) {
> skb = q->dequeue(q);
> if (skb)
> skb = validate_xmit_skb(skb, qdisc_dev(q));
> + /* bulk dequeue */
> + if (skb && !skb->next && (q->flags & TCQ_F_ONETXQUEUE)) {
This check should better be an inline for sch_generic.h, e.g. ...
static inline bool qdisc_may_bulk(const struct Qdisc *qdisc,
const struct sk_buff *skb)
{
return (qdisc->flags & TCQ_F_ONETXQUEUE) && !skb->next;
}
> + struct sk_buff *new, *head = skb;
> + int limit = 7;
> +
> + do {
> + new = q->dequeue(q);
> + if (new)
> + new = validate_xmit_skb(
> + new, qdisc_dev(q));
This and above dequeue() + validate_xmit_skb() code should probably also go
into a helper if you're at it, e.g. ...
static inline struct sk_buff *qdisc_dequeue_validate(struct Qdisc *qdisc)
{
struct sk_buff *skb = qdisc->dequeue(qdisc);
if (skb != NULL)
skb = validate_xmit_skb(skb, qdisc_dev(qdisc));
return skb;
}
> + if (new) {
> + skb->next = new;
> + skb = new;
> + }
> + } while (new && --limit);
> + skb = head;
> + }
> }
> }
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply
* Re: [PATCH] Next branch: authgss: authgss.c: Fix warnings for uninitizlized variable expire
From: Boaz Harrosh @ 2014-09-02 16:05 UTC (permalink / raw)
To: Bruce Fields
Cc: Trond Myklebust, Shakil A Khan, Linux NFS Mailing List,
Linux Kernel mailing list, netdev@vger.kernel.org, Peter Zijlstra,
Paul McKenney, William Andros Adamson, Jeffrey Layton,
David S. Miller
In-Reply-To: <20140902141739.GB31793@fieldses.org>
On 09/02/2014 05:17 PM, Bruce Fields wrote:
> On Tue, Sep 02, 2014 at 04:59:45PM +0300, Boaz Harrosh wrote:
>> uninitialized_var was made to be a friend not an enemy, in the face of real
>> ugliness it is the best we can do. And that is what it should communicate to
>> everyone. Why has it become everyone's favorite blasphemy I do not know.
>
> Not personally claiming it should never be used, just that this
> particular case is kind of extreme, since unless I'm missing a real
> compilication it's basically just:
>
> if (ctx)
> assign to expire
> ...
> if (ctx)
> use expire
>
> A compiler wouldn't have to be that smart to actually prove to itself
> that expire is initialized at the last step, and that it's not only
> failing to do that but actually flagging it as possibly unitialized is
> weird.
Actually that is a complicated case for a compiler. Because of the two
different scopes. I think it only optimizes that on higher optimization
values. Cross scope analysis is not done at parsing time but more on
code generation time, the "warning" is more of the former phase.
Perhaps change the code, if possible, so the assign and use of "expire"
is under the last if (or the first)? That would be also easier on the
reader.
BTW: You are most probably right though, because here I do not have this
problem. I guess it is the case of an old compiler with a certain
compilation environment.
Thanks
Boaz
>
> --b.
>
^ permalink raw reply
* [PATCH 3/4] Update firmware for rtl8192de
From: Larry Finger @ 2014-09-02 16:00 UTC (permalink / raw)
To: linux-firmware; +Cc: linux-wireless, Larry Finger, netdev
In-Reply-To: <1409673648-20328-1-git-send-email-Larry.Finger@lwfinger.net>
This version corresponds to the firmware in the vendor's driver labelled
rtlwifi_linux_mac80211_0019.0320.2014V628.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
---
WHENCE | 2 +-
rtlwifi/rtl8192defw.bin | Bin 22978 -> 31376 bytes
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/WHENCE b/WHENCE
index 57da84b..44dad32 100644
--- a/WHENCE
+++ b/WHENCE
@@ -1950,7 +1950,7 @@ Licence: Redistributable. See LICENCE.rtlwifi_firmware.txt for details.
Driver: rtl8192de - Realtek 802.11n WLAN driver for RTL8192DE
-Info: updated from Realtek version rtl_92ce_92se_92de_linux_mac80211_0004.0816.2011
+Info: Updated from Realtek version rtl_92ce_92se_92de_8723ae_linux_mac80211_0007.0809.2012
File: rtlwifi/rtl8192defw.bin
Licence: Redistributable. See LICENCE.rtlwifi_firmware.txt for details.
diff --git a/rtlwifi/rtl8192defw.bin b/rtlwifi/rtl8192defw.bin
index 98e29691c472eb94c4134f1642abedfccbb02895..cbb4b887c4df118a1d23fd8663809d1133ed3ed3 100644
GIT binary patch
literal 31376
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
T-wW^!6x(3%-&NqVb#MP)L&PHk
literal 22978
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
C*#Fo7
--
1.8.4.5
^ permalink raw reply related
* [PATCH 2/4] Update firmware for rtl8723be
From: Larry Finger @ 2014-09-02 16:00 UTC (permalink / raw)
To: linux-firmware; +Cc: linux-wireless, Larry Finger, netdev
In-Reply-To: <1409673648-20328-1-git-send-email-Larry.Finger@lwfinger.net>
This version corresponds to the firmware in the vendor's driver labelled
rtlwifi_linux_mac80211_0019.0320.2014V628.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
---
WHENCE | 2 +-
rtlwifi/rtl8723befw.bin | Bin 30996 -> 30746 bytes
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/WHENCE b/WHENCE
index 4a51bc4..57da84b 100644
--- a/WHENCE
+++ b/WHENCE
@@ -1969,7 +1969,7 @@ Licence: Redistributable. See LICENCE.rtlwifi_firmware.txt for details.
Driver: rtl8723be - Realtek 802.11n WLAN driver for RTL8723BE
-Info: Taken from driver sent to me from Realtek
+Info: From Vendor's realtek/rtlwifi_linux_mac80211_0019.0320.2014V628 driver
File: rtlwifi/rtl8723befw.bin
Licence: Redistributable. See LICENCE.rtlwifi_firmware.txt for details.
diff --git a/rtlwifi/rtl8723befw.bin b/rtlwifi/rtl8723befw.bin
index 466bab28656f3d41ebb019b7dc248cfb1438df97..25e183cb15a3f2bc05418d3fac4be7bd8e62a779 100644
GIT binary patch
literal 30746
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
JE|X*L{{n^IPs9KK
literal 30996
zcmd^odwf*oo%ftGXD&%5x065!w@ij0pcICSifCa_RPX|c43`SXV1svMY!8YnVNPJ{
zs#Q5iz)K6s%(yLHFl8It?yf7r*sa@b6-c++oArP*L4{-v>L8HJ%=`U4=bV{Ipsnxw
z+4uAQ@v52gTz}8+x&5Bs?Rn&ulvzqGRh9ywVBQxSEtcJdmO=mU3)k{%&J9iqY#kgA
zdI!aaM)<%bEQ!DKbN##igJD{x6yaeS{aS2#%%;c6^jMi5OR^FcJz^<l04ykyL8wfd
zOYvdm=Y2{nbXu(zp};}EPP>)Iug%I?gyKSn&Ej+wIs}WesL+mZQK8LBzbNCZ6kUR)
ztWqq%Z=GkfXmQthM!4v=(oVmn0)A@?@jI>-CEep{DD0`B^xB%?C^>DayVByFHg!Z9
zekY@@ciP33^gFTAg5Ns!JC=S0L9pRJhr{746dZ*m<rS5~tO8<1#iceR=YJheXJMhM
zq^!K$QBY8X0_EkRS*A2wy0nyFI#2{fMVsAGTvjfM4kyLSD+=&W{?}%AA})#*l|Y~f
zMawIPn`J7pr7J3EY}r3`7hQ~RP3`yz6DdCKqKOng@9Q2vVbUa)lM7MVi&^b#NI+Hk
zbK<WIe<Sc$hd)|G3-A}fpMt+m{QVApSK+S_e^{KBHvDN83+KZh%5W;;ZTQPe<5yTL
zRyUgXk;P*7A@5z3LmO0<KZLxGb9oNL|7QN*Xy0t_LU0Iv(a$WFipMRMsvw5&E8s(Q
zz6xGOIo^U5j<IxEM2uve#fvcvSnjh_TBc*<>M?3<z)Ukk++<GSS73Y^El*iA?k?^N
zieXHK#>Wn>PxW$TtRLI{RPavG&q~{JX*wM1$LGVMG+wYf3teR+++JTj$8kKzTdi2K
zHl$<0JDoh@Hk;j!{}3-IG{2k`akdF~ENd1jGV==aLVyXVRsn^a=9ge&fxE1fh%bE#
z@MY-*MJ|_~!$M}BD_hFts<sO}Tb)=W|KI-ecDtOOE?y^m=TOmxL(W&!x1WkXS$Ajh
z$@o(<A4xuS<f)T&|8S<~O`exBT|1jQd=}q(k61U#!+V^;qPN?7yhp9`N1Q&=?)-i4
zr{6u~iMul6>YC4#I-LisLddeQxyKv(%o2BXwbr|BF6puHt}{KUA2d6AUU$7kAb)-4
z<NE`uv!_#)Psd%|t-c9y7qw?(r$+Sr`b@m}{($|EdU}MMMCN1fo*w3syW=iuCnOLG
zs<rHxD`fE=b$CA#LQek|{!RaWq}?xH?eJ`T><7&fAFyYf4`n{=4_RXy<<rj7&JWLR
zY<|eA++dTq9i3_nf7d+0ZFn-U;i*TCJaweq!za31c%L<t@kq^6r=IC?$G<>B^S$Wk
z>#ja@rnW?SY|5FQv(BCotRJb~y8{IU$E&NqEGUpaA3j|ELmxUL*qUw46!1`KXV2Nb
zH(dP7%_Hpg9#)~c`glRXm(}v;W98o`>K;4OBb-T06@b=`)6T@y9j8MUPZp5`^|!~%
z5b-|+MB=VD9EH+jz%JR$Uw3o;6zLxjK0u?2VLMAX{XGMp+!t`}wH-e_rds}Duk{DE
z8mjgY0JGAm5sz`DRPqO$^D%+4_}7|yQKh(GudU}x`3p+=^ApYIAwt6*w|Q0mNbJZl
z3^qpp7+1<)chfd4mPym($Y<Vu+52U2$k`Jp`r7Hh^m?!C@Sd{wo(@dd%sahW89<aB
zA7A1<=0bHru4M6H{*#N)w<9m3M<J&(F@Gxtei<4#^0HrEobe<s$@I-m_g;}YIcva^
zSefa&HQoD-)X5cy+?eURA>F$$b#lRg=R|8#`*hFM+9$iO);|9JwVFpAh^ncmnvSX&
zPi)5kradL`JJOPMN5-R`iK=I#>ba=ekGwO;JBz$?$m{pKG=58ROI*8jYjUec?PrC~
zdQNE3PqpYLn&;5gLtD<ob_7M#2^L4Ata5V8<6C3j286o;iD)z`f5<Ov<*)l7wj+w7
zQJ?j+%zftk@C$horT86nu6Mg;yyGvO?|yfyPxxY)%w2c-!<bye@q)9=?UR*-vDjvA
zN8rt9#y{5^FYwo-Q8B=kyzlQEuLkz|eun5df`z|#f4=42U;cdSFSTsw!%zNvTz<<k
zFOtSz#xgHz!JmLX8~*J0tHs}V%gwV_3~SgF;<xWk%;!=ezM+<d{b_`|%i6iF&O_U_
zY}jh))k0;PE#jQ|Lx-Mi_ZT^$ZK&q%;n)6Fu{@<Jk#kz;>Fv9fNPj|8EYBceKtn{W
zO9zHk21Zo|YU`{4e(k#`sAf)GVg&Ywjlkg-^g!M4<d)dX7m{1m{#YvW;0Y?eK@*gn
zFH9SwR#f<{{l&4N$?sGkgS$}1dBt}D3ILbp0e+5>it`elN5VS{V2B%%?61j{bSh6+
zhCo9SHwYRM_@N2bp$WqIP;5iX*oP)Kj083dUez8;g`RGxW%HBV8sG9Yj3O;xbT*R+
z3X&!dPjqmC^o3lK=->tEjBHPISY6Tp6`aW@x1P{Enqu=v8O@kpaqIqus)nM5B89U^
zbG4}IPocmPb-r6u+6L4Njd=|kRva58PD^xEc-705@O5gysYEM~BHLmJu(B9ThgWqV
zUa84;{7SrrJn`;J^vX(GzZ&3U8pA%Jg|_9dJynU0F_#~LYKD~xJ&DC9q(V<($#Phl
zUw=Dv8Y%t(TF0jwYMaE+Y-Al|OVkyz;X7YWg=`JAo{)e0?s)N<WO-;Q0wrsbVrUrx
zrE8KEq2&matw~nyD-Zb_YWInurTDD~EyHhRXn8~JlI;mksF@nV7HLKUvH@6bs1>*W
zhd8HP-2PkfStZ1Y*AG*|OVH7b9#RGE@EzjD7xfyxR0uUTOw5QYO2lWY7|8kP4nT^}
zem|Dsuiv9YM{R#0;qCF$u1YlW!5fw6XbjtEHH9qf3Fk|77MeWy!9P-}ps8IgPT!wd
ziLREi`r=qWZ4{Oze=>NTc=Tw`Z8~ska4Aa&S<;=3PJ8GXw3s@Cp;m8JBEtJxG@-?m
zh!y+Us-`kZ#HLQgub|GfY}@i+oKjiqWxhWTX+~WBh0;1Qp@~YL!Zl)5D8e{(zO03+
zXxz}@DvaSQ3S&fOHPrH#zW`{g-&dKa%|J_NSwO$h&^vyuPBy!ZM5Eykhcv7>)~WMH
zVD*L7RA@&-t<v_q8W0t3s_H#%lgelra#JNm3puIrvQ)@P3rXCyG^9`h7LkI4%FPyj
zPQ9@jm1s3XY_^UV7o4U<M`A)o(u7oFLduk85QGOmpd<sWql3}XmoCvwZ+tQv<wjd@
z9F-x8nU*Y5sb|f}t$o-8REq8EXRv5b{oVdd!<7amF${jErf|Pd8}|h-!`S><D#h;s
zsSw+g#;Q}DnwAbSU=adVn&>F~MB(O2g7zr)cacX9l-n38X3rw0#f8&DyEgOX|CtDU
zL*c5_w89NnH$m>moSc(R)Nz^EoU{@-o6!0)N~#=9oJFts7Frn!)t;nSN<@34j?ctq
zq^H$Ve%%P5Nm=5yCl!7dCO^MT^r5W)&9phy)EjnTGbi(#Eq#q#U~=yUt@Ne3Z=ID|
zFV)UH%9YzfTp}=>3Sv+@3VE3iSrP$Imp11hh)SfdkFC_G76np$bnGX$JhN2|e634~
zoKjmpRwA0(V)cQdb+Schk%u8Ewn5`W=Wj!W?1Ynl9^x3Dv4P&n`UdMyZjEWKlN}@a
zBnu;#NWeh&=Vl}>7ngW5tok)gvSwpg?ov@MR;GDk{pV6xYzr1C5qm-lXiDpFHSp=%
z?OwIqp9Uu--o8ML?pMMRdVHk)?RLt~c#pb>0*4<$q8OTyOFw4w_iN>k<Pv&p{sY>y
zo+It@4`P_^@FVpNE)e|@N+hi|3W1`KZ~s9G3%~?l&C_HJm1mbiETKhvwJ0r!sCW}7
z-I@8e6oNO@hT2%Xv{49pl++5<tyU<Jn3^FTi>CQ$%#>Ub;u`J?@v<G<#C;(v8_MnF
zAz|D7AzoZCfx2?-{Tk}urD7!oz$Prz5^j}mE>ofwH8?Uf1&t`-t8ol`jfJkk3X58Z
zbVL@ajl+TuD5={q8a<=G@Xr;}C`nww+^#)JWP#S*GS@dIrpeW2aysFkJH^bg;uu3%
z&G^0GywZvB>Ub4XaGeGcF$MjjJdl@+623<Dmo82L0ZLq`cGMQJMi2iqBs2tB$~b3;
z+kRO#I-&6JA+S!l1aDESA9H;87PCm>%;2>I1cb?}Uc_iq<T~`KAKUS|RA^>HnG(KP
zolg{UcTA&zJWTZ;$AsUk(xSkU7IssJnoo6H>QKTZRI0b*G7RQgjN^40gCDt`6~W%S
zPEE1hem!7QFMO3$z^giy@FcWM2XuH6D&0kJOs-Ce{74!G2yd|w|EGjbFn+ZCO*WHC
z<XNczxowgIzby$3L@->V21Z74fXgn$5mbZV2qfYHB0G&nB0K5y*o9q*f8{H5EO(;e
zZvyLG_%`DE9KP%DeIDOC@O=T_JMn!H?d(+j9GXFO)}Lq1wF;7u3EHD-V?m%WQOO9(
z8x8@BkWq*Ng*&Lu=Qa7#PEKhn0D;bumA%|R6L$!FL#R}=f0HsnT0#~O7os&pS_*X1
zqJ+Pu&KI;ME;O#83=ESqmZ3@Bf6${uCSqX<o7H3hWM=KUK;V8QGD)H{@^Z<k#n%e{
z(&X*2<eK>Hc}F#|X5-g@$TQw7BVEEGGeM*inr%&dO^5Rk>*A#CZ|V@%c9dFU$+e0Q
zimwIeiE2m)^7Dd(Ky)njh`FaSh^pztBJ8j1REqW|lt>|%aSoJOi4-BkvyclRD+?7P
zB(P8kEio)I>ab5A=fWmO$V=VkFq!4%WD@Z&r?a?_cuQK~`wtpxBP^kfNIP2_I2Z!c
z^(lS{Q%MW-AMvHB{sF!;)j!0Srg|^FG}SL_a=8+D3B>1wjtn8hh9lhkrug(g2pv}<
zH(+#?$O^VRZ!(tW4b5*V;X*L&kPqDISOV{jR{`V=-W~}1nrtPGGjfBP5ucDSb;BeP
z(Q%Ruzg0TDJAq&YYT!hVRN^~IZ+Y1EH$y@g<gyS1k^N4hVGY-t!y0Zdhc$eQK6*r{
zP<j$0x&jefw7Bww7F>;wn$`uJ=fRo}D3Mia|H*p;^OZ;d(q*6ax~*@#x|mL{)j**U
z-`gZiR^&eO;J%H}A?m#f)DzIMz!IS4nXnHFwQ61&b{nRhX0nWy?kL*-g(wmFf(W=f
zUZMv=oI7R<@t%;?v*BaMhP~gR<ABDAR~tF4ZkWQoqe&~GnmA|v0nRE;8&KMwQv)SR
z+ly$t?FDsxfG=PDcDwlOgOvSu_aA8&7q^So-7No`(gyjj?FFwYsF|Y>zMDANK{Yb5
zl(~1Kb-m!ucBpAKX;3ND{=83@<5-v)Nv{tgHG!Ymb!q%c5G8M@8$hVNZXiGvI!gFc
z^;9&7U4QC36zZ_^r^c{=P^v`h)J(u8{^UK`Dn9%$r8YXLqPYHz+MoZWdL@p-?;qd{
zz>O{{fB5|bI1>a;y{*^l7*r_Nrpu`NHfu`=-X{L!HdGBR6W4u9ZeVDAm700o5k`qW
zEs(+fplhyDrLBb|FQ^1mtN61i#=g6PR(IHe1DQYgp7@=AR>IYo!2mz+hau}JP<!kQ
ze<>2ZstrqCCT?8`7m<t$u?!g?qe{3+?P^uRV;CSkXHu@v{m6lM;jS;lnK_;$Xxa8?
zs3`+pW$Q!oVrm>sc-6T|xLEans6iSP$~Wruu_tljvEz!@z^dTXfgBUA#$Tyq$0A6n
z0sS-sT9823Bco97OZX(~3J<*jiB#W_38K;e0&(lBwC-*iX*2_g9pWVQ(MlU0+YlYA
zvr^Yi34|eus1QOUvxxhT%wi>oX!sq($>^eM<O(7eH~}J8U?W^XyKI)467Ti`>k&G4
zO?_n}=hU&4CuF;ivDAmvt-8t|l$~tDILjZ@1#9XS&_g7~x~MOAHfaa{gLM=NlJNA*
z;C@=g2UZbSI=7jqEl*_a5v?=QiZ!{CfOl2o4*<?-h7Bu+2`r~s9;HGrIS*%{^(DkA
z)O1&3Po~bAip>~M!Ubyg?vsu38A*QL=Tuvj$ZR%Jv)QRO8(JHzrD`l5d4v+K)T5=K
zOc)wWru|txI7*X?2~@VUfi0%zZw)_9&K0alnuS5bkI`rIrH{Q^ot_=@(X`~4QUdEp
z0Hvv50}Q(7k_*`ckZy!lBP}#@&T4e5XzDR(4s%gi#XEm}q4^1M2mh1JkboKbOy5;B
z66SofZG=AmzuHFN#{SASVm<OO{A~e{i2swV^gptFFkb(&n+MwoB<SIf&^ZTo2o_$k
zxjE&r;=?lza3koDVY({pNjihNTZDRRi1R?X4T_hEC9m9e6<GEAHgn=-a};hpD5QtT
ztYQ~XgP0-EUMy|7O7(|W7$>rAf*yI6j%V7>tV&mf8=DlRU79==^{FxmnmPcg#3Hm&
zj7rgQ(2Zb!N5`oFgD|khl(uIz&+Cp;eFwN<beI~PO+mZ8i7VfzW3RLogUScT5wc7-
z2hu67d;0)aPF*&dEkWY|rP!_kf9pLC{?^l}c5dz5(s^jZAxo#N)6sMe=X|dwt;s~S
zUV+Yhux^JOhoB)iwB^v&L+W%?&~jBQom?m1Y3&qH+1}|u1?dt^3V=<x>0G?hdmI$`
zfOH81M5%ye2Q1-`^$>rEJ7h7SYF`EJRvqrMKa5wy;3O_Tf^W<!F8dL_ajUrf8GL)J
z;*N^=C@>A%>4Re5nu+f*s~Fsh??=dX<BMuLmf#!b_dksf)!GstO~oHNgKvy)@Zl5Z
zr_GhNeihu6@VBx3!QM;7It$+hh7O$h%=j9%*fQ}oen(p3m=2}|d8u~01c76(!ztUk
zX1q7!z2BY9Bvw-mD30Q5lx9v`I7W3J=jAdZfv1Fw`?xO0xV3pRp$!~oWLhXQWkhTg
z@mrP1VJ+4#`=#MJN_)_(pykK9q5Y_AUnB1R@4QsV%NP9(sE=}}^u5U>p>(y#^?dCD
zY`AaH0D$6chH@}@j}#hz59FGeVN#Y5xO<dlE9-&xI3mFsAU{e8uSX@hqWvE6#}o2u
zfVA80iQfa*zMqC%Ob;^{B!;%xVL-JL)Z|@8%)w%Jr{i~J;`fYK>o`K<SyFmo85?E5
zjpx-U%GKDQ6#~zvY3TFIyQoCQ$fQoh@_-fRXVS>$XO`q=5^DLGrTLi!Loz9@W~5#E
zC_YC5Ax3Rk{BGzgmGA@dLWFt{x?i4)P#mHA<Vz8XA#|^N2|^zsbdOw%&@qJWma7mt
ziqKthF+$)w!gtD6C42{F0F#CVd5^gJ24mRk`FT;0uxCI+%cFGABA6k53Hu}_{{7FD
zXmO6m49^A49mI>B&!hNsN<WB4nM^!NhVhBT31VUyw^9P3?}EGwofIgga}CiF;tQfB
zj0qUbw2@r_91wDgDK}b7c7-gvkkNTH2P3%hMG4kCPX8Rw0FnwrWC1HcT!XlRu?mO>
zY+y!Z7$yio6B#JE=)e*G-mkRnRx1_Tx3wld#P46-JVoJVN<J+W%Sgjulf5~8TJo~}
z&(U)9fL~R(%Q1|pkahoR@U2iYK)b=nGe~&{S82*u(07zJg6Tc_>-{f##5Yc&oC-mt
z7<>$2*90xZ{`Wk<3K}3@Yl14ukgB$Q^XW!K7^4QJ0DCogC#*Rz<B$MiZ~x}uiBQnw
zI6}w|SD{q=PEB@DrXE%OV84YL$*mb`P^EPYw6wx#^?{&|@JM%*j7S78r6Y!pLmYD1
zQ_<7cXb+A`1lW-a736s*phsyPt7aZ`HgTs4p9ySRyKn7lf%Y|00aK0+fLi(IYKg!t
z(xhwx1lYW6I@1gW+pAtrB1wj1k_x8DgEGae22nQ`kwS>&Ao>%7Ao{Y}5+z#1G!IG?
zqH-)XApY!wO_qHQL{&u?k9Ac9*;lG%6H2%OnRc7x&c^+nT3#+<$Q5(BTv~~`bm6IQ
zK7V66m)ECBlXB(0)Ls|bb?yANHEb@c*<9YP&m{!Y!y9PYZpXqzh)orC?f}VOZgmvZ
z2o6(PM`N5v#8MdNd$-+Zl=_?J_~)8*C(iL_e-p3u9_7oQ$LAPd-WB)YbUpk*d>kE@
zErs|JS=fW`NBpU~<8`1iAwj$)h!Bq1bv}G?I=8%wFV5MW_u_k;FONu{>jx{E_$y2S
z+XGhdr!kx`wID~lY~{c4OY|81*X19Q)SyU^?`K6TA$X`jjHhjaHTk6`u2}6Uf1PTx
zy`P3@(qG!O$H&W6ERmwn3m?t&3I0;3TfiNmEHtbBqgY-SK|{L{-wD$$IlKzZg0*8B
zZc}d&`2*7z85Ds;Fn->LO89!{KWon_kw2)|xC=rHHW!GOFN$UQ{95{?68V$pgm&-`
z(CPfCgR_YX;<5`rut;XG7IFptghb_)e@0;jVAi!t<d13wrav?RHORaVF9;XI0l0wz
z1ETCe;4gxm_Xh*VYeSP6jxd>KhGOVspg7sizI-k}4?(J}BdFsS@)}*v0{f#HERQk>
z51SC=r8E}Q^E=F>!Dy&7P^?1`)%4a4EI6vbvhkZ8CKHQ1#0ZaB*D}pWcFu61Plwtr
z<Hs(9px{q0N^1!}kLgJ*28pykk@gFzgunl0urm%=cFM3m5{rx+H*!8Sb9~4-py&8y
zghPv{hOSQ4!50n%uV?19P?*<(nVD^bGR;Qx%xpWP$|YrO#_vWqilAp<-SD9s2ha^Y
zGwqjwZ;0?M0w@kRrh%`Sne8TJ^2ki(WtO34!mQ~;=9h~!T{3p74r4bc5ez2jK%ut?
z?^A4k(mI5zuw$5($*T@mbbWIeYFb_294^r01$rvz^~LpKqN@drh_jw)YCvsqc88tP
z#YXx3G6jRm6i}Jm3HEhT@IaIC_e!`7#_tN!UXz-i5}@BjCZPrw1f)`^5+>6*&>q9N
zMSN%rv=;NBW1!yX<7~)SQ_(lWw*l%7@@J4sOyy7^7!0Ny!c;*2ooV8yc^RWax-W3I
zrcTWcL6Zr27HPB=m7p@Wtzi69shS~edbpYZc@iB03xg$wcZQvXVXr7mbT}{~)sRGi
zWT_@UoR21mn!!~?iU3otriGnF7-<HIMVk0{xM_08$BbCHZnC0`^U5j8B1JHPQD2y9
z%BEv|4F*nE=8@_vp9LyV!k074ii`0=6oUX7vVtibwC^~MN|FBv7NGs7WI3{TNRNT%
z8R9=;1^8O1{AMyYk|}JsiLEPVY#o^%*a-)%n-Uel%2FShN<UgY?Gnr;wA##n30-9f
zh`S1*w}XAAZ3j%~%$No~g=}ZDRBunY?gk)0@L^s6B%tqQL|$pzr}n=FRrL;>JX4gm
zm!U1N)+63}0@Ko4m%0Q&t;yOY3A-ml2mTsrMi`5aHNrwP%TyY%sES$FJRWSEw(U@%
zQGkta+jdx9Pkoyy5e{IA+qNSbkrSt$lTYN8FeU>^15!b3N1t;LNX5W7M+TErrlgTL
zz{&ym-#qC*(4_S^>2C=w*?vI!KtGp}@K?@dfE=VX@Ivs1)*$#7wFbl#m){G9nrGZ_
zy7!CQhA_lRcs0o)Bx;Z%v+Y?rJ7?0V9u(mE0OcLnUOwQN27bIn*Wq}<aD(fH$$5RS
z@bI_G*D7s$)Jn~h2(D_{$lBvWR<!zVh(GmD3b!1rJ9ibElVX)LC1fech-;XofK>aZ
zU=(0X1I7+~tnA1N04!CpgPNZKgTP%TZNx?fv%N7Ru3L@1fzeq_+4D*DX3RBdWI9M;
z1BFaKl3!Ha$4W@L;7O!tAxk1yHPYHZHxF#kQTE-*q#|(X9>xAD3@3ZAPhP=yHx$m9
zAVy}ln$E};WUwWTwP_U}{iy*F>!&Rbh5SB$kG3TkUZqWMp)OU=%djDkm}e8;SRjMX
zV(KG<d|(Z;v4s&8V|ynRB$XD{zkxe8Db>8|u06vj6rDlnIm@FKOt>82FSCDhRC
z$aamR2Ps-Cs@s|uVV6UFZ_qCg<i(hNwWG2?5x!3{)?y$^sDXMaY|F#iv|itf!17gE
zE4JGqjM&zysostJdtDXpRX~fPw7tcIcf!&ngz)saQuW4)Xn`0)ni4HFJUzOUXqnm~
zBSCGHp>lvf$n!)Uh)#$d?~5IcAiK*U0P(j3O%?*%i;QYSYl(>fo_~#rXnO{ytA2nQ
zOoVx~vK%*#)(=hg!iPimz|DZD_0eGS&EJ612Ol5WlWH|4D0@|xxXw>U&U~jPyD;V3
zU>a@mWy<d*R8q$LIamo%>t#Z&9>bxB5~dJL5QyAmHHvy65E$fuh9GM@wn&KEKZ6RH
zb0t7P9w)BpO9aTeUJdsSIL^>vXjXw+2_K%4**_x;stJUs1Lqhv)3ja^^#}LB-sFp2
z5O;nM?wIf_S~+B}N*SfN7veB4L$zs8$Y<3KzWUTJf#w0OfLR-146wq96e6=chjt@T
zOnGKL=2S<Q|BDD}htnhghcU3QS2l5|EWS}S=vc!LDN&CG>*T>HiORs$m4Uk}gM9cH
zehwDYVI&StK|W4;!6vTXhB6&I0<xKEMPvt3i3%K?BCg+JW>E2nS^V2(DiwcD-kb<N
zdUz=~0RZk0gj37p`&f_@4&NxRWkIWO>Lz&^1%vg67s@wL2sj9*o|Jv$`+4{_d6tgK
zJ@QmmY|`OX@_4-%D({i2S+Psya=q9uWVmty8h>~O>;K`UIFimgYYs0JZvs)?4&n&n
zrXN$RAkKXK+&eV`!pq@*_avCIgxt`|NCzT~F_a{;nDnbFNt6h*WYbUGLBugr{vH$Y
zs#zkqH1cEcmu7UfG9~_G3RC;L)r+YZkx%jOM-r{`mj((AT?rElLG@`~1<WN-1l0va
zW2!Fw<77)lkgdRxLE-}y2ACqk-L9)$Jc=+<{UTt6;Xn~aseVVJBZMhLlx&d30I<a<
z-h}$bfZ!Y<lP9Cm-@^zQ3KN|Xpko{hn8~*0GG?s8g$A09mvM{^8Zr|W(MNMHfcwPY
zTn_sllz5{tuTcNZk->G(&IwQQW+x;iR*a<IevM9xFNs`7wGd@q4&i1FlgQ>!E!1`1
z&)8-v5ry`beJKnN4tNoP_hA-F@$p6AJ>jtf3V|}@WrSbhVpR!Wg6}2xP9_sEr`uJp
zM+wu(DXMuICO2Fq?%F5*_%dv~^7e+88vd0l#0Wk|K-lcElb8iHq+o>EDF@U+?9n6@
zW5W)g<?PtElG}*Mq5<0X^g`eX!KxE8g&H5?qjOe>FopmSFfwddl(v^d=Oc7q2(|aJ
zMqa}xM*$aoZ1@bRuTX01NbmqSv%}H{nk-Tj;SQ@!`VH}{#L9gMW-too9>BTz6IqZ(
zl63=<@FgADz{Sv@k$O#^;S|PZddNxKu0H{fRdBmd#O_*ZoVL^jUAwvn`5LjiZ5dVJ
zW?^_O_`;wa=J1`3FOTn)_*(Jx;w#`g4PP6+)A6<AI|C;mSf%oIxP`P8!+S(w-XrRl
z6nC<&2Jve;j){vtoc0q&Cy3N$0#*>yh9l5dHQaz*MGQ4QjMW=KYtqs1+ySnPEVR$+
zg$4O14J%P(J9s{0UnyZf8~+e3&M3TFX_#nTub|{8oL-|CN|s2;{6DC{DtMYg@1XFH
zK`B&7>&mSf);_3Z+Zm;SsU}7)v4sgXXG+`a7^%GgpgZ|6GLuQ;s8121B1;DK(S4_&
zhqft^5-?Sf;y(P8fFX$#tC{XS^|SPns0bE8DmL4KelHuw*?Q_nG7eqTI0XZHF_;?p
zUm89mt}uws58+RBuN5pttO>Rr$wOzNmclYKIida&`J7Ov!3n*^?!4%?Te@05-Qxr7
zx1uLnQ(Y~k^%YV()0C3Q3N)kb75s`n{UHUqTc-PNL>q7mL_6ef25G#s{^H!o!Nwh#
zq)ydPw9p4BYa*669Jk;hHj(=BD-xPgk3vH&t{>U(8O9V=km(6=;gy@ZESrACZTbzr
z=}*>8abZ)hxGCx0l&)=ZjB6^bYZ@`Wsdi%1Bwy34tDELs({w|iY028ARkt^-`)1Pv
zjZF`)YYN@b^!S}k+wW?6@$RPRJr+yTs|@xe{z-WEqLE2!;f+e)gHIY69Z@6UHvJp^
zv61oJA|vqBLwexob4J3qCzv^J>Vfbtl<>neN(?mLew`8c(P1O7-)!w33>!7iFTKbJ
zEdQ+;_>&QMdXpYF3J)$;b~&6=^-9?y9~ddk$MnF#KQMP?NPon9Ds3+90Ou4HE7mR!
zk1Ru)#+Fz_O05|)X86yb99B(&IBH~Y88QLfLutg~uKN~<0;UZIG<OAPu?64R_=24S
z*9_u-uNPk{zSHnU@44yt!ds4;fiHY^xLJ^T*}p_T%+M7mX;~u4pi}>9BF6SA5TmVB
zX{v_4kyQ=dnx!B5?$i7DH2Rp`cXaB5R~iSCI`ga3fglBT?q{&Q9aw7{W<Vm@5!1;J
z+s2{C8J(P)LV&z@$s@1H9x4=XDI?CSP|u(5lgH&lrCo1&y^Hd1jY2Yj@Hf<&vOw#D
z*aWRXHRo#@yoTawIC?6rZZhPh`k2#at?9(xZrgq*6&d1Y+8Wg0*GN9mI6E2gXdlOg
z=GnFcw#$UltebZGha`|7NhQPAVIY}zXZU)eUzM<27?T12Y_IB7xSyfTZY45YZK;Ic
zquOHeVXIc*l$0xsi!(?z1S9!BkcHC=_hrOe?jsj(5*FYN30tUn+k{LXN~&H<uq0+}
z)sx@{nJvka5mryW#VBdbB`wJ-Dddv<MoC*PX=z?bdoFpIQPPo1T8^UtTf~?mY(<<6
zs9XX2_r$6C<%M$i>?4i)H^!*&OedHsLm`o9S{YcS*7^tgAZ|xWaX2$IUnz2-vg?A8
zsYncA7)y!9;Z9l^k%SccHLJhjc!M=dg<zO>!oLcBvi)6&?@98Rb=vdw#qG8njNj`p
z<YtDCpie$f!6Bza+;EGd>5V{m)2BBAmu%wz8jg_eybGnP;k*m=oW;i6c&l}{Rgw3<
z2?$`7b>CkwI7W5y_|>b!HN>cnZW`4w92PqRRIU-x-ZIy+<wkDHa(>G<ty|U$TOPG-
z*=n~~w!DT-1BO2;P159hDQrjhVohE{VQ^s5G)-P&hNo-t^=6qFntUa5>2=k%K&uIA
zvH%?}#&;pUCHUUJ##{;Ch;JF<H?f160R_Q=rV`^?Xn3}}_*=@9)*9WWDBg+VXilFt
z0K-4rldmK#5$<j(k!w-y>XYnN0~B+St5v!cD&7IYeKqtesk&lw8DX_c#ikJv<WtKT
z>1fU5#r&X+k@<uQK&0y~HXsmJa4oF(mrThfNR!PlmJGJ&l?f9O0e0F^VC{gRPkZoH
zBGG&UcAyV}xChofgbnK+6A+*d9Y$-~c18`BM%7>u{v7xt?j}zuKCD}bVzXOOnl?L6
z+gu){Cw|NltvI&n0t`&N7Efq8^R_^SNdxvU?JSY&sn9*(j-Q*HHx1>!gBW}(`T-3t
ziS<m6EJ)xEq1+|r1k5G`tiU>5%|$NHv&cb^R9Z~rf+H)*+~i<6OCya!P+*mym<@Qr
zm6OXdT(Y1;Rg+iI6$-!Mm$e*wlK3O{F;kS=K2qm~m_)~iL#AepLb|>y;DN`mRS4qt
z7ikH>XF|2qrUuFrx>7BwL8%s*h_!Vdauc)2>1<G7k%1foVC~=v7?y3STx<l$rLr!K
zgSS<k`V~+&C>8D$KoQ2g3*f+G|CLv*f?9ewn@}<;xDrSVT1j-U8brc0fPk^(AHNv}
z0up_%ATy}@m|YP*QUkTRGbVX^f=t27lWZa|2#vy#MfTLkr!%_(OboOn34jp1EFZv_
z!2pOrUZAorW1_Ylt_s`X)vFf+xt)>TWNEUB4#=AoxGIP%WL=4td3~g9tA~|iG~L2t
zULR0Y0Sjo0j*d9`NAhPdoO_#KjH9D0yYNb)P({Ml3eG89O+~*_V?O4PJE&d}gM$Gs
zW#)*i)2b5596e4(7gA#k7FFR?N9_q@;aJ1aXT$L~`dOs+vtFMh$h-m>uO{OQ8JO)N
z+WT1U(0($~K=a@THc&Naj)01MS>A|D$&QHL1K6_9?|~rGaAK!;#C2Ud&ak`@;DX>v
z0_Ig=%c24lfeZzG1gz)BCSfY|)q=fQg`oi5t%mmtIg4XJ*lNKw0Uo`-aGq{eWs))^
zSW|q3=o-b95E7BIg7lDVCf`B69xV5wBG#p8e8S<SV@rZK^B*TdX#7j)Q7~u22exAo
z{n}vAOnlNYGsp(>7`-=-bk@*ng>}GbuKrR`20$AHXw~d)3dA9p6~#3I4I-$9?q#HV
z-ZIq~DRW{-caZ9ooQsPL{Vh2bgZkfy69T>h!6w6!-v?I&_?jq@n@F_+r3<e|7IIzU
zg5LzO3MR<Y@U+69REV_`nDS-bidbey4VdPT2g3F+pbf6J4q2qNkymAH?zpXKlp+6w
zo1o-5dGn&h0j%)}=pL~^sA5?56A&XVSQ>`9@I+?AWt0>)g83Y2z#JQ~iY`KbnY#v5
zJ?Org3i5JYZwH4yz~`a{hY*blF0}DxN<j1Uc32&HK60Zq*=tT!82)ID%C0$8AqzZQ
z3S3UQ-PSurX~i_@qI>UD_`e`R0(*ucxYWRS9u~pc(5>jN+bFMw5TMIF#4h=9bUdde
zbXPB|DIK0)1DS%(ABsf{HVg*J&y9!R-v%KoMN(HOyEn*`Q;Si8T2|U{wT&@TUUfBm
zP8?t(1xUyB0u0_?12t#OPWq(Iel|Ay9JMZ4>r!cQP=iIFG}AkUL0v4`-`7j(z>uv2
zYK3VWlgSg$LBfr}%(cCMR*4tPz`Re#G!P_b2LWCJ{me^%GShx18u=2o{<Z;_DolR|
zy=K~PdLyt*-5UX?r(qzU4q46(Iug;H@n9h@mPMTB;3vskj^z+x?syUAju&C>cnm}S
zq34WA!F>>P7@9EP${5tPGh{3R!{+B`{1}7Ub`Dc>A!Qj8ecDo50PhXZr57($iKN@j
zGA=bH;{t9Yk593IPXRrH6&gEM;f~Ydg6rq>SQ-LNLTmH}uEfpPzOLQ%V_C+eXXxz<
z8cOLF#>Az_E3-uYps%aNUOyw37(?O-Bs$Ko*pOfGPY|iFuZ#t!L<KciF<8+W6^N{`
z(V`U*8%U9MDXW4#=|4D-b-YIUg80U2(Rr)sTP-etwqiE#yx){m!&6A$hw6JG#9n}f
zV>dnEp>V%~j$Dbl;nn7*EqU|_5>5x*rG${1lW##0INYTq)T1`=w-<6`KDveS=&26w
z5c6eK03s(6W0{)Shgmj6q&}s!7U8_CBY9b#!CBpTS>pz0X?a<7gR@TMWsM)4^;url
zMT4_G&&!%%WVwm>*l<ao+iQ2qeAkTM4ScaiA44`I<k`(qF}kd;koEo8<rsxLsUIdH
zdkksXLAV}(2`6qN@)=|TtV1PgSJOC%EnJ^yKZ?fy&c<f;;|4sO?Ri{bjR31j-}OB?
z?}@87T*Jeco<C$2FNLz{GqsK%R20BKSCBUQyS^lf>s9p|`pIkbn*5~~F*&R-lmv%8
z^WXsvccKba<HBWO=(LfF6Cakrh|9PV8v0^zda;@Q`QY>tGySu{>7`iR5aH;`xGtQ*
zJqH3aiMsr<ekBTJ*mO9R({~bkdWMLVq%mD8UMXQu8I(bj%z1MPs96RtkP6k4N<0;6
z&_B26pCwS;l)p7?^|aB`u8bv%lO@U04Q2AaVpe)z2`jy?G(@HMm4&GEhGAkXIebHv
zW5bB)XekbMBR(8|RrnjBc{Yr(Zy3vMsIhKv-+ql-hB7QZ203H#hdat~I?~_>oH4M1
z140%*KiX)@gqG@`W%_41T2#3AF$NPsWT6?S2zWER5dlC5!Yl!JZpcM@lOLDA1@Z{H
z1`KGZE~ilh#(7fR{USyU!{r7`h<j0m2deR;fx^9@&hJDbG!ayU^5z%ia$)@L#N}rn
zT@JxnPKZxCOG>h9p;@)4EsrBjZK(h=O+)|;EB6a2rO~ywjQMr~9?B5$PzEcGt63;+
z@%^j9{k!V@sDp}w(+u%=4+Up;*Pi+^IP9`#tzu+ME0ud#!??Mu^K?Kl#&r91#&a{(
zrNffdQFZC?ByO26txAr<?}+4R<ix8n+#~Tf3V)-i@Kx&4G09pK7@PFqw<b9bzwTrm
za^kfp<iX!K{MBhowtwi^_JDDJx=OwF0aRxas*SOeh_Kr=%(NIl{pDcmm@5er_s(2E
zIyI|Y#3W#MUKPeC^yApk9Woq2EBUBW3wci8$b+dVo5w6AUngmKv!#RQH*;heX|i+(
zd=uBZC^(KORC#&ycHAl@!!=!UbHR%p5i(dZTc>#pv^|Z6$cFFIEuHL!JP)O*VXk3q
z&H0OM)fsL5X!|3qEf=-r)J-=X0wQE#XQOBO3&6*OndnJW=h?~3qA+JvVUm`sfd%Gh
z($E+(pNk|MV~hZ;4P=wWa6Ghq3F3<s++BqApN5V3q@X+slGRIhiSxpf0^*da!WCq&
z-xp*F#*ll}0-!`r^fJu>U0)$R=}k&_m6{4%d)~oD!1@y_1EAUARcI`HE3Qb^m(h|g
z)AmE8VwNZmdE|@h-Xka^QN!j3za@uaSM)Q}K#|>LsD*Q87RRITO@j*`eADo<2kA`+
zsXU1UTL~gD3BD8Isi{{Bmw1mtUyQ*C4;Cs3Oh0UPVTU>Iq+uFKQl?)4Hgw#;21=Xq
zXe?yGBMHVsCv@qOc3x;JROX0)-=@&(FjL_I>>GB@13GY}+R}&%p|r7!87LnJH?nbj
z%{Em>Z*5x-EfuIFS}9ON`hBy+y7hrMaJd;lgd|!;gaq6KaKS?;h!3S8R1PO0%2|B>
z%#c<8NvBHSD=lc#Li*UU`VB;7(sjE?(MFf)iC`kL!#awz)n$Eniw6gHd<&f%^w<JO
zpNuT3h3uiZSdIi(&&8u%gX`+KV78m708aBp8Lk`u6jSyc)0CF-tXUYOlL`Po*=OaS
z|0ysgZjOU$xy4rR)}a^b_l-7ad>;^`Q;bRg_-`rS=+SN<JQr8D829)h*()WEg?AvM
zQ^P9(*^5pDLE6PKacd~X^4O@bYSCQ$dz2f+ohYGC*|`gCqXj+k97U`~<atC?zd9dm
zGU21Yy~ff$H%h#~VtCyxo6qV%meaxM`S0iDvlO^7=I3J<Wa|?)>^7S*ZFm|0dD+Ru
z_#-N4{Bz3{VWFgHQFH_ctTdeQ1(<$BJc&SIZ&%A?pRn1DJ3HyF-aQ%5w%cB_!BJ7_
z(WK|8>t*rV^r^>ON5*Og-qPQM8LM{u*ecD$OpL`bJO-|ScpZYUMe&_9I!GOF#u>73
z^}oo3m%V;hqrvBCoZ64sX{B{}4MrTV4RSj&@!OC#jM8uy(70;GfU}W#2dck_8?!k6
zHY$R9dndAy?<co@3cSXt-7olDXcU-?Lwt;OGRTv~v+g9t@TwIAvT+P~q(Rw9zj}#r
zYN~NE-f4+IPu`7PHGv+Ntgj`7sNYJr`LSPexcEO`%<ASt7_Xk|?S8SIUt59|?Ljv2
z!e}j3egwoBxELwpvnfCXzGNr@qf;#cXaoV=xAkpO`<YgmOiCEtAv;Y?ZL*wzsC*tF
z?pu{ktX>qjj9_+Df+?K<rwtk3TB9is)(7<&?RfAq1^m-kn-l2FV8tr6dH10j8zKl*
z=)ykx{>y<q#Bo^k$IvKa5z;Uz5xPj(e%phSDJf%Gm6XVPrt%)+@ZTu^p5bt)M2<jy
z1-<+YOJoFw-RD#y|3%9tp>H@`l~N+VGm79zLt|zAUhAcdZtX<SccH}tDG)GDC|57W
zN)#7D?Ax~yFIK^(@*ZYy@UjAY8iH;$jecXjfPKV$fSWZa1|z>$GxUflI{Q9N+xu$A
z+))Grz?GeB3+rxz5Cq<r-qK6V{L3YN%u1wn)cgFh68SAs4ynNz7!HFzVYPR{ZJ1E{
z%@EP)5H1&^{D0B?F|rl?%_@tH8iX(iI2&Iq6&hmdurhzi4rcpaOexH8`98J#9?>v^
z;8VB%%RC<l0J|azqN8u&0Te%sO|cm315?YYQBEI3=>0b^W{HSQcT15;WO}D$S4VFE
z5B(G-bn31XT8bIhN3jYhM$mG35OVTj#*I*om}6#F#VuAUEA3)bjuCgD1fwv)goDz2
znR;f#`*hJB7uG=T{#%oFGji8!cFmexi)rpP)?xB?X&19|(G_8TC>a2On4#x0f|T)F
z)A6-%X&D<|8yGokZG5dxDd;o+3@VfGf4)eI2fBCO?z4X9_CP*7`RYJB7TICESQP8u
z7kF@Td%zP*8^n4iS{&%G6@XM<=?j#|t50?aM7O8;mf#Jz#e+&&DWlpq8yT0KgoY5Y
za^GacCJrjbQAVM!0vV+zgA}p)?1<nHXt#quAq4{l<r7WXLx=5{90LIV$hY{=+(gHZ
z`OwUlv46*Y0);Olu(+t`52d5n)^b0i0&JHs+D{}6F>Gpmuo(IFP*R_<M;DyJJP_#^
zyghrh*R7u{N*fc3vF}5roR!~7WXYUv(0w=#=~GYqjaT&%X=<DsoF&aMnrC|!59s*u
zj0<SoSZrD%iA2Dl<-}PAYUVbm86VxtP5{g_h$!xKvi`6Rr2JNBpxtWM_v^`EWSj~E
ztUs)az5dT{TB{JP#RjP%L%EM%I|&Lem#?O;rJ{Z$>udJ7R@3f}(EV`|2N@CN!4FOL
zO-Zy|T0iOhg2SmGY^&Lx_K}P8aAOw6<d^_*f}-lVX52kiu)=?-<T&PLU;7x<!C8Zc
zSZUX|kB@ZsRJr4o?ik*hGIH2{@~Yn&g57*NQPABEmmpQjbNV`p(W@G1m^=dy4;jIU
zeI2DNI9wis0V(sbNR?cMNV%_+Mh8~u8VMHqp>y&mw-!?ZG;z~+-o;sDbToTLx{t#U
zlaHWVwY!g6y~ozGF>Rb25E30<W6fPAU!7>2Lh-3Aez`n7(cxvmS@MKL$21naLLQBa
zSJQpPIR9tXv!vN_L89YQhTxS3f>^Xr&Y0^)$1#7<Nk+p7%N9aPe4a4?ELsa)ydJGl
z1pvTe>FsW<zYp%;Fe0P;7!^zEJl<OE|2s?X1yB52(}|Uf0$4INYDYztF@n;r$;2Yj
zj==QDV0vo6EMjP7Yq1QAK0^fyU)+5;V@=dd-g;5_wYvyh<6Jx_v}^D-8oY}hreX{%
z>>}o}Umv`ldeP5z4%>T%Oj%5O&3)Y7hf_zsimFl({kUFm>cn6o0CodTUks)>uAl^j
z>{tWiLF12S7YI7!EReAMniP#f53~fYPAs8uV6RSC`PUvogYhK>LDJ0^xFmw~_>#QS
zgq#Aw0rs_6V3nji97-?Mac8Bc*-M+>U7lR=#5V@lz+!*`@O=$F6<|+Un>dJQ`dv7i
zfG}(wj#o3UYobG*nu%+8B^1^b$E#B_eV1wo+w;QCTo}dzR7RatS7LXjZzp<RMkyeN
z=mrzrsEvXwhhC87&<lW&0~|V?Z>-M-O|CHGjHZ!70FF)c`UOK80u|n`vOz4{dj&o8
z2H<$%$Oi_x0`MRfM{q4vh71V<4{|cfynb-*MrC@9x@(Wmo>1m3k+E@{sxt3~JK(JY
zxnu#j>@Y6XqE2H4ZNVZK?QS5#M=2tu6e8tDx-mg1<&;u@l$&H&#}}%})$!HzrpA=`
z>XuPH9GfDQ6xH#o$&B8eXc@)K=02N*hn4E|97wWVv7M`vt0|i4-nkm6?Od(9ECDAZ
zZqV#6)$Knk`7YHq_%q3+Pb{MjD)WE1BhyXpHm&4)16iQ3iECdXKHtN?`d!HQMQRJ!
z#6o1$-}UP9S600I4SfPJy^4j+UJ5gevx1(Q!dj}xboaKN+~cz~ar|CTkwTR`YhD+!
z9;yAW*iWKlZv}h5T?dIt?{1B2d$0uemL7e9YSH`b-7O#Y;oQdYRY_*&;pq9hSg3je
zbR^_4QmL`UY06P*@>V>(xDpwoH3QuUUPp#x{ZewvceJhg!bCN7AhB1#yDR36p;!H{
zEPZ*|(}r~iA_qJb6604USN2_cYw}irqf@ZM_Nrb^H;SPYLBhIW__B9gOn9i?9befR
zzjcq#g>P~tLdjc!a`IM$X$P7p$8Ux5ai#Y9tz_Dv1(72Z3yaC*TkpVp?D<3nk;iI5
zO;eEUh8VeXWo*aJTYXE+ok&zL%}zlwx(z2AY-BhLNQsWw@NgYYO1~zjTtlEbMr2bQ
zc%O?>E)$vxWM~uF0vLoP?fKPgOW>hF?bRiu;ah$`>&@CV=BA(>)!&Hsq-wEp@Q5$r
zz23wOJ0`oC4MrWVh1uOm8wy;3x4r^+=aK<3R_n`yp&#LQn@vKap*9u<8WMFj+8k1|
zzPF(hQB&Qm*eCRIS^e~0BRg;R=5i}d@Pt330_y{F$?Y){6mX!FCJ@GL3CT*PLfc@B
z^BM#>G{C<oUt$Ic|6DrY10Y#O2lr4XFnMUuNDZRiek(j;)?R9YWs02hpsc<0L?aw;
z)~=yNX3)*Nq5doT>fHJJik5aNvDcQjNtA0Xu^sx}P$DCk&LWmvrSCIrvG}T?n`}t^
z_$p<7zX2e(xv*BM)txH=QN>Dj*jB|?b=Y2suj;BuuA*6>m!@Y#j#nf=nMY~eJ6HMa
z>dsaA_8$c$SZ>C<DlmJa)OTk1)u{p$2H6};O)dhW-|2&)I-3jaSzb(kSc{s1B(1?W
z0R(syDJ`nVX||aB=yXC!<fqC!p7ddclQnxSv`SsfLV0tLTOG8@x?610@cI%R1xmoO
zD9Xl2x#(gfuuICcrlicC0k#=U9UlE3D!O-n`u+Hl`U=nkGr4b@hDWRAvb-c_a$+|U
zKu<3K3<|&t0YmaoU`R56!7UbsIsp4#2AHL#Op665wpa#8@41lc2FXIGz8Yb2*Ca{~
z$_5Pu(~I7Z$0(eSWbjXn=mVY`S`uGEr=69LzGbRaw&C?D5~dhO<*!j9C$zd#^?Z1I
zEIEOcL>HM#qVW^J^5_req7X=@<E6S~#0B}-v$|$3RBnmelt?ezRTmjNk>8p*z!$|Q
z1aW-#!jA)k-b)hxg}~z}-U;yujgDY5?Mo8^uGZk0L?!Zxw#jbRd($pLsEBVNo|GZx
zFO}&DsJs*<LJGQ*YQVQ)f`h5GCgi;UMmc0(7<m#PUm6dt;S;SlP=h5?<f~Te-0;#K
z23)#uB6pn(I7XkOP&2UjR3m1Zjm`fK5_2%7Ujd0vfkZV!qJkk&Oas#4{JHBSM&%!X
zBn=%K8e+bPZT*x9lr&hR)M9ciB03{C;18uv`sD$L1H|BbB0GCw1jJeOsd`fibnqgY
zL+p#eGp2KJOc8exm|)sn0H~`|7zSM}m-)&-BUyE*6^L!P2NKTY!Kv76exrQl;2e<n
z*(mQCoC;o}j>^MZM;h)c$$^JMR8ck-Gd;G+bqKT;=4v=>prg7&OPbbk2|R0Lof#*W
z7~S_Jjg{EP9v~-{*G%&<3l=Qlxhi0u$&IMr?_>fLxUO>TgkQk0%!N|l&%Hy+F46#*
z8W|{Zh<PoA4-NACorAItEYeN}to)A-5q-e_Oh&J!Z#k7bn5=_}53nRtIc%tWR9!a=
zw>&i9XG;J%I*bn&qv<lJ4#*KIAE);hLvUcaCgN5gJ?3JjW)RFS{)JZ;Q}D$GPU6v4
z9Pj$5Zo>=y<bs3M-fI#9bGs$zRes?R{OVuZ3O$eE#g$x=6Z!maX2ljXZ#JmAOOcZi
zy^o?dYo5m!E{2y<zDhB;O6kRPDmP4@!i;&4Gp@)JU(x~FsqQ1TbC`aSBT|T^pu6f9
z8H)n$c7eO-6z_&LX$=W(vTp@u54#Pd7uPW(rDkxWlWBv?vhgw&$At&I=*AH&E+QUr
z!3hfI7B&l`(Ck9v+Uf)tiE3&Le7IbHJ!{51S?JgRU1y7v^k;CsH?xQ#V_D^NwE|ld
z`bPFLA;c=CiXzt$_=S<nhXEK@RLt60z{A+Z3=}#aaMgK$;fV<$p$LG<MByUORdfeF
zqJ(`OXi}Y0x%7}UQm>kaD3u{wT7F!=ogn)0&^EvHAo^q~Tw%ZR#F7oM<Sp@AI;>+e
z@dm7Q<NrlM2T<11=!1MVG;{nd#t{+IY*fGOUu_NXh7RX`tXr8eS9IGp@+7%>MYdpi
zMdxgaF2w&P;$LzuUzDRn9@CTa-M%8vu$s?MK6^n5VA*NR(<4m}u-gwx<bK#MAfbtK
zcqOutRS23*Z5-MZ<tP#90!?jVH6H+=PMZ?h#G2g2((YF?hiv@U3&<YMlRexIz2)VG
zD+TVH*D}GX5U$b75Q423wjl&zcU=lQO+B7(U5-l)u(dDKwy!2PKmAE1x&@lK8z
zx?mH>CerUdEhWo5+3|f!cqKIffZrg1Ufro3FGR0agOyFroROYd!pUIQU47BwN?@`Y
zaN6i)2h))`?<y|y3W1dzD-BM*mzdUVI8eWgr3lZRl)p0w_Y3C65&pQ>+k+bexRuTa
z@n#HM6v$_iWy4oTo}@5W(MB%lr5ey=;i~POQ5nr62Ai>-%?E678-~}$x|d}*JTTB`
z3+@fy^Bx~ht^<G38HL&eSeX8CYnUSJ5TREfxs~8J@mMq6^1BMVhk-Z?fgW}McH?3N
zJhtd1+?7Nl2#gc9Ra~Sf5`q)-3)b@R-XJdSo&zGgHL%QWyP<=_I~&+=^il}QlVc{X
zGQdGv4F>2X1*o0sm$NsD7s-q9FfZM9xt_WNQ$rB0Coib!7*s4X6YgVPN_NLEM)c?l
zJsmNYDh5X=_S;qW(Q^90OG@<*zzlEP?M=WJRCm~!O4TrfaC@NtDGpt?KY%9^nSX})
zG%j2haL?P0U-mREd(!|37!ll`Cl``78Xm(<+?-!bZ?Q247*ig88kh+@$jWA!o^JWS
zG<C1zX{MC;^+diC%y`^cX6w8~sISJ|WkyqR=X{^mZ$4#&>$hy)4d<HjJm(s}BRGYY
z;9u~tf%6V|*x*47_Kb~(e3jS}4==JS^fY966EgE^BOb@Nv+$X9+wRzR$7}1_zlj@F
z?RUJs4krMdOH;2oq++J3rE7p#(s?m30mv0|x#u*gJQu5>Tzf8#^F#O{)~xUY{QV>3
u5=D4PN@-GMwury;=9E;)tYm1d7c)nX{-yAS5WiW*HN9R9b|A}W+y4SxgNp3{
--
1.8.4.5
^ permalink raw reply related
* [PATCH 1/4] Update firmware for rtl8192ce
From: Larry Finger @ 2014-09-02 16:00 UTC (permalink / raw)
To: linux-firmware; +Cc: linux-wireless, Larry Finger, netdev
The latest driver, labelled rtlwifi_linux_mac80211_0019.0320.2014V628,
has updated firmware for the RTL8192CE.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
---
WHENCE | 1 +
rtlwifi/rtl8192cfw.bin | Bin 13540 -> 16192 bytes
rtlwifi/rtl8192cfwU_B.bin | Bin 14800 -> 16332 bytes
3 files changed, 1 insertion(+)
diff --git a/WHENCE b/WHENCE
index a172f5f..4a51bc4 100644
--- a/WHENCE
+++ b/WHENCE
@@ -1922,6 +1922,7 @@ Driver: rtl8192ce - Realtek 802.11n WLAN driver for RTL8192CE
File: rtlwifi/rtl8192cfw.bin
File: rtlwifi/rtl8192cfwU.bin
File: rtlwifi/rtl8192cfwU_B.bin
+Info: From Vendor's realtek/rtlwifi_linux_mac80211_0019.0320.2014V628 driver
Licence: Redistributable. See LICENCE.rtlwifi_firmware.txt for details.
diff --git a/rtlwifi/rtl8192cfw.bin b/rtlwifi/rtl8192cfw.bin
index af71968d1a812293c5c15fcf4eb178660c66dc48..77eb1ebef5834f7c923c4ba2792e10fcff5c2b39 100644
GIT binary patch
literal 16192
zcmbt*4|r2mw(mJ7Cuv#=O;3yRN1+X=%Krd@UI#SLf?@|Kk}5n$3D=@H%p1a(ejkHE
zj;$3*M>#<6+_^X)5>ybi*KazbqjLwa>M-NKYTqb~_q!e-0UT+wi$)Mg^L}febCR^E
zbKkpYlfBnod+oi~UVH8JXXoH!l6|ot3B{vaca+^E2rWY-A@`p&=at+lm8HPh{-E!z
zODi_;cB%TjAlPM_B-kAI5@dWzg6zz5$bzFF-{}yX_>}pl#6JbWsT8}Mf@|2&AueHv
zyS!|OP=-$z|8&yl75uZ5KFfySbCMUW-bvme0zN0Ys638;UgIJN8u1B$;FV?Bj{o!W
z@|*=I%Z`Ep1MR3f2MjEtw!FOj{K7#l#gUg^P&lZ#Bp?6iJF`~LRbz$>yK-dt)uYD%
zHgeQ8W5x+G{=<BQA%aKn3bzOWK@$!LhlLtpjj&TVB>F^6)FrPt4kcacu$_|s-QmmY
zzy^R5=vgQzIemX3Tq8_J-#Y3mFmVVkF>!_Xm9*GaW;-SEe>NLUSF*{Nr%T~WP(0H`
z`Ujxhk>|9&shnRhps;Mj6+>KL(f|D4>tbQNVRW(~-grZ@QFqrkKCfsvcf$R8FE1Q(
zXB%T%-LH#|jSZ1T=B|;>0!94NeeQK}U>4;RTBzTluhD9!!Ws8l>|9j8hT$vTFt{No
z4Q|x0XP{I-l=LKv(x4ky{>h=}lXpDH@{bR7Q(J6nl7&PX)Ri5<?2u2he3Ut9q6Jhw
zmSj#$wsB0d@pJTxeop=P5G>B3G_AAw&oLUp@nxLle>s$9UYw<S%0wf=hrV_`iy8Lv
z@|ieuo^dCt)7`iBcFj$lzU87@zZlh1QN1^+r`@|N8o)a?wK3V~)-Oc$^HKd9_c@gC
zUBOsp$>*`=FIe>Nm>F|-G<Gzci){@mSYB{oG`jU13dx4Y8e<QHq^&CgiD)#ce)j!X
zzh#b)4Y;2JH>w_vX^|!t_XKTH)%JLKofzN+PibJZCl#phNS+Hdk~&I@yrY*gJs?N*
zz-3ek7HE+pI!a6xKp`YDEpl4->X$|JHiw-Pjir_OcP4@|4S+vAaBF3S3oR+s-qq`w
zZFgFW{8gW*MS5B6LMrTEFDliaY2qCrJBz#hMeQweP2M^&EGx5j8N~CI^|Lj*JCtVb
zSh6DNsUKBX?=I9Le*?wC`1=HZM`V1w!!XXLD7=Tizk(jB@1oerq9Gf;JMeAC_XnX;
ze12>oypQ5v@OKD*A2D}Wa7(jo(rm{Qb(@yIxcr5>)_as&-)~+1Qk^ENy1yv(LSCqN
zT(Ti{?M29cmB?~x{tFDPmt|Yev(VsdZ6viivh^aS$%|t6xD9^`u{=$#38h%5G=t(l
zFfSD<ooJ5M#oXXaVW+EAY(LPk>AuHT#P9PLrHN^)0zZr2=RM|)yUUK*!(eDd-0eN?
zir-gue1LMx$wXk0Qhk#;AI-<-0`YiN>k8%8ggS%zruP>PBE)=-I0lFYR3_-Ld}WR|
z5hzt|ea3)F`O0h|5wI!MjU63ZTHQ+Za|wu#Qxks=X;6O}ukhQ9n#9yVe3ZYavqkdp
zW|^rA;uYRwyy9f)EL38=;$rGl?3!+LEMw}`*bB3!GIePDsz4qFh%t2#|I)-)Loy4C
zZnJ<ro0F7kj>fh|aZaK>+t;di#`)P->S%)a^E`!z+NZqfFRCg#)aaAHx?L6LeEnHW
z9Uw}w(^ckEwd!BS){9#Me~702H+kdv{*k@t7!U`2;6G5I2ln`0MfE(<!r!5{8V>#C
zt;WBwOzE@F|LdgsM><Bq`{JI!J#kN+6ma0v9=uv}?BnM}b3BjlBM>s2qC7f9Y1K{@
zoQ8K20Aux1%#>LBVv<+!4hV-hJtVP36{$rPiMXfKlftpIDYp!EgXzJk>(+!NWm^3@
zDQv@6P6uW74&&_D=<GOT-5+L}qd@ncW8m4e(1SP$5?l9RTA6mj=zW5)s#K0umB*Co
zH{#`GIvwfvaP0VDcI?FpnwaiC5X@gx(Thnb)vM@;dru6mtPpV^b*$U2R2QgD<yNn1
z0}^jOd39xl1RA6QJ_L<R4?d19q{j`CZY{DysccrNf5!_emC;9%P)mbK10zcVlRUOy
zRajJK7;Ty$DYME_&^WiQRY&)M;SAimcBER`7bpP;?3?%W7u%bmNlbZz*!~lAidloq
zjx~f>HiQ^*I}GB;#TJ5^l}D!~k0=Plv1aJkz+9|M4-Aaa7UF2+1+Q19kRFr)NC1bn
zzeAsxj!glp-qkyw>aJ7Ih16g92FA<V!~s#r3UD#qRc`Ct-=oP_>H!ZlqMp1LT0?p0
zhW+9|E%JLky-rkcGH2(bEq*Uk`vK*Vp)$q~ttCk_Y0m;<AuZ<ae303l#im-mlQgDd
z3)l3AnVXbAu7-v*Ej6UnNwP~joTc$2lg3h$hJ@BnN=+?aSTnGXl)4k1-oOAk2mv@k
zn&h%Bx@<n?hlWndkuLN$?j8(!9mLnT6R`Y5(4mQkpgK)aRvvnIk(*VzC3hlF6e=H|
z(bg{J&Z+tnI1F?)_OnEwfcR~PaLnDt`xd&1%|Qszt9m+?0$-oFf76dO&O^7>tR$GS
zE`o18V8=YLzcirC=~ej{Ck7cbiOKHxDDMe{1SzeF6Lr73piX6rM(xL9>H4&{j*`|#
z)`_j7aOt@@Dd_O`l<N1*b<B+XPM8^aOPJYQj6ay9nmin5x-J|R1Ck+bbnm^(k`*A?
zsYi9qzL>e)?mqj0JvD_0J4Mz<vMQFGtxVm=h2nsIfE{Q&&~Tumz5_Pw0r7xzz;-}B
zU_anEkXJuQ(8M=GxX`MjY|&=i*VFY{Z}QrxUOOo{6`zxn)9^VZd0qTkuYMb;EwT;H
zU~wZ$N}yErAzI`sNJ`{Oz0MXG5EefqBOxq(_#v?%?bSyZXqRh|ZbIwQ>l}fCSenqF
z#1xP{ibF@*aMI1F9J_`pGRY>!z&52~t3S}hthlOBvWH`A^(r7Azn+kt2J%r4A@^Yn
z1a&o*l$BHJ{E68)mQS5sOj*c4Dh^Sbj&l^B3advGXV5YQ*rlU1@%8v9w)zeXIMsU$
zSTis?6l24w=)!n!>474QYhOfWgJw_RV8^F<b?EIIGt2^)zNWe5a48^zS)5B=9qNR|
z7%?Sqqp}>eE<FuCO-{7Q63w|wZ?ns>H0eDQZRn}y^P)sn!Sa=+h~ZMe$VYFXk?By<
zHVwtdd>T1JXE(^J5694GSJt-@!M>XlIxj;yxNLOfbvQcg9dd`QL+TJagpQ7mhK|M#
z)}c?PD+`)CsRwKjSy)_Dz#Sg>$|{`E(}olbNW59%&-3aA;@3LFd>ZeQxTJHp)%mn;
z^fmf0>O)5(Bk^DATJvDGDkvS@l_(9&C=DztMfo9*EdU6bh+jR2%%UXs{MIbWa?iU)
z5q1txdtOl=BJ?!jcc{Tc8<3w<R~Rs0f2#f{5nR%9R;@Lt+Ld*FbuKT9cIBbrxV~sK
z8SuN*NmLGwRUVqEUPZ-pn<)33P=|pk+MCp30|>GwRC^*Q^?YfVT~I!xb|5LZ9(tZz
zXCq5si)O!?!vN|~zrajR=3w<LhE`E$*coojG(nPJV<`~1P9QKYV@-M_!J^&VW_Bl@
zU`pj{HB$v&&0T_8^Oz{q{8|!f+GKc?H6M2QZwku2X;oe?gnfze>F(*hi8YS*+e_Xr
zIsDBUNBflbr@Vjo8}+I#e>j7uT6lRDUY?1UdcmR2?J^O?u#gzvJ$;>UQJs3)FU~W;
z*jWO%m#h=iVW<5z3oaXQl7w|ag<hdwd`WJ#<HCrA7IT}2ZsuRW!>fNn+B{WRaf255
z6IA&M7yy5!??qaq4NFe2Sh6-*uKcW8soJ4To&o!6%@xW+mn$m-WyMNmg{rI=p{#(N
z@I?FwoAl@#t(u_f(EAIg)}OLf?rHj{wfJL<qt}VdbCe&Ankb9cdSm%-v@WVmeAN1~
zirR?+s_p-%RayBPP5eU~+FJZ$+{4s2Nynry%P1h%^6w}%$3LlcT{>LLKX2!scUVS2
zLw%#rh2gnyXreb}cGAS_Gu>+@wZ>B6h5Yk2{<%oqAHN%?@&~Ky_lr;#tMAu@IeL|x
z3eTB@B~|HuIA~Q=oWqNNhNab;H~q6F{yF~7tWA_w=ezZ#%$!Bo^;s{UK<3Qtq)Yp$
z1nX?ctC<gDW*BOEIwbDNbE;DNl*1RlN^8Q+prAtU_if<~3$UdA4b)|hx`e=<a|j0n
zuk4TUrk@c~CDFZPL^SfY?;>5faI(QfVJ;K~ykCD2s{-@qf(^~3dey(9SPmVyor_8R
z-Qp8VlL7E`z{1)1lorljT^~!YzCV^UnFLH8062Z&ak_2c!3EZf($syL_?P%H7#_sJ
z@PO5u6U&zcT=8XOgd~@#w)$lvbYqVGYQEfHW923Mo3n7T)_l313W@85J$9#RH_s84
zS*2fy^(O8lsN?-zC+R$%ORLp{4&Gfti8uy^e+RKy-$sn{3TNs~T!T0QYAURjw`TT#
z8%%jEg3pzjAS$!oI3H&oAsxE`#;ytM-UP)m6jpvZFz&Z^Bgl|NULFX_@ukaI09Qm7
zntq9`zFI9ZK<Kyp?trxU55_c-cN23rH9XOXAV&-;Eb_0IKtic(sU0NN+NIjbw%Q-q
zYpWc!;k?=(I%{k5Yws$ny?0#g<>PD1Ce)7pLG7w)L8x8B`>m8h_gIDdtpeOCkVMl7
zvrs?MDqL?C9_TU(2j8<=RHN|lY!k5NPP4G~*Jj}%yC%L(W<ln<65oa3X^~AhKb!Pa
zP&#->Yc8e@!ye=CWcE057upU|TRp=i+@Vx1g~_b3`YXly5fRL;zD#^jTpRiMW@YIB
zEwWipzgYt9D58f~UxH4OCOl?z+QJMnfNV4%TTKWEe`r8jvXGAq$iHMEod)EWOr2uP
z#_VJf1{t$c4q>xX3rqOJX+F~}o58tF@QkpiUg!#kr7M<lei&@XXb??AhzBqkC)LKD
z-pm;(8Geo?$Z!zTaOV^LGO{RAtquqduC*=}<)Zm(E}AxA`56KP&?Jy!>g4x<Pkx&g
z*@+$4rl;#!zP6zP3w*KRg+?v%^l74z0Ccx!)Hk6GQ`z|k#Y;%S+K&LZGNH_xr$vmh
z$YnLbI1^~Ws*DyK5NdgvtBYjAFB)+njXv@?3b+QK?dZ_xY0p7&XC6&9b_4jN-is+D
zv<;&%vu<XT$DqtDxt&()Sl+s+C{dw%V$^+OYeUktsW@JQ{on0*_?yt9Q(3(tCQCM!
zf=0Z^SZZrSQ{&)Gml0NGne~^8$srquh7MK~ne)(bycXXnEDnl`o213tY>V6F#fR;S
zyBteO3YYi>F8SYsmTW5$geC9Ci!#F}8$%4&@nCiOr9hW@^`$_&s$2q$F%EjzoJXh#
z6gRQ*e&Y}{*`Fi<SwE7vGD8FVlB8R-{C!QnS>LBTU$VE9wo#sAR=7r6s>!qUrs9Ss
zS0loARpoDKa&<29t^JVaW|41E7i;o@T;%!vkmqHQf2fW{urL?-wtmP9v&c1OG0Kc-
z!;O;;h@@lpUH<%#y`*iI!Zt@b0t?!w#7jNmH?gTD=lkRF6_#aDjdhZbsHdAQYiL4f
zzBh4q2kd)hG(~gU5b-t}`)m`%!RH66waBxf0g&Kl^>llSP$MlXxkR<~?RGc%Eu9}g
zOyF7F<BBpE+$fbY_4Pi2VUUM8_blYWBJYDY+D~ux?PL;nQU{P8Xp-KKi|si>B#dK&
zkT0M995g&@k$3r|W$*s?27vZ?R#$PYJPUmV<BLv&CBNT7xv=ItCZ6e&J8_SToIQgw
z=C=p)dyXqEI?q=_1yGoA57!9<xrQr+IKnw)HIqY+80T5W3Ok?jN$QYXNc)Z&ux1aj
z2H(%&g4qjFd-YUn(dK$8q(fCk|40&Ai;vscQsT?gHn>CZFcO_D1B{BqD>kDdGFamq
z+?h)+^au}iV-8)0{(d2^%Rf?!Y=Gm*W8%<y7@P76k3qqG(cU6rrq@x7v0`8v*0Qe6
z+_AMc(YeFt%Jzt{R$1MyMINQw(;|b=&x?6bYh4CsC=3Vpb~z6fVGTMByODtt4iH5N
ze|j35buTHKnMov@&LanNffVWl6NLKMbZqMl?Ipd5l5`hZj+&Z@TZ*lSVQth?#4nI?
zBNgxnpA2!_A4Z%K_t!{F<7v|3r;Y8w(C}1vmG+NrfZgmgC}*S*K^!ge%sVXl1&3$k
zg2SKVaAF6tCA)$6G}f_$b-`kIO^fUz+k6Ltw}a@;p$5Qkpy<=Ucv??)(%C%t8pLTQ
zOCYL%>oJ0C7Pq)NxBFHlT3o*Jgoj;fn2-<{(up8A+4k)%uA1vEIVPCBi5B3dx-pNP
zI36?)@MEXG3ei>&z){D=Yr@)}s-eqT|E(Qu!~>fBj{mnUB1ZPzBAICLEdnXa6l)$9
z8NTrfEs}=8u<y#}N9-M`HA^VBmJKdT1V*3|t7oE886pJ>G_yu`zWV9DVb2fWdqp3o
zsM$`IM{|ju#u^O^Al!;bX=rF7aI;3OE1R#3jMzA`zD$BWB>sG7&j792nE@LpG#Ct)
zWEn@<1r)KBQb^)EIzo$m21MNM9Tr*&BZ30Q!w?40{aOGC6<C};^!StRJsJxOsuUJ;
z`^7GtPk43dK{e4{qNNbPk}DFdD=?zf7AoTBlqbMc7INj*(CW16F&4_V%DSJiQ2AIo
z5!BCrmc1mk+W2_N(s%ZYMVgdP0qkO%6=M}87<6gfUr5e;FD04eM4Ju5N@>Sv=sNau
zQ616^a9*pUyUrH;fz>jD{oF@7ffBAs_yYQpfb(;TPXCTPg5N>3^!Anl-vC5P<e`Xs
zNyQJizc=_vk<YU%6yV;tUVBY)973I=ljHF@COHA0W0Mo(<H~et<`Zz&F}tP@=QVva
zzo~OU)BmYy`s>1`k8f-GWKq)*f86i)wU?yhi~MDXL(Qy?`@M1cy3Ic_>5R|w-;~Uc
zFN79|J0Y6KiC2$7)xblV^)ULF@B;*I%E0qGTV$WDK3}e91#zeLhyX<at1h0;6$V&9
zJ&|Cz5tia52wXG8{beUSS^D?%9e08E<g`|&@}s}26SFwcOK_C<0)IF~7|DVA@~Ok)
zR+ixgBg=r`EI5w9hK%eIB@Kh+2*fJYeWJFM(N*)&zF$O&aaDYr_b5WC*CI-Z;&EPd
zQjvnP*CMJ~S?fYAew8MEpnKyZb^m7+F+qH`eveRpN>CQQsR=g3E|_xLRJ9kVC&p7d
z#GVH|xojc+ZpNm0AUX>}AUZw)+q$d+!Ai2I#cAmGb~cPlIf#o~RZ#?Wq82$zSfFf%
zF%g;g3XqpanE~B_2*M&c9<U?3J>Lp^*OGjD_4x>Vb6g{V9=P%4xj3nGq|G4j_<tPa
zMF{8Rl}0b6@+2lr3-BJDNGU%Fyz&)q#2ocDkupTsjL2F1Q37J1IjE7#K%ZlXZBL`{
zI&a1$Sm!`y>E;{IM8WiF2&VIV=Q!lJ5Q)!ZD$UUPw`cj#IX0F$yLf`641KTY)A!SC
zo{aDQ1Z*kcBixScOeyePxmiXVvW%d40ulCU*iyoA0jCgoN1kirG$wkFVuCzh#Md&!
zT&h!<8%G>mg;U%Ez9XwTHy%0*7Zq`Aob>OBV?&c5&t+dsx6?U&q6fFKk<qL%^IeOO
z?}Da*G;tr&s~2$o$zca}#|WNFJ)PG5LXchxOJ7HUisk<%EbkQW9V*?s$aZhDeD9m~
zd(#d<xbM2|HrWvtdwzTr_70-{i1YW%L6<fMLGM%%IiZL@Ri;}pf2pUY=Wzqy>}<B!
zrJgy2AC!9<jrLxX&QXkG5Ha9L=wf0$HUEf;F}_7bb%F|nv1fYE@Bd*>o~xjqu{74<
z=x&o}-n+8%;_wn{UO9{7OGdc-@tkG#{7QX*;2DD7-x0eHw#hWtANRbVB8Ed%&gdMX
z1SMW&xQr?F;qu$YMOIw_ObC<PJYIOQVU=VUzGkY>!fCz?4n8FjFSC+}kSuh;3k(y5
zve*d|_|Ss{1Q|TVpc2e#<D^rC<jqnRIO)8y3Wv8V<Ul3TgClQ`F-W*2bg|S$y4=@U
zmpett`5Nl4nG#Emt{;<^#7XtWuVK;nX#9=A-&p3Z_l~TeBvwvx#gdZ|T8?`Go`k>2
z$TcDxulud6iza-jhXwC(*c2H5<Z@6QCqd+SjMTQ{4ENhz?)s-eUtb`%FrY+5Z>g
zAv>`yw3E4UAH&TwQjt6Xxo!haW)};sfStc+b3zjq!WtH8^}CZZG~qTX-;VN)@fqHj
z18`C?GbmYyBDBX0?+IRnl9=H=$%`tB-{{p*yd4{cBJLR!anIaH**g?vD&opP5t&08
z9BBblEf`5Hq_oI+`X_Mm@-D=cQ?QhJJ-g{{<W_x=>gor94YZs43)DW3e2~y1+~>&g
z0>1H&<VJsvYw|QBccQOxzl$691n=t%?B;N?jeF5%IVYySlIxY=ZP^#ByB*Hn%vNro
zXWgF!OUOp#3oZbe;JxG%&iuR^HoULA``gX^T{-6dPQ%<^@-626Zp+-CPK4Wv;cG`B
z7x0XChAxN5qHA3VnR*IZcHwT~Ekk$<rit$zcsfLQGMfn$gv<Ese-d1sy8y$tqp%oc
z&-HoP3AjK{!QSQFZLK7g@JYa-|9_88y_aZo{@Qmp%_5yUIvU6g-ofzn?|(K(tLzSm
zTtwjf!j*-ovV+3x%8%ekQYlRttxXsV5mQK`&nErsRxBPdL5c$+1BIu3Kf^<hO-P1$
zEZb4Xyx`iMhIdD;h+`J)_6XmE9?66O`**+tMlI6v9*=s0kYyz5X@dXq13DYjrPuRF
zM*N}0G^VFaaqc!fZ7uR|9P@(5Lzv`jx3}1R(!nigArE)6zQb2SWfWPL-v?(?W8L%6
z3BhY^rn0p+G>ZEX8>#CKpCh69{-)+pv*!DHs}}hcP=AF0v}3oY=9`cYODakyT^ox*
z2LXcDwx&A~b=RN5wDlIj2N442@WSJ+71HWY%w=0{p|QLze0lqdo_FmnCckUFV1)z!
zHT42wv}d%)7RqDHdf31*;$|5%{!HnO@4)2YV2dCRJ%1M_1*vmrI+R)8g~@~7S(?u8
z#<UwWv9lx*DJ%uN*-E_Gf?X(#>U7>vWNIFyYzxAnR3%i-H3)*mDIO0e4g=Ot>2!8I
zd3u}AKIx~@YTR5LBYWr&;NO~V&l%Llv9Kk0%tTv)E~sRM<zk&35*>U1fg@b<HeBGF
zAwWZYGt>z%9n5O6Z-P3~zz|JPfp554*d2rv5WWrjzOj<*K0I;TSczqk>{gm?4McA{
z3ytFIASvr@Z}HX)00#i|Oq7Bn(8V}eK}hN*-BU#!3A3&sfaDG)-0iVnh)p>kD(4O`
z1+LPaPyXF_+*JcJ1H&aul<YWJ4488kSvnz5!kZBXxt&8tS%V=uGs}ng$9CNRYB7Rr
zNJww@*<l)}HY|<L!;``8&CZ2V2NwB_D*TpQ4#R7&;*+NJAWB)v*UdXvCzf1?&2(0&
zA748rNkq3JVN=OF!*R9p5tMy^5-zs*XC8YZvRzM=?>Y_NLMq2TbNQP2=~hU2jzl8M
z!QE6ogFZV1g4;j@NfG$KH8&fF625O@ce0_0H5y`{&}M#26myR$Pn<wA=LkCmIJePq
zaTjjW+e`T5@E8N?VVfSj3sXhgod`g{r^A3j&UP^RmPDJ#%MhjM^on)6US|(Z&OyT7
z6eR$M31;mKS3oT`Qv=Z>%kAvjU_{M0X&KS%V#@s!`feCBxxJ<cf@w0AR#DV%zYN~Q
zl2B6TjWV<nRV#-==~xAaRdAXG+TfgPgYqF1^1O#eqR@m{kLJ{AV3|oPU+r@*xoS#7
zyZHoR>Cny-l6nj)&$+s!Wv6iwC5#vb(Kc!bw&9JTRg?SF9DQmCl5tE^fFYEjk{oG<
zWM_mk#usAUht@*+FYI{E!f4^S3#ED;wd0&v{ULandUivw-kHC^wFOP5&Gh37;h3#A
z8gXLcL<*EFJ!-rv;DKo}UT};<2d(QrR7k;K*oBmb<nKd_>L_E`NO%}^iWOtwMuo!s
zSa`<FM1#TonGd+>G9wGNlwVP0xLB=&-wk)At*pR+Ya7bpMKllKbBpm;Da`{YyvCzz
zfpP6x^B}$Dl-4{@hhi<@fkhX+f(3*}LuWl4F2D)A&ab`=e*mK<%PmI)2SpjvOutJp
zZcX_2h>Fr(N6+$=TOKBdUlUJQ30;0)di4qrp$Gj|rw<t{Z3?4*km>y~c|ILDa(HwM
z1)2NopQeBpZ$^*5nna*uJF$-met78D14f+_$h@fJ!+yj9d3ft#{6gU)%<d$HLiiH*
z=aJr4dl$~<D;Ci%XxCR!;q#`-@68FOsqz{s{I-6{PSw{lsSsjIWiwX{AlhDnDAYk{
z2zmyAdfG2R`JU1JsrkLgn~UjgfA0dk1jg`wXDZ=8I}eLF!@B)0B)${#&6YB>d}g)y
z(6WC%Bf9&cW<upyu0@^R2XOi+D*ZGtCgGRUUH%ITnEAvGubwG}MlY|Yolxmw{EDsf
zp#q!qjE-I<{*hiCCfRnqN?~w~imV!?7tZL$<36KZH6cj0mziBCI=3A!Sg*$SmwJ$%
zE>g6N`T@(U%VC>3$PA^yb4TD>0zz1l)(obl;O0YD3iEszwsDxXFwVBq-_N$w{n_RN
z+x8RNs6__bE^xLTJw#(o!W4~%hh;kPp*zEe)BX4$_2Glem*{r{3j4mivzDEW9S!8M
zqj6yeo^PrZaOv?&o8ege@|9*FE8l$7soL>O7GbRQv%!*iSw>h-19?wL9nMMo_nwO?
z_jMu&8@3f28H^Y6tSCJA4C(7-2&{5_Ksq7Hx)3dryV`7M1(W-?(xF4ZEJwuu19lc=
zDgS7g*?YN}4JPgeY&R?muARyJ=?(3(E;q6=cH{0ql;&@gl0?XC%}2u8+2Wc{r8S@0
z)_f|joo!!Rq^`Z@;kC0H1Ys>)pO^IX!XM6@P3Y-13Agn#kP&_<KhtKj!{>*&Br_PH
zd-WD)%^GtC&ydx%Tjvfk`tIfVg!b+hk)Smrdncy5Q|%$!_EfAzxER_8B^`=P$7EB=
z!d7)``diz26S&Tw*T>^?uYRrYc!Oa!(Sp>+jR_!|Y)rLI4)D?o@J=qKde^v=F+Z`M
zV{4IpCUgj()>~Vpa!wZEMH9i<7h#XQ*Z#a?UmmO<qKYn2WlUI$v?`U0G_{GBjio9R
zkEqkM$cwaYk3b0o%6UUSk{*W@^eqk3-cj)YGm}W#R0LN32Kn<+bo~w7(;YQ~5^_qp
z_7$pP$#FEL*QE_Wya-$S8`$RQnj+-Ja?nn_SQJi6*S=ytD+AH(NC3$cFG7d_f=9}i
zvYVtD$rpzz-O0Q<EdM8=(L<`?zC1~oh#Q#cET|Yy830ehn~CZd$EQ6a-QJX)(jx!C
zLJ}7_s`j29@3C2JoE4B+!{gnCX>bzogC}C_ZF=uSk6_`ZLx12t1Z0@pW3n&xHs=S$
z_auU|HL)E(y}+JF>FPwJ16L=K8pz4HnEG=7`rVvJle~?qrrmqY9_nT49k~D1+rSCE
zZOsJYgOM_Q5^+i>3>9+<+Ob~MVK5-OZk4ND4?<dz9icQCgt%gN=s^j;@snm6*DOD&
zZ<$vZG9C;+yjx~Q7&m8sZm}6Xzoc-Zvf!+GG^RD<Sq*gWIXzeu)r0)UEBK~2-kn;r
zi(3dqv`l)T9iGe$0`xK0slIJQFvDxsJC&>dON;y`WHBtSFXR=SDuUS(<5K!(Y}0?j
zK!@Na{C~pz^rw`XXI4%dqReScgw}zY08&xff)iPS#|T~}W#BZz#3SM0`ayiuQ#24A
zie_PW#ZC@JFLjA&vBXjkUGRXyo5i_csAs^1V%`5WlWv>38KGOwrwqf4r4m#&xYykW
z@^VC4aDw_*<x}E{cwwE+K1(uJnY$VjWGqCBoXU2jMP+7h8~-ogHhT`{vv<E7F{j6W
zn#R)$_&I<bZZ$3vB=3fWCAEa#C3rb(qjw>QkyB!8`AXPb{1*b#>DNM~feEF75%_J-
zAkVqr7@S=^JFw%;2MYYAMjncnVW;s3Hr{IE3^<wlr9AV38$#C!zxvDc!d3_30<(90
zh)a%M$0B{C2d4K;BI&Ts==WBtC+C+|9i+|a2Ufm8lqbSNnfD-?IFLw7>PRbPlarX@
SVL+F1Xzq`jKEaQC=lx&UP&JqU
literal 13540
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∨2(#)8Dgvz%#ICBk2W)Jt#kq`;$OTce<>Dc
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
diff --git a/rtlwifi/rtl8192cfwU_B.bin b/rtlwifi/rtl8192cfwU_B.bin
index 5af470ce32720701f491bbd3d685367eb0d18b81..3a3e38675c6d84004ff8eacaaeb4004660a0f155 100644
GIT binary patch
literal 16332
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
literal 14800
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
--
1.8.4.5
^ permalink raw reply related
* Re: truesize for pages shared between SKBs
From: Johannes Berg @ 2014-09-02 16:00 UTC (permalink / raw)
To: Eric Dumazet; +Cc: netdev, linux-wireless, Ido Yariv, Emmanuel Grumbach
In-Reply-To: <1409673113.3173.114.camel@edumazet-glaptop2.roam.corp.google.com>
On Tue, 2014-09-02 at 08:51 -0700, Eric Dumazet wrote:
> > In our driver, we have 4k receive buffers, but usually ~1500 byte
> > packets.
>
> Which driver exactly is that ?
iwlwifi/iwlmvm, of course :)
> Can you elaborate on 'they share the page' ?
>
> If a 4K page is really split into 2 2KB subpages, then yes, truesize can
> be 2KB + skb->head + sizeof(struct sk_buff)
What do you mean by "split"?
There could be any number of packets (though usually two in the
interesting case) in the page, and we call skb_add_rx_frag() for both
packets, pointing to the same page, with different offsets.
> Some drivers do that (Intel IGBVF for example)
It seems to split into two unconditionally, which is interesting.
> If a single 4KB page can be used by a single 1500 frame, then its not
> shared ;)
Right, obviously :)
> > How do other drivers handle this? Should the truesize maybe be aware of
> > this kind of sharing? Should we just lie about it and risk that the
> > truesize is accounted erroneously if some but not all of the packets are
> > freed?
>
> Lies are not worth crashing hosts under memory pressure.
>
> skb->truesize is really how many bytes are consumed by an skb. This
> serves in TCP stack to trigger collapses when a socket reaches its
> limits.
Right - the question is more what "consumed" means in this case. Should
it be correct at the time of SKB creation (in which case we should split
by the number of packets created from the page) or should it be correct
for the worst case (all but one packet are freed quickly, one remains
stuck on some socket with the full 4k page allocated to it) ...
Or maybe we should make it even more complex and check the page sharing
in conjunction with GRO...
> Your performance is better when you lie, because for the same
> sk->sk_rcvbuf value (typically tcp_rmem[2]), TCP window can be bigger,
> and allows TCP sender to send more packets (bigger cwnd)
>
> Workaround : make tcp_rmem[2] larger, so that we still have an
> appropriate memory limit per socket, acting for OOM prevention, and
> allowing better performance for large BDP flows.
>
> Current value is 6MB, which is already quite big IMO for well behaving
> drivers.
>
> Real fix would be to make your skb as slim as possible of course.
> It helps even if GRO or TCP coalescing can reduce the memory
> requirements for bulk flows.
Sure, it's always a trade-off though. If we want to *actually* make it
smaller we'd have to copy the data, which doesn't buy us much either.
The hardware is limited in the RX buffer handling, and there's actually
a chance we might receive close to 4k in a single frame with A-MSDU.
If you wanted to use the medium more efficiently you'd set the MTU
higher, for better page utilisation to a little under 2000 (a perfectly
valid value for 802.11). Nobody really does that though :-)
johannes
^ permalink raw reply
* [PATCH 4/4] Update firmware for rtl8821ae
From: Larry Finger @ 2014-09-02 16:00 UTC (permalink / raw)
To: linux-firmware-DgEjT+Ai2ygdnm+yROfE0A
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA, Larry Finger,
netdev-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1409673648-20328-1-git-send-email-Larry.Finger-tQ5ms3gMjBLk1uMJSBkQmQ@public.gmane.org>
This version corresponds to the firmware in the vendor's driver labelled
rtlwifi_linux_mac80211_0019.0320.2014V628. Firmware rtl8821aefw_wowlan.bin
is new with this release.
Signed-off-by: Larry Finger <Larry.Finger-tQ5ms3gMjBLk1uMJSBkQmQ@public.gmane.org>
---
WHENCE | 3 ++-
rtlwifi/rtl8821aefw.bin | Bin 29198 -> 28984 bytes
rtlwifi/rtl8821aefw_wowlan.bin | Bin 0 -> 19858 bytes
3 files changed, 2 insertions(+), 1 deletion(-)
create mode 100644 rtlwifi/rtl8821aefw_wowlan.bin
diff --git a/WHENCE b/WHENCE
index 44dad32..3de28a3 100644
--- a/WHENCE
+++ b/WHENCE
@@ -2009,8 +2009,9 @@ Licence: Redistributable. See LICENCE.rtlwifi_firmware.txt for details.
Driver: rtl8821ae - Realtek 802.11n WLAN driver for RTL8821AE
-Info: Taken from Realtek version wifi_driver_8821ae_0018.1129.2013.tar.gz
+Info: From Vendor's realtek/rtlwifi_linux_mac80211_0019.0320.2014V628 driver
File: rtlwifi/rtl8821aefw.bin
+File: rtlwifi/rtl8821aefw_wowlan.bin
Licence: Redistributable. See LICENCE.rtlwifi_firmware.txt for details.
diff --git a/rtlwifi/rtl8821aefw.bin b/rtlwifi/rtl8821aefw.bin
index a8638976db23ecd0dddd618aad93e73108313ed6..4f84cf94a1682b29714d2f086abb7fad3ef55a2f 100644
GIT binary patch
literal 28984
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
G$NvKmWId+<
literal 29198
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
diff --git a/rtlwifi/rtl8821aefw_wowlan.bin b/rtlwifi/rtl8821aefw_wowlan.bin
new file mode 100644
index 0000000000000000000000000000000000000000..115d49f157d8c53447e8d78f7fb4a3a032d223d2
GIT binary patch
literal 19858
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
HcfR}IL#^uu
literal 0
HcmV?d00001
--
1.8.4.5
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related
* Re: truesize for pages shared between SKBs
From: Eric Dumazet @ 2014-09-02 15:51 UTC (permalink / raw)
To: Johannes Berg; +Cc: netdev, linux-wireless, Ido Yariv, Emmanuel Grumbach
In-Reply-To: <1409660440.1808.17.camel@jlt4.sipsolutions.net>
On Tue, 2014-09-02 at 14:20 +0200, Johannes Berg wrote:
> Hi,
>
> In our driver, we have 4k receive buffers, but usually ~1500 byte
> packets.
Which driver exactly is that ?
>
> How do other drivers handle this? We currently set up the truesize of
> each SKB to be its size plus the 4k page size, but we see performance
> improvements when we lie and pretend the truesize is just 4k/(# of
> packets in the page), which is correct as long as the packets are all
> pending in the stack since they share the page.
Can you elaborate on 'they share the page' ?
If a 4K page is really split into 2 2KB subpages, then yes, truesize can
be 2KB + skb->head + sizeof(struct sk_buff)
Some drivers do that (Intel IGBVF for example)
If a single 4KB page can be used by a single 1500 frame, then its not
shared ;)
>
> How do other drivers handle this? Should the truesize maybe be aware of
> this kind of sharing? Should we just lie about it and risk that the
> truesize is accounted erroneously if some but not all of the packets are
> freed?
Lies are not worth crashing hosts under memory pressure.
skb->truesize is really how many bytes are consumed by an skb. This
serves in TCP stack to trigger collapses when a socket reaches its
limits.
Your performance is better when you lie, because for the same
sk->sk_rcvbuf value (typically tcp_rmem[2]), TCP window can be bigger,
and allows TCP sender to send more packets (bigger cwnd)
Workaround : make tcp_rmem[2] larger, so that we still have an
appropriate memory limit per socket, acting for OOM prevention, and
allowing better performance for large BDP flows.
Current value is 6MB, which is already quite big IMO for well behaving
drivers.
Real fix would be to make your skb as slim as possible of course.
It helps even if GRO or TCP coalescing can reduce the memory
requirements for bulk flows.
^ permalink raw reply
* Re: [net-next PATCH 3/3] qdisc: sysctl to adjust bulk dequeue limit
From: Daniel Borkmann @ 2014-09-02 15:33 UTC (permalink / raw)
To: Jesper Dangaard Brouer
Cc: David S. Miller, netdev, Florian Westphal, Hannes Frederic Sowa
In-Reply-To: <20140902143553.1918.73632.stgit@dragon>
On 09/02/2014 04:36 PM, Jesper Dangaard Brouer wrote:
> Allow userspace to adjust how many packet the qdisc is allowed to
> bulk dequeue.
>
> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
>
> ---
> Question should we allow this to be adjusted?
>
> include/net/sch_generic.h | 2 ++
> net/core/sysctl_net_core.c | 9 +++++++++
> net/sched/sch_generic.c | 4 +++-
> 3 files changed, 14 insertions(+), 1 deletions(-)
>
> diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
> index a3cfb8e..b0ac7b5 100644
> --- a/include/net/sch_generic.h
> +++ b/include/net/sch_generic.h
> @@ -14,6 +14,8 @@ struct qdisc_walker;
> struct tcf_walker;
> struct module;
>
> +extern int qdisc_bulk_dequeue_limit;
> +
> struct qdisc_rate_table {
> struct tc_ratespec rate;
> u32 data[256];
> diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
> index cf9cd13..5505841 100644
> --- a/net/core/sysctl_net_core.c
> +++ b/net/core/sysctl_net_core.c
> @@ -361,6 +361,15 @@ static struct ctl_table net_core_table[] = {
> .mode = 0644,
> .proc_handler = proc_dointvec
> },
> + {
> + .procname = "qdisc_bulk_dequeue_limit",
> + .data = &qdisc_bulk_dequeue_limit,
> + .maxlen = sizeof(int),
> + .mode = 0644,
> + .extra1 = &zero,
If zero, then this would bulk INT_MAX due to a wrap around in patch 2.
> + .extra2 = &ushort_max,
> + .proc_handler = proc_dointvec_minmax
> + },
> { }
> };
>
> diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
> index 30814ef..9cb08c0 100644
> --- a/net/sched/sch_generic.c
> +++ b/net/sched/sch_generic.c
> @@ -34,6 +34,8 @@
> const struct Qdisc_ops *default_qdisc_ops = &pfifo_fast_ops;
> EXPORT_SYMBOL(default_qdisc_ops);
>
> +int qdisc_bulk_dequeue_limit __read_mostly = 7;
> +
Just nit, but this should be adjusted plus the exit condition in
dequeue_skb() to work with 8 when you mention the max limit of 8
as bulk dequeue.
It would be great, if we could go with 0 knobs first, though.
> /* Main transmission queue. */
>
> /* Modifications to data participating in scheduling must be protected with
> @@ -81,7 +83,7 @@ static inline struct sk_buff *dequeue_skb(struct Qdisc *q)
> /* bulk dequeue */
> if (skb && !skb->next && (q->flags & TCQ_F_ONETXQUEUE)) {
> struct sk_buff *new, *head = skb;
> - int limit = 7;
> + int limit = qdisc_bulk_dequeue_limit;
>
> do {
> new = q->dequeue(q);
>
^ permalink raw reply
* Re: [net-next PATCH 1/3] qdisc: adjustments for API allowing skb list xmits
From: Eric Dumazet @ 2014-09-02 15:25 UTC (permalink / raw)
To: Jesper Dangaard Brouer
Cc: David S. Miller, netdev, Florian Westphal, Hannes Frederic Sowa,
Daniel Borkmann
In-Reply-To: <20140902143524.1918.70967.stgit@dragon>
On Tue, 2014-09-02 at 16:35 +0200, Jesper Dangaard Brouer wrote:
> Minor adjustments for merge commit 53fda7f7f9e (Merge branch 'xmit_list')
> that allows us to work with a list of SKBs.
>
> Update code doc to function sch_direct_xmit().
>
> In handle_dev_cpu_collision() use kfree_skb_list() in error handling.
>
> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
> ---
Please fix all other similar issues in a single patch.
qdisc_reset() and qdisc_destroy() are buggy as well.
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox