Netdev List
 help / color / mirror / Atom feed
* Re: [PATCH 0/3] net: time stamping fixes
From: Johannes Berg @ 2011-10-19 13:57 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: Richard Cochran, David Miller, netdev
In-Reply-To: <1319031856.8416.19.camel@edumazet-laptop>

On Wed, 2011-10-19 at 15:44 +0200, Eric Dumazet wrote:
> Le mercredi 19 octobre 2011 à 15:35 +0200, Johannes Berg a écrit :
> 
> > Even with that fixed I'm not really convinced of it all -- need to
> > really really really make sure that no skb->sk that was owned by a TX
> > skb is ever passed to sock_hold(). Can we really guarantee that?
> 
> Either we can guarantee that, or kernel is a piece of crap, all bets are
> off.

Fair enough :-)

> Yes, we need to make an audit, since we assumed sock_hold() was the
> right thing to do in all contexts.

Ok.

Anyway, I guess you agree that the patches as-is aren't actually the
right solution since we can't sock_hold() a TX skb socket reference?

johannes

^ permalink raw reply

* Re: [PATCH 0/3] net: time stamping fixes
From: Eric Dumazet @ 2011-10-19 14:08 UTC (permalink / raw)
  To: Johannes Berg; +Cc: Richard Cochran, David Miller, netdev
In-Reply-To: <1319032638.1286.7.camel@jlt3.sipsolutions.net>

Le mercredi 19 octobre 2011 à 15:57 +0200, Johannes Berg a écrit :
> On Wed, 2011-10-19 at 15:44 +0200, Eric Dumazet wrote:
> > Le mercredi 19 octobre 2011 à 15:35 +0200, Johannes Berg a écrit :
> > 
> > > Even with that fixed I'm not really convinced of it all -- need to
> > > really really really make sure that no skb->sk that was owned by a TX
> > > skb is ever passed to sock_hold(). Can we really guarantee that?
> > 
> > Either we can guarantee that, or kernel is a piece of crap, all bets are
> > off.
> 
> Fair enough :-)
> 
> > Yes, we need to make an audit, since we assumed sock_hold() was the
> > right thing to do in all contexts.
> 
> Ok.
> 
> Anyway, I guess you agree that the patches as-is aren't actually the
> right solution since we can't sock_hold() a TX skb socket reference?

Yes, the sock_hold() could be changed by an atomic_inc_not_zero()

What about doing this ?

diff --git a/include/linux/phy.h b/include/linux/phy.h
index 54fc413..79f337c 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -420,7 +420,7 @@ struct phy_driver {
 
 	/*
 	 * Requests a Tx timestamp for 'skb'. The phy driver promises
-	 * to deliver it to the socket's error queue as soon as a
+	 * to deliver it using skb_complete_tx_timestamp() as soon as a
 	 * timestamp becomes available. One of the PTP_CLASS_ values
 	 * is passed in 'type'.
 	 */
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 8bd383c..0f96646 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -2020,8 +2020,13 @@ static inline bool skb_defer_rx_timestamp(struct sk_buff *skb)
 /**
  * skb_complete_tx_timestamp() - deliver cloned skb with tx timestamps
  *
+ * PHY drivers may accept clones of transmitted packets for
+ * timestamping via their phy_driver.txtstamp method. These drivers
+ * must call this function to return the skb back to the stack, with
+ * or without a timestamp.
+ *
  * @skb: clone of the the original outgoing packet
- * @hwtstamps: hardware time stamps
+ * @hwtstamps: hardware time stamps, may be NULL if not available
  *
  */
 void skb_complete_tx_timestamp(struct sk_buff *skb,
diff --git a/net/core/timestamping.c b/net/core/timestamping.c
index 98a5264..82fb288 100644
--- a/net/core/timestamping.c
+++ b/net/core/timestamping.c
@@ -57,9 +57,13 @@ void skb_clone_tx_timestamp(struct sk_buff *skb)
 	case PTP_CLASS_V2_VLAN:
 		phydev = skb->dev->phydev;
 		if (likely(phydev->drv->txtstamp)) {
+			if (!atomic_inc_not_zero(&sk->sk_refcnt))
+				return;
 			clone = skb_clone(skb, GFP_ATOMIC);
-			if (!clone)
+			if (!clone) {
+				sock_put(sk);
 				return;
+			}
 			clone->sk = sk;
 			phydev->drv->txtstamp(phydev, clone, type);
 		}
@@ -77,8 +81,11 @@ void skb_complete_tx_timestamp(struct sk_buff *skb,
 	struct sock_exterr_skb *serr;
 	int err;
 
-	if (!hwtstamps)
+	if (!hwtstamps) {
+		sock_put(sk);
+		kfree_skb(skb);
 		return;
+	}
 
 	*skb_hwtstamps(skb) = *hwtstamps;
 	serr = SKB_EXT_ERR(skb);
@@ -87,6 +94,7 @@ void skb_complete_tx_timestamp(struct sk_buff *skb,
 	serr->ee.ee_origin = SO_EE_ORIGIN_TIMESTAMPING;
 	skb->sk = NULL;
 	err = sock_queue_err_skb(sk, skb);
+	sock_put(sk);
 	if (err)
 		kfree_skb(skb);
 }

^ permalink raw reply related

* Re: [PATCH 0/3] net: time stamping fixes
From: Johannes Berg @ 2011-10-19 14:24 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: Richard Cochran, David Miller, netdev
In-Reply-To: <1319033305.8416.29.camel@edumazet-laptop>

On Wed, 2011-10-19 at 16:08 +0200, Eric Dumazet wrote:

> > Anyway, I guess you agree that the patches as-is aren't actually the
> > right solution since we can't sock_hold() a TX skb socket reference?
> 
> Yes, the sock_hold() could be changed by an atomic_inc_not_zero()
> 
> What about doing this ?

>  		if (likely(phydev->drv->txtstamp)) {
> +			if (!atomic_inc_not_zero(&sk->sk_refcnt))
> +				return;

Yeah that seems like it works and just drops the timestamp in case we
don't still have a live socket, which is perfectly fine.

johannes

^ permalink raw reply

* Re: [PATCH 0/3] net: time stamping fixes
From: Richard Cochran @ 2011-10-19 14:25 UTC (permalink / raw)
  To: Johannes Berg; +Cc: Eric Dumazet, David Miller, netdev
In-Reply-To: <1319031173.1286.1.camel@jlt3.sipsolutions.net>

On Wed, Oct 19, 2011 at 03:32:53PM +0200, Johannes Berg wrote:
> 
> OTOH, could skb_clone_tx_timestamp() orphan the original skb after
> adding the skb2?

The Ethernet MAC driver decides what to do with the original skb. In
the MAC driver, it goes like:

1. skb_tx_timestamp(skb) -> skb_clone_tx_timestamp(skb);
2. give skb to hardware;
3. ...
4. kfree_skb, recycle, etc

Richard

^ permalink raw reply

* Re: [PATCH 0/3] net: time stamping fixes
From: Richard Cochran @ 2011-10-19 14:27 UTC (permalink / raw)
  To: Johannes Berg; +Cc: Eric Dumazet, David Miller, netdev
In-Reply-To: <1319034248.1286.8.camel@jlt3.sipsolutions.net>

On Wed, Oct 19, 2011 at 04:24:08PM +0200, Johannes Berg wrote:
> On Wed, 2011-10-19 at 16:08 +0200, Eric Dumazet wrote:
> 
> > > Anyway, I guess you agree that the patches as-is aren't actually the
> > > right solution since we can't sock_hold() a TX skb socket reference?
> > 
> > Yes, the sock_hold() could be changed by an atomic_inc_not_zero()
> > 
> > What about doing this ?
> 
> >  		if (likely(phydev->drv->txtstamp)) {
> > +			if (!atomic_inc_not_zero(&sk->sk_refcnt))
> > +				return;
> 
> Yeah that seems like it works and just drops the timestamp in case we
> don't still have a live socket, which is perfectly fine.

Yes, I think it resolves any doubt. I will resubmit with this
solution.

Thanks,
Richard

^ permalink raw reply

* Re: BUG: All network processes hang (brcmsmac/wpa_supplicant)
From: Nico Schottelius @ 2011-10-19 14:28 UTC (permalink / raw)
  To: Nico Schottelius, Eric Dumazet, Arend van Spriel, LKML,
	"linux-wire
In-Reply-To: <20111019130749.GD11883@schottelius.org>

[-- Attachment #1: Type: text/plain, Size: 199 bytes --]

Triggered it! 

And also got the traceback!

Dmesg + log attached, let me know when I can pull the fix from
somewhere.

Cheers,

Nico

-- 
PGP key: 7ED9 F7D3 6B10 81D7 0EC5  5C09 D7DC C8E4 3187 7DF0

[-- Attachment #2: 3.1.0-rc6-gbee709a.config.gz --]
[-- Type: application/octet-stream, Size: 32197 bytes --]

[-- Attachment #3: 3.1.0-rc6-gbee709a.dmesg --]
[-- Type: text/plain, Size: 116675 bytes --]

[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.1.0-rc6-gbee709a (nico@brief) (gcc version 4.6.1 20110819 (prerelease) (GCC) ) #3 SMP PREEMPT Wed Oct 19 15:40:21 CEST 2011
[    0.000000] Command line: root=/dev/mapper/root cryptdevice=/dev/sda5:root ro initrd=../initramfs-nico.img BOOT_IMAGE=../vmlinuz-nico 
[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: 0000000000000000 - 000000000008f000 (usable)
[    0.000000]  BIOS-e820: 000000000008f000 - 0000000000090000 (reserved)
[    0.000000]  BIOS-e820: 0000000000090000 - 000000000009fc00 (usable)
[    0.000000]  BIOS-e820: 000000000009fc00 - 0000000000100000 (reserved)
[    0.000000]  BIOS-e820: 0000000000100000 - 0000000020000000 (usable)
[    0.000000]  BIOS-e820: 0000000020000000 - 0000000020200000 (reserved)
[    0.000000]  BIOS-e820: 0000000020200000 - 0000000040000000 (usable)
[    0.000000]  BIOS-e820: 0000000040000000 - 0000000040200000 (reserved)
[    0.000000]  BIOS-e820: 0000000040200000 - 000000008ad36000 (usable)
[    0.000000]  BIOS-e820: 000000008ad36000 - 000000008ad5f000 (ACPI NVS)
[    0.000000]  BIOS-e820: 000000008ad5f000 - 000000008afa2000 (ACPI data)
[    0.000000]  BIOS-e820: 000000008afa2000 - 000000008afff000 (reserved)
[    0.000000]  BIOS-e820: 000000008afff000 - 000000008b000000 (ACPI data)
[    0.000000]  BIOS-e820: 000000008b000000 - 000000008fa00000 (reserved)
[    0.000000]  BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
[    0.000000]  BIOS-e820: 00000000fec00000 - 00000000fec01000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed00000 - 00000000fed04000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed10000 - 00000000fed14000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed18000 - 00000000fed1a000 (reserved)
[    0.000000]  BIOS-e820: 00000000fed1c000 - 00000000fed20000 (reserved)
[    0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
[    0.000000]  BIOS-e820: 00000000ff800000 - 0000000100000000 (reserved)
[    0.000000]  BIOS-e820: 0000000100000000 - 000000016fe00000 (usable)
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] DMI 2.4 present.
[    0.000000] DMI: Apple Inc. MacBookAir4,2/Mac-742912EFDBEE19B3, BIOS MBA41.88Z.0077.B08.1109011050 09/01/2011
[    0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved)
[    0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable)
[    0.000000] No AGP bridge found
[    0.000000] last_pfn = 0x16fe00 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: write-back
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-DFFFF write-protect
[    0.000000]   E0000-FFFFF uncachable
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 0C0000000 mask FC0000000 uncachable
[    0.000000]   1 base 0A0000000 mask FE0000000 uncachable
[    0.000000]   2 base 090000000 mask FF0000000 uncachable
[    0.000000]   3 base 08C000000 mask FFC000000 uncachable
[    0.000000]   4 base 08B800000 mask FFF800000 uncachable
[    0.000000]   5 disabled
[    0.000000]   6 disabled
[    0.000000]   7 disabled
[    0.000000]   8 disabled
[    0.000000]   9 disabled
[    0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
[    0.000000] last_pfn = 0x8ad36 max_arch_pfn = 0x400000000
[    0.000000] initial memory mapped : 0 - 20000000
[    0.000000] Base memory trampoline at [ffff88000009a000] 9a000 size 20480
[    0.000000] init_memory_mapping: 0000000000000000-000000008ad36000
[    0.000000]  0000000000 - 008ac00000 page 2M
[    0.000000]  008ac00000 - 008ad36000 page 4k
[    0.000000] kernel direct mapping tables up to 8ad36000 @ 8ad31000-8ad36000
[    0.000000] init_memory_mapping: 0000000100000000-000000016fe00000
[    0.000000]  0100000000 - 016fe00000 page 2M
[    0.000000] kernel direct mapping tables up to 16fe00000 @ 16fdf9000-16fe00000
[    0.000000] RAMDISK: 1fd2a000 - 1ffff000
[    0.000000] ACPI: RSDP 00000000000fe020 00024 (v02 APPLE )
[    0.000000] ACPI: XSDT 000000008ad8e1c0 000AC (v01 APPLE   Apple00 00000060      01000013)
[    0.000000] ACPI: FACP 000000008ad8c000 000F4 (v04 APPLE   Apple00 00000060 Loki 0000005F)
[    0.000000] ACPI: DSDT 000000008ad81000 05050 (v01 APPLE  MacBookA 00040001 INTL 20100915)
[    0.000000] ACPI: FACS 000000008ad40000 00040
[    0.000000] ACPI: HPET 000000008ad8b000 00038 (v01 APPLE   Apple00 00000001 Loki 0000005F)
[    0.000000] ACPI: APIC 000000008ad8a000 000BC (v02 APPLE   Apple00 00000001 Loki 0000005F)
[    0.000000] ACPI: SBST 000000008ad88000 00030 (v01 APPLE   Apple00 00000001 Loki 0000005F)
[    0.000000] ACPI: ECDT 000000008ad87000 00053 (v01 APPLE   Apple00 00000001 Loki 0000005F)
[    0.000000] ACPI: SSDT 000000008ad7d000 00024 (v01 APPLE   SmcDppt 00001000 INTL 20100915)
[    0.000000] ACPI: SSDT 000000008ad7b000 006CA (v01 APPLE     UsbSD 00001000 INTL 20100915)
[    0.000000] ACPI: SSDT 000000008ad77000 00159 (v02 APPLE     IGHda 00001000 INTL 20100915)
[    0.000000] ACPI: SSDT 000000008ad73000 015EB (v02 APPLE  SsdtIGPU 00001000 INTL 20100915)
[    0.000000] ACPI: SSDT 000000008ad72000 00506 (v01  PmRef  Cpu0Ist 00003000 INTL 20100915)
[    0.000000] ACPI: SSDT 000000008ad71000 009B1 (v01  PmRef    CpuPm 00003000 INTL 20100915)
[    0.000000] ACPI: SSDT 000000008ad70000 00315 (v01  PmRef  Cpu0Tst 00003000 INTL 20100915)
[    0.000000] ACPI: SSDT 000000008ad6f000 0037A (v01  PmRef    ApTst 00003000 INTL 20100915)
[    0.000000] ACPI: MCFG 000000008ad89000 0003C (v01 APPLE   Apple00 00000001 Loki 0000005F)
[    0.000000] ACPI: SSDT 000000008ad80000 000FA (v01 SataRe  SataPri 00001000 INTL 20100915)
[    0.000000] ACPI: SSDT 000000008ad7f000 000D0 (v01 SataRe  SataSec 00001000 INTL 20100915)
[    0.000000] ACPI: SSDT 000000008ad7e000 00032 (v01  Apple   SsdtS3 00001000 INTL 20100915)
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] No NUMA configuration found
[    0.000000] Faking a node at 0000000000000000-000000016fe00000
[    0.000000] Initmem setup node 0 0000000000000000-000000016fe00000
[    0.000000]   NODE_DATA [000000016fdfb000 - 000000016fdfffff]
[    0.000000]  [ffffea0000000000-ffffea0005bfffff] PMD -> [ffff88016b400000-ffff88016f3fffff] on node 0
[    0.000000] Zone PFN ranges:
[    0.000000]   DMA      0x00000010 -> 0x00001000
[    0.000000]   DMA32    0x00001000 -> 0x00100000
[    0.000000]   Normal   0x00100000 -> 0x0016fe00
[    0.000000] Movable zone start PFN for each node
[    0.000000] early_node_map[6] active PFN ranges
[    0.000000]     0: 0x00000010 -> 0x0000008f
[    0.000000]     0: 0x00000090 -> 0x0000009f
[    0.000000]     0: 0x00000100 -> 0x00020000
[    0.000000]     0: 0x00020200 -> 0x00040000
[    0.000000]     0: 0x00040200 -> 0x0008ad36
[    0.000000]     0: 0x00100000 -> 0x0016fe00
[    0.000000] On node 0 totalpages: 1025732
[    0.000000]   DMA zone: 64 pages used for memmap
[    0.000000]   DMA zone: 5 pages reserved
[    0.000000]   DMA zone: 3913 pages, LIFO batch:0
[    0.000000]   DMA32 zone: 16320 pages used for memmap
[    0.000000]   DMA32 zone: 547190 pages, LIFO batch:31
[    0.000000]   Normal zone: 7160 pages used for memmap
[    0.000000]   Normal zone: 451080 pages, LIFO batch:31
[    0.000000] ACPI: PM-Timer IO Port: 0x408
[    0.000000] ACPI: Local APIC address 0xfee00000
[    0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x01] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x03] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0xff] disabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0xff] disabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0xff] disabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x08] lapic_id[0xff] disabled)
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x04] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x05] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x06] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x07] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x08] high edge lint[0x1])
[    0.000000] ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0])
[    0.000000] IOAPIC[0]: apic_id 2, version 32, address 0xfec00000, GSI 0-23
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[    0.000000] ACPI: IRQ0 used by override.
[    0.000000] ACPI: IRQ2 used by override.
[    0.000000] ACPI: IRQ9 used by override.
[    0.000000] Using ACPI (MADT) for SMP configuration information
[    0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000
[    0.000000] SMP: Allowing 8 CPUs, 4 hotplug CPUs
[    0.000000] nr_irqs_gsi: 40
[    0.000000] PM: Registered nosave memory: 000000000008f000 - 0000000000090000
[    0.000000] PM: Registered nosave memory: 000000000009f000 - 00000000000a0000
[    0.000000] PM: Registered nosave memory: 00000000000a0000 - 0000000000100000
[    0.000000] PM: Registered nosave memory: 0000000020000000 - 0000000020200000
[    0.000000] PM: Registered nosave memory: 0000000040000000 - 0000000040200000
[    0.000000] PM: Registered nosave memory: 000000008ad36000 - 000000008ad5f000
[    0.000000] PM: Registered nosave memory: 000000008ad5f000 - 000000008afa2000
[    0.000000] PM: Registered nosave memory: 000000008afa2000 - 000000008afff000
[    0.000000] PM: Registered nosave memory: 000000008afff000 - 000000008b000000
[    0.000000] PM: Registered nosave memory: 000000008b000000 - 000000008fa00000
[    0.000000] PM: Registered nosave memory: 000000008fa00000 - 00000000e0000000
[    0.000000] PM: Registered nosave memory: 00000000e0000000 - 00000000f0000000
[    0.000000] PM: Registered nosave memory: 00000000f0000000 - 00000000fec00000
[    0.000000] PM: Registered nosave memory: 00000000fec00000 - 00000000fec01000
[    0.000000] PM: Registered nosave memory: 00000000fec01000 - 00000000fed00000
[    0.000000] PM: Registered nosave memory: 00000000fed00000 - 00000000fed04000
[    0.000000] PM: Registered nosave memory: 00000000fed04000 - 00000000fed10000
[    0.000000] PM: Registered nosave memory: 00000000fed10000 - 00000000fed14000
[    0.000000] PM: Registered nosave memory: 00000000fed14000 - 00000000fed18000
[    0.000000] PM: Registered nosave memory: 00000000fed18000 - 00000000fed1a000
[    0.000000] PM: Registered nosave memory: 00000000fed1a000 - 00000000fed1c000
[    0.000000] PM: Registered nosave memory: 00000000fed1c000 - 00000000fed20000
[    0.000000] PM: Registered nosave memory: 00000000fed20000 - 00000000fee00000
[    0.000000] PM: Registered nosave memory: 00000000fee00000 - 00000000fee01000
[    0.000000] PM: Registered nosave memory: 00000000fee01000 - 00000000ff800000
[    0.000000] PM: Registered nosave memory: 00000000ff800000 - 0000000100000000
[    0.000000] Allocating PCI resources starting at 8fa00000 (gap: 8fa00000:50600000)
[    0.000000] Booting paravirtualized kernel on bare hardware
[    0.000000] setup_percpu: NR_CPUS:64 nr_cpumask_bits:64 nr_cpu_ids:8 nr_node_ids:1
[    0.000000] PERCPU: Embedded 28 pages/cpu @ffff88016fa00000 s82048 r8192 d24448 u262144
[    0.000000] pcpu-alloc: s82048 r8192 d24448 u262144 alloc=1*2097152
[    0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7 
[    0.000000] Built 1 zonelists in Node order, mobility grouping on.  Total pages: 1002183
[    0.000000] Policy zone: Normal
[    0.000000] Kernel command line: root=/dev/mapper/root cryptdevice=/dev/sda5:root ro initrd=../initramfs-nico.img BOOT_IMAGE=../vmlinuz-nico 
[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[    0.000000] xsave/xrstor: enabled xstate_bv 0x7, cntxt size 0x340
[    0.000000] Checking aperture...
[    0.000000] No AGP bridge found
[    0.000000] Calgary: detecting Calgary via BIOS EBDA area
[    0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
[    0.000000] Memory: 3946532k/6027264k available (4294k kernel code, 1924336k absent, 156396k reserved, 5506k data, 724k init)
[    0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000] 	Verbose stalled-CPUs detection is disabled.
[    0.000000] NR_IRQS:2304
[    0.000000] Extended CMOS year: 2000
[    0.000000] Console: colour VGA+ 80x25
[    0.000000] console [tty0] enabled
[    0.000000] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[    0.000000] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.000000] ... MAX_LOCK_DEPTH:          48
[    0.000000] ... MAX_LOCKDEP_KEYS:        8191
[    0.000000] ... CLASSHASH_SIZE:          4096
[    0.000000] ... MAX_LOCKDEP_ENTRIES:     16384
[    0.000000] ... MAX_LOCKDEP_CHAINS:      32768
[    0.000000] ... CHAINHASH_SIZE:          16384
[    0.000000]  memory used by lock dependency info: 5855 kB
[    0.000000]  per task-struct memory footprint: 1920 bytes
[    0.000000] allocated 33554432 bytes of page_cgroup
[    0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
[    0.000000] hpet clockevent registered
[    0.000000] Fast TSC calibration using PIT
[    0.003333] Detected 1699.929 MHz processor.
[    0.000004] Calibrating delay loop (skipped), value calculated using timer frequency.. 3401.51 BogoMIPS (lpj=5666430)
[    0.000140] pid_max: default: 32768 minimum: 301
[    0.000394] Security Framework initialized
[    0.000463] AppArmor: AppArmor disabled by boot time parameter
[    0.001146] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes)
[    0.002511] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
[    0.003095] Mount-cache hash table entries: 256
[    0.004632] Initializing cgroup subsys cpuacct
[    0.004736] Initializing cgroup subsys memory
[    0.004857] Initializing cgroup subsys devices
[    0.004924] Initializing cgroup subsys freezer
[    0.004992] Initializing cgroup subsys net_cls
[    0.005059] Initializing cgroup subsys blkio
[    0.005239] CPU: Physical Processor ID: 0
[    0.005304] CPU: Processor Core ID: 0
[    0.005371] mce: CPU supports 7 MCE banks
[    0.005449] CPU0: Thermal monitoring enabled (TM1)
[    0.005532] using mwait in idle threads.
[    0.007470] ACPI: Core revision 20110623
[    0.030328] ftrace: allocating 16325 entries in 65 pages
[    0.039524] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
[    0.072578] CPU0: Intel(R) Core(TM) i5-2557M CPU @ 1.70GHz stepping 07
[    0.177397] Performance Events: PEBS fmt1+, SandyBridge events, Intel PMU driver.
[    0.177612] ... version:                3
[    0.177677] ... bit width:              48
[    0.177740] ... generic registers:      4
[    0.177805] ... value mask:             0000ffffffffffff
[    0.177872] ... max period:             000000007fffffff
[    0.177939] ... fixed-purpose events:   3
[    0.178003] ... event mask:             000000070000000f
[    0.198016] NMI watchdog enabled, takes one hw-pmu counter.
[    0.217442] lockdep: fixing up alternatives.
[    0.224201] Booting Node   0, Processors  #1
[    0.224296] smpboot cpu 1: start_ip = 9a000
[    0.337502] NMI watchdog enabled, takes one hw-pmu counter.
[    0.357326] lockdep: fixing up alternatives.
[    0.357435]  #2
[    0.357482] smpboot cpu 2: start_ip = 9a000
[    0.470700] NMI watchdog enabled, takes one hw-pmu counter.
[    0.490574] lockdep: fixing up alternatives.
[    0.490689]  #3
[    0.490737] smpboot cpu 3: start_ip = 9a000
[    0.603958] NMI watchdog enabled, takes one hw-pmu counter.
[    0.610491] Brought up 4 CPUs
[    0.610569] Total of 4 processors activated (13605.39 BogoMIPS).
[    0.614891] devtmpfs: initialized
[    0.616505] PM: Registering ACPI NVS region at 8ad36000 (167936 bytes)
[    0.618106] print_constraints: dummy: 
[    0.618459] NET: Registered protocol family 16
[    0.618826] ACPI: bus type pci registered
[    0.619149] PCI: MMCONFIG for domain 0000 [bus 00-97] at [mem 0xe0000000-0xe97fffff] (base 0xe0000000)
[    0.619241] PCI: MMCONFIG at [mem 0xe0000000-0xe97fffff] reserved in E820
[    0.682329] PCI: Using configuration type 1 for base access
[    0.683649] bio: create slab <bio-0> at 0
[    0.683927] ACPI: Added _OSI(Module Device)
[    0.683993] ACPI: Added _OSI(Processor Device)
[    0.684059] ACPI: Added _OSI(3.0 _SCP Extensions)
[    0.684126] ACPI: Added _OSI(Processor Aggregator Device)
[    0.690414] ACPI: EC: EC description table is found, configuring boot EC
[    0.705599] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored
[    0.706534] ACPI: SSDT 000000008ad3b190 00781 (v01  PmRef  Cpu0Cst 00003001 INTL 20100915)
[    0.708304] ACPI: Dynamic OEM Table Load:
[    0.708453] ACPI: SSDT           (null) 00781 (v01  PmRef  Cpu0Cst 00003001 INTL 20100915)
[    0.717590] ACPI: SSDT 000000008ad3c710 003A4 (v01  PmRef    ApIst 00003000 INTL 20100915)
[    0.719451] ACPI: Dynamic OEM Table Load:
[    0.719599] ACPI: SSDT           (null) 003A4 (v01  PmRef    ApIst 00003000 INTL 20100915)
[    0.727269] ACPI: SSDT 000000008ad3ad90 00119 (v01  PmRef    ApCst 00003000 INTL 20100915)
[    0.729039] ACPI: Dynamic OEM Table Load:
[    0.729187] ACPI: SSDT           (null) 00119 (v01  PmRef    ApCst 00003000 INTL 20100915)
[    0.738119] ACPI: Interpreter enabled
[    0.738185] ACPI: (supports S0 S3 S4 S5)
[    0.738466] ACPI: Using IOAPIC for interrupt routing
[    0.765070] ACPI: EC: GPE = 0x17, I/O: command/status = 0x66, data = 0x62
[    0.765628] ACPI: No dock devices found.
[    0.765693] HEST: Table not found.
[    0.765757] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[    0.766567] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
[    0.767754] pci_root PNP0A08:00: host bridge window [io  0x0000-0x0cf7]
[    0.767826] pci_root PNP0A08:00: host bridge window [io  0x0d00-0xffff]
[    0.767897] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff]
[    0.767984] pci_root PNP0A08:00: host bridge window [mem 0x8fa00000-0xfeafffff]
[    0.768069] pci_root PNP0A08:00: host bridge window [mem 0xfed40000-0xfed44fff]
[    0.768193] pci 0000:00:00.0: [8086:0104] type 0 class 0x000600
[    0.768294] pci 0000:00:01.0: [8086:0101] type 1 class 0x000604
[    0.768352] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold
[    0.768357] pci 0000:00:01.0: PME# disabled
[    0.768398] pci 0000:00:02.0: [8086:0116] type 0 class 0x000300
[    0.768421] pci 0000:00:02.0: reg 10: [mem 0xa0000000-0xa03fffff 64bit]
[    0.768434] pci 0000:00:02.0: reg 18: [mem 0x90000000-0x9fffffff 64bit pref]
[    0.768444] pci 0000:00:02.0: reg 20: [io  0x2000-0x203f]
[    0.768558] pci 0000:00:16.0: [8086:1c3a] type 0 class 0x000780
[    0.768604] pci 0000:00:16.0: reg 10: [mem 0xa0607100-0xa060710f 64bit]
[    0.768727] pci 0000:00:16.0: PME# supported from D0 D3hot D3cold
[    0.768734] pci 0000:00:16.0: PME# disabled
[    0.768792] pci 0000:00:1a.0: [8086:1c2c] type 0 class 0x000c03
[    0.768883] pci 0000:00:1a.0: reg 20: [io  0x2140-0x215f]
[    0.768999] pci 0000:00:1a.7: [8086:1c2d] type 0 class 0x000c03
[    0.769039] pci 0000:00:1a.7: reg 10: [mem 0xa0606c00-0xa0606fff]
[    0.769184] pci 0000:00:1a.7: PME# supported from D0 D3hot D3cold
[    0.769191] pci 0000:00:1a.7: PME# disabled
[    0.769240] pci 0000:00:1b.0: [8086:1c20] type 0 class 0x000403
[    0.769272] pci 0000:00:1b.0: reg 10: [mem 0xa0600000-0xa0603fff 64bit]
[    0.769401] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold
[    0.769408] pci 0000:00:1b.0: PME# disabled
[    0.769451] pci 0000:00:1c.0: [8086:1c10] type 1 class 0x000604
[    0.769587] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold
[    0.769594] pci 0000:00:1c.0: PME# disabled
[    0.769644] pci 0000:00:1c.1: [8086:1c12] type 1 class 0x000604
[    0.769783] pci 0000:00:1c.1: PME# supported from D0 D3hot D3cold
[    0.769790] pci 0000:00:1c.1: PME# disabled
[    0.769850] pci 0000:00:1d.0: [8086:1c27] type 0 class 0x000c03
[    0.769942] pci 0000:00:1d.0: reg 20: [io  0x20e0-0x20ff]
[    0.770057] pci 0000:00:1d.7: [8086:1c26] type 0 class 0x000c03
[    0.770098] pci 0000:00:1d.7: reg 10: [mem 0xa0606800-0xa0606bff]
[    0.770244] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold
[    0.770251] pci 0000:00:1d.7: PME# disabled
[    0.770293] pci 0000:00:1f.0: [8086:1c4d] type 0 class 0x000601
[    0.770507] pci 0000:00:1f.2: [8086:1c01] type 0 class 0x000101
[    0.770543] pci 0000:00:1f.2: reg 10: [io  0x2168-0x216f]
[    0.770561] pci 0000:00:1f.2: reg 14: [io  0x217c-0x217f]
[    0.770579] pci 0000:00:1f.2: reg 18: [io  0x2160-0x2167]
[    0.770598] pci 0000:00:1f.2: reg 1c: [io  0x2178-0x217b]
[    0.770616] pci 0000:00:1f.2: reg 20: [io  0x2060-0x206f]
[    0.770633] pci 0000:00:1f.2: reg 24: [io  0xffe0-0xffef]
[    0.770720] pci 0000:00:1f.3: [8086:1c22] type 0 class 0x000c05
[    0.770752] pci 0000:00:1f.3: reg 10: [mem 0xa0607000-0xa06070ff 64bit]
[    0.770802] pci 0000:00:1f.3: reg 20: [io  0xefa0-0xefbf]
[    0.770924] pci 0000:03:00.0: [8086:151a] type 1 class 0x000604
[    0.770999] pci 0000:03:00.0: supports D1 D2
[    0.771002] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    0.771007] pci 0000:03:00.0: PME# disabled
[    0.777099] pci 0000:00:01.0: PCI bridge to [bus 03-97]
[    0.777170] pci 0000:00:01.0:   bridge window [io  0x3000-0x3fff]
[    0.777175] pci 0000:00:01.0:   bridge window [mem 0xa0700000-0xa49fffff]
[    0.777181] pci 0000:00:01.0:   bridge window [mem 0xa4a00000-0xa89fffff 64bit pref]
[    0.777255] pci 0000:04:00.0: [8086:151a] type 1 class 0x000604
[    0.777333] pci 0000:04:00.0: supports D1 D2
[    0.777336] pci 0000:04:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    0.777341] pci 0000:04:00.0: PME# disabled
[    0.777390] pci 0000:04:03.0: [8086:151a] type 1 class 0x000604
[    0.777469] pci 0000:04:03.0: supports D1 D2
[    0.777471] pci 0000:04:03.0: PME# supported from D0 D1 D2 D3hot D3cold
[    0.777476] pci 0000:04:03.0: PME# disabled
[    0.777516] pci 0000:04:04.0: [8086:151a] type 1 class 0x000604
[    0.777594] pci 0000:04:04.0: supports D1 D2
[    0.777596] pci 0000:04:04.0: PME# supported from D0 D1 D2 D3hot D3cold
[    0.777602] pci 0000:04:04.0: PME# disabled
[    0.777669] pci 0000:03:00.0: PCI bridge to [bus 04-67]
[    0.777745] pci 0000:03:00.0:   bridge window [mem 0xa0700000-0xa09fffff]
[    0.777834] pci 0000:05:00.0: [8086:151a] type 0 class 0x000880
[    0.777855] pci 0000:05:00.0: reg 10: [mem 0xa0700000-0xa073ffff]
[    0.777870] pci 0000:05:00.0: reg 14: [mem 0xa0740000-0xa0740fff]
[    0.777977] pci 0000:05:00.0: supports D1 D2
[    0.777979] pci 0000:05:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    0.777985] pci 0000:05:00.0: PME# disabled
[    0.778046] pci 0000:04:00.0: PCI bridge to [bus 05-05]
[    0.778122] pci 0000:04:00.0:   bridge window [mem 0xa0700000-0xa07fffff]
[    0.778187] pci 0000:04:03.0: PCI bridge to [bus 06-36]
[    0.778263] pci 0000:04:03.0:   bridge window [mem 0xa0800000-0xa08fffff]
[    0.778329] pci 0000:04:04.0: PCI bridge to [bus 37-67]
[    0.778405] pci 0000:04:04.0:   bridge window [mem 0xa0900000-0xa09fffff]
[    0.778534] pci 0000:00:1c.0: PCI bridge to [bus 01-01]
[    0.778611] pci 0000:00:1c.0:   bridge window [mem 0xa0500000-0xa05fffff]
[    0.778815] pci 0000:02:00.0: [14e4:4353] type 0 class 0x000280
[    0.778882] pci 0000:02:00.0: reg 10: [mem 0xa0400000-0xa0403fff 64bit]
[    0.779164] pci 0000:02:00.0: supports D1 D2
[    0.779166] pci 0000:02:00.0: PME# supported from D0 D3hot D3cold
[    0.779178] pci 0000:02:00.0: PME# disabled
[    0.783792] pci 0000:00:1c.1: PCI bridge to [bus 02-02]
[    0.783870] pci 0000:00:1c.1:   bridge window [mem 0xa0400000-0xa04fffff]
[    0.783938] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]
[    0.784236] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P2._PRT]
[    0.784489] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.RP02._PRT]
[    0.784724]  pci0000:00: Requesting ACPI _OSC control (0x1d)
[    0.785064]  pci0000:00: ACPI _OSC control (0x19) granted
[    0.793626] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 5 6 7 10 12 14 15) *11
[    0.794345] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 7 *11 12 14 15)
[    0.794991] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 7 10 12 14 15) *11
[    0.795692] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 7 *11 12 14 15)
[    0.796338] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 7 10 12 14 15) *0, disabled.
[    0.797093] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 7 11 12 14 15) *10
[    0.797795] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 7 10 12 14 15) *11
[    0.798497] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 7 *11 12 14 15)
[    0.799442] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none
[    0.799554] vgaarb: loaded
[    0.799616] vgaarb: bridge control possible 0000:00:02.0
[    0.799849] PCI: Using ACPI for IRQ routing
[    0.805166] PCI: pci_cache_line_size set to 64 bytes
[    0.805355] reserve RAM buffer: 000000000008f000 - 000000000008ffff 
[    0.805359] reserve RAM buffer: 000000000009fc00 - 000000000009ffff 
[    0.805362] reserve RAM buffer: 000000008ad36000 - 000000008bffffff 
[    0.805366] reserve RAM buffer: 000000016fe00000 - 000000016fffffff 
[    0.805769] NetLabel: Initializing
[    0.805833] NetLabel:  domain hash size = 128
[    0.805898] NetLabel:  protocols = UNLABELED CIPSOv4
[    0.806011] NetLabel:  unlabeled traffic allowed by default
[    0.806102] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0
[    0.806547] hpet0: 8 comparators, 64-bit 14.318180 MHz counter
[    0.808660] Switching to clocksource hpet
[    0.810387] Switched to NOHz mode on CPU #0
[    0.810480] Switched to NOHz mode on CPU #1
[    0.810485] Switched to NOHz mode on CPU #2
[    0.810491] Switched to NOHz mode on CPU #3
[    0.831214] pnp: PnP ACPI init
[    0.831319] ACPI: bus type pnp registered
[    0.831865] pnp 00:00: [bus 00-ff]
[    0.831869] pnp 00:00: [io  0x0000-0x0cf7 window]
[    0.831872] pnp 00:00: [io  0x0cf8-0x0cff]
[    0.831874] pnp 00:00: [io  0x0d00-0xffff window]
[    0.831877] pnp 00:00: [mem 0x000a0000-0x000bffff window]
[    0.831880] pnp 00:00: [mem 0x000c0000-0x000c3fff window]
[    0.831882] pnp 00:00: [mem 0x000c4000-0x000c7fff window]
[    0.831885] pnp 00:00: [mem 0x000c8000-0x000cbfff window]
[    0.831887] pnp 00:00: [mem 0x000cc000-0x000cffff window]
[    0.831890] pnp 00:00: [mem 0x000d0000-0x000d3fff window]
[    0.831892] pnp 00:00: [mem 0x000d4000-0x000d7fff window]
[    0.831895] pnp 00:00: [mem 0x000d8000-0x000dbfff window]
[    0.831898] pnp 00:00: [mem 0x000dc000-0x000dffff window]
[    0.831900] pnp 00:00: [mem 0x000e0000-0x000e3fff window]
[    0.831903] pnp 00:00: [mem 0x000e4000-0x000e7fff window]
[    0.831905] pnp 00:00: [mem 0x000e8000-0x000ebfff window]
[    0.831908] pnp 00:00: [mem 0x000ec000-0x000effff window]
[    0.831910] pnp 00:00: [mem 0x000f0000-0x000fffff window]
[    0.831913] pnp 00:00: [mem 0x8fa00000-0xfeafffff window]
[    0.831915] pnp 00:00: [mem 0xfed40000-0xfed44fff window]
[    0.832067] pnp 00:00: Plug and Play ACPI device, IDs PNP0a08 PNP0a03 (active)
[    0.832289] pnp 00:01: [io  0x0000-0x001f]
[    0.832291] pnp 00:01: [io  0x0081-0x0091]
[    0.832293] pnp 00:01: [io  0x0093-0x009f]
[    0.832295] pnp 00:01: [io  0x00c0-0x00df]
[    0.832298] pnp 00:01: [dma 4]
[    0.832377] pnp 00:01: Plug and Play ACPI device, IDs PNP0200 (active)
[    0.832393] pnp 00:02: [mem 0xff000000-0xffffffff]
[    0.832466] pnp 00:02: Plug and Play ACPI device, IDs INT0800 (active)
[    0.832581] pnp 00:03: [irq 0 disabled]
[    0.832594] pnp 00:03: [irq 8]
[    0.832597] pnp 00:03: [mem 0xfed00000-0xfed003ff]
[    0.832736] system 00:03: [mem 0xfed00000-0xfed003ff] has been reserved
[    0.832811] system 00:03: Plug and Play ACPI device, IDs PNP0103 PNP0c01 (active)
[    0.832832] pnp 00:04: [io  0x00f0]
[    0.832840] pnp 00:04: [irq 13]
[    0.832917] pnp 00:04: Plug and Play ACPI device, IDs PNP0c04 (active)
[    0.832934] pnp 00:05: [io  0x002e-0x002f]
[    0.832936] pnp 00:05: [io  0x004e-0x004f]
[    0.832938] pnp 00:05: [io  0x0061]
[    0.832940] pnp 00:05: [io  0x0063]
[    0.832942] pnp 00:05: [io  0x0065]
[    0.832944] pnp 00:05: [io  0x0067]
[    0.832946] pnp 00:05: [io  0x0080]
[    0.832948] pnp 00:05: [io  0x0092]
[    0.832952] pnp 00:05: [io  0x00b2-0x00b3]
[    0.832955] pnp 00:05: [io  0x1000-0x100f]
[    0.832957] pnp 00:05: [io  0x0400-0x047f]
[    0.832959] pnp 00:05: [io  0x0500-0x057f]
[    0.833079] system 00:05: [io  0x1000-0x100f] has been reserved
[    0.833150] system 00:05: [io  0x0400-0x047f] has been reserved
[    0.833220] system 00:05: [io  0x0500-0x057f] has been reserved
[    0.833292] system 00:05: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.833307] pnp 00:06: [io  0x0070-0x0077]
[    0.833385] pnp 00:06: Plug and Play ACPI device, IDs PNP0b00 (active)
[    0.833407] pnp 00:07: [io  0x0300-0x031f]
[    0.833415] pnp 00:07: [irq 6]
[    0.833496] pnp 00:07: Plug and Play ACPI device, IDs APP0001 (active)
[    0.833770] pnp 00:08: [mem 0xfed1c000-0xfed1ffff]
[    0.833772] pnp 00:08: [mem 0xfed10000-0xfed17fff]
[    0.833775] pnp 00:08: [mem 0xfed18000-0xfed18fff]
[    0.833777] pnp 00:08: [mem 0xfed19000-0xfed19fff]
[    0.833779] pnp 00:08: [mem 0xe0000000-0xefffffff]
[    0.833781] pnp 00:08: [mem 0xfed20000-0xfed3ffff]
[    0.833784] pnp 00:08: [mem 0xfed90000-0xfed93fff]
[    0.833786] pnp 00:08: [mem 0xfed45000-0xfed8ffff]
[    0.833788] pnp 00:08: [mem 0xff000000-0xffffffff]
[    0.833791] pnp 00:08: [mem 0xfee00000-0xfeefffff]
[    0.833793] pnp 00:08: [mem 0x00000000-0xffffffffffffffff disabled]
[    0.833930] system 00:08: [mem 0xfed1c000-0xfed1ffff] has been reserved
[    0.834004] system 00:08: [mem 0xfed10000-0xfed17fff] could not be reserved
[    0.834076] system 00:08: [mem 0xfed18000-0xfed18fff] has been reserved
[    0.834148] system 00:08: [mem 0xfed19000-0xfed19fff] has been reserved
[    0.834219] system 00:08: [mem 0xe0000000-0xefffffff] has been reserved
[    0.834290] system 00:08: [mem 0xfed20000-0xfed3ffff] has been reserved
[    0.834362] system 00:08: [mem 0xfed90000-0xfed93fff] has been reserved
[    0.834433] system 00:08: [mem 0xfed45000-0xfed8ffff] has been reserved
[    0.834507] system 00:08: [mem 0xff000000-0xffffffff] could not be reserved
[    0.834580] system 00:08: [mem 0xfee00000-0xfeefffff] could not be reserved
[    0.834654] system 00:08: Plug and Play ACPI device, IDs PNP0c02 (active)
[    0.841615] pnp 00:09: [mem 0x20000000-0x201fffff]
[    0.841618] pnp 00:09: [mem 0x40000000-0x401fffff]
[    0.841784] system 00:09: [mem 0x20000000-0x201fffff] has been reserved
[    0.841858] system 00:09: [mem 0x40000000-0x401fffff] has been reserved
[    0.841932] system 00:09: Plug and Play ACPI device, IDs PNP0c01 (active)
[    0.841947] pnp: PnP ACPI: found 10 devices
[    0.842012] ACPI: ACPI bus type pnp unregistered
[    0.851305] PCI: max bus depth: 3 pci_try_num: 4
[    0.851386] pci 0000:04:00.0: PCI bridge to [bus 05-05]
[    0.851458] pci 0000:04:00.0:   bridge window [mem 0xa0700000-0xa07fffff]
[    0.851538] pci 0000:04:03.0: PCI bridge to [bus 06-36]
[    0.851610] pci 0000:04:03.0:   bridge window [mem 0xa0800000-0xa08fffff]
[    0.851689] pci 0000:04:04.0: PCI bridge to [bus 37-67]
[    0.851760] pci 0000:04:04.0:   bridge window [mem 0xa0900000-0xa09fffff]
[    0.851840] pci 0000:03:00.0: PCI bridge to [bus 04-67]
[    0.851911] pci 0000:03:00.0:   bridge window [mem 0xa0700000-0xa09fffff]
[    0.851990] pci 0000:00:01.0: PCI bridge to [bus 03-97]
[    0.852058] pci 0000:00:01.0:   bridge window [io  0x3000-0x3fff]
[    0.852142] pci 0000:00:01.0:   bridge window [mem 0xa0700000-0xa49fffff]
[    0.852216] pci 0000:00:01.0:   bridge window [mem 0xa4a00000-0xa89fffff 64bit pref]
[    0.852305] pci 0000:00:1c.0: PCI bridge to [bus 01-01]
[    0.852380] pci 0000:00:1c.0:   bridge window [mem 0xa0500000-0xa05fffff]
[    0.852464] pci 0000:00:1c.1: PCI bridge to [bus 02-02]
[    0.852539] pci 0000:00:1c.1:   bridge window [mem 0xa0400000-0xa04fffff]
[    0.852639] pci 0000:00:01.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.852712] pci 0000:00:01.0: setting latency timer to 64
[    0.852721] pci 0000:03:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.852796] pci 0000:03:00.0: setting latency timer to 64
[    0.852805] pci 0000:04:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.852878] pci 0000:04:00.0: setting latency timer to 64
[    0.852887] pci 0000:04:03.0: enabling device (0000 -> 0002)
[    0.852962] pci 0000:04:03.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19
[    0.853538] pci 0000:04:03.0: setting latency timer to 64
[    0.853546] pci 0000:04:04.0: enabling device (0000 -> 0002)
[    0.853617] pci 0000:04:04.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.853692] pci 0000:04:04.0: setting latency timer to 64
[    0.853700] pci 0000:00:1c.0: enabling device (0000 -> 0002)
[    0.853772] pci 0000:00:1c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[    0.853849] pci 0000:00:1c.0: setting latency timer to 64
[    0.853935] pci 0000:00:1c.1: power state changed by ACPI to D0
[    0.854010] pci 0000:00:1c.1: power state changed by ACPI to D0
[    0.854089] pci 0000:00:1c.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17
[    0.854164] pci 0000:00:1c.1: setting latency timer to 64
[    0.854170] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7]
[    0.854173] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff]
[    0.854176] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff]
[    0.854179] pci_bus 0000:00: resource 7 [mem 0x8fa00000-0xfeafffff]
[    0.854181] pci_bus 0000:00: resource 8 [mem 0xfed40000-0xfed44fff]
[    0.854184] pci_bus 0000:03: resource 0 [io  0x3000-0x3fff]
[    0.854187] pci_bus 0000:03: resource 1 [mem 0xa0700000-0xa49fffff]
[    0.854190] pci_bus 0000:03: resource 2 [mem 0xa4a00000-0xa89fffff 64bit pref]
[    0.854193] pci_bus 0000:04: resource 1 [mem 0xa0700000-0xa09fffff]
[    0.854195] pci_bus 0000:05: resource 1 [mem 0xa0700000-0xa07fffff]
[    0.854198] pci_bus 0000:06: resource 1 [mem 0xa0800000-0xa08fffff]
[    0.854201] pci_bus 0000:37: resource 1 [mem 0xa0900000-0xa09fffff]
[    0.854204] pci_bus 0000:01: resource 1 [mem 0xa0500000-0xa05fffff]
[    0.854207] pci_bus 0000:02: resource 1 [mem 0xa0400000-0xa04fffff]
[    0.854325] NET: Registered protocol family 2
[    0.854725] IP route cache hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.856550] TCP established hash table entries: 524288 (order: 11, 8388608 bytes)
[    0.858811] TCP bind hash table entries: 65536 (order: 10, 4194304 bytes)
[    0.864724] TCP: Hash tables configured (established 524288 bind 65536)
[    0.864824] TCP reno registered
[    0.864940] UDP hash table entries: 2048 (order: 6, 327680 bytes)
[    0.865423] UDP-Lite hash table entries: 2048 (order: 6, 327680 bytes)
[    0.866136] NET: Registered protocol family 1
[    0.866228] pci 0000:00:02.0: Boot video device
[    0.866656] PCI: CLS 256 bytes, default 64
[    0.866808] Unpacking initramfs...
[    0.942156] Freeing initrd memory: 2900k freed
[    0.942771] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[    0.942848] Placing 64MB software IO TLB between ffff880086d31000 - ffff88008ad31000
[    0.942935] software IO TLB at phys 0x86d31000 - 0x8ad31000
[    0.943996] audit: initializing netlink socket (disabled)
[    0.944104] type=2000 audit(1319033750.783:1): initialized
[    0.950358] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[    0.965451] VFS: Disk quotas dquot_6.5.2
[    0.965735] Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.966291] msgmni has been set to 7713
[    0.966862] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
[    0.967020] io scheduler noop registered
[    0.967085] io scheduler deadline registered
[    0.967228] io scheduler cfq registered (default)
[    0.967577] pcieport 0000:00:01.0: setting latency timer to 64
[    0.967647] pcieport 0000:00:01.0: irq 40 for MSI/MSI-X
[    0.967948] pcieport 0000:03:00.0: setting latency timer to 64
[    0.968000] pcieport 0000:03:00.0: irq 41 for MSI/MSI-X
[    0.968133] pcieport 0000:04:00.0: setting latency timer to 64
[    0.968187] pcieport 0000:04:00.0: irq 42 for MSI/MSI-X
[    0.968319] pcieport 0000:04:03.0: setting latency timer to 64
[    0.968373] pcieport 0000:04:03.0: irq 43 for MSI/MSI-X
[    0.968507] pcieport 0000:04:04.0: setting latency timer to 64
[    0.968561] pcieport 0000:04:04.0: irq 44 for MSI/MSI-X
[    0.969165] intel_idle: MWAIT substates: 0x21120
[    0.969167] intel_idle: v0.4 model 0x2A
[    0.969169] intel_idle: lapic_timer_reliable_states 0xffffffff
[    0.969325] ERST: Table is not found!
[    0.969389] GHES: HEST is not enabled!
[    0.969566] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    1.162470] Linux agpgart interface v0.103
[    1.162784] i8042: PNP: No PS/2 controller found. Probing ports directly.
[    1.163746] i8042: No controller found
[    1.163999] mousedev: PS/2 mouse device common for all mice
[    1.164247] rtc_cmos 00:06: RTC can wake from S4
[    1.164627] rtc_cmos 00:06: rtc core: registered rtc_cmos as rtc0
[    1.164742] rtc0: alarms up to one month, y3k, 242 bytes nvram, hpet irqs
[    1.165089] cpuidle: using governor ladder
[    1.165842] cpuidle: using governor menu
[    1.166586] TCP cubic registered
[    1.166651] NET: Registered protocol family 17
[    1.166725] Registering the dns_resolver key type
[    1.167162] PM: Hibernation image not present or could not be loaded.
[    1.167170] registered taskstats version 1
[    1.173688] rtc_cmos 00:06: setting system clock to 2011-10-19 14:15:51 UTC (1319033751)
[    1.173909] Initializing network drop monitor service
[    1.176280] Freeing unused kernel memory: 724k freed
[    1.176480] Write protecting the kernel read-only data: 8192k
[    1.184106] Freeing unused kernel memory: 1832k freed
[    1.185584] Freeing unused kernel memory: 232k freed
[    1.222920] udevd[86]: starting version 173
[    1.310946] usbcore: registered new interface driver usbfs
[    1.311119] usbcore: registered new interface driver hub
[    1.312400] usbcore: registered new device driver usb
[    1.316252] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.316413] ehci_hcd 0000:00:1a.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23
[    1.316549] ehci_hcd 0000:00:1a.7: setting latency timer to 64
[    1.316557] ehci_hcd 0000:00:1a.7: EHCI Host Controller
[    1.317271] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 1
[    1.317472] ehci_hcd 0000:00:1a.7: debug port 2
[    1.320149] SCSI subsystem initialized
[    1.321452] ehci_hcd 0000:00:1a.7: cache line size of 256 is not supported
[    1.321504] ehci_hcd 0000:00:1a.7: irq 23, io mem 0xa0606c00
[    1.323978] libata version 3.00 loaded.
[    1.335253] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00
[    1.337448] hub 1-0:1.0: USB hub found
[    1.337579] hub 1-0:1.0: 6 ports detected
[    1.338845] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 22 (level, low) -> IRQ 22
[    1.338987] ehci_hcd 0000:00:1d.7: setting latency timer to 64
[    1.338995] ehci_hcd 0000:00:1d.7: EHCI Host Controller
[    1.339111] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 2
[    1.339273] ehci_hcd 0000:00:1d.7: debug port 2
[    1.343222] ehci_hcd 0000:00:1d.7: cache line size of 256 is not supported
[    1.343258] ehci_hcd 0000:00:1d.7: irq 22, io mem 0xa0606800
[    1.355262] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00
[    1.355774] hub 2-0:1.0: USB hub found
[    1.355851] hub 2-0:1.0: 8 ports detected
[    1.356165] ata_piix 0000:00:1f.2: version 2.13
[    1.356188] ata_piix 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19
[    1.356270] ata_piix 0000:00:1f.2: MAP [ P0 P2 P1 P3 ]
[    1.416549] uhci_hcd: USB Universal Host Controller Interface driver
[    1.508579] ata_piix 0000:00:1f.2: setting latency timer to 64
[    1.509840] scsi0 : ata_piix
[    1.510388] scsi1 : ata_piix
[    1.510914] ata1: SATA max UDMA/133 cmd 0x2168 ctl 0x217c bmdma 0x2060 irq 19
[    1.510991] ata2: SATA max UDMA/133 cmd 0x2160 ctl 0x2178 bmdma 0x2068 irq 19
[    1.511163] uhci_hcd 0000:00:1a.0: PCI INT B -> GSI 21 (level, low) -> IRQ 21
[    1.511268] uhci_hcd 0000:00:1a.0: setting latency timer to 64
[    1.511274] uhci_hcd 0000:00:1a.0: UHCI Host Controller
[    1.511373] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 3
[    1.511535] uhci_hcd 0000:00:1a.0: irq 21, io base 0x00002140
[    1.511982] hub 3-0:1.0: USB hub found
[    1.512059] hub 3-0:1.0: 2 ports detected
[    1.512311] uhci_hcd 0000:00:1d.0: PCI INT B -> GSI 19 (level, low) -> IRQ 19
[    1.512393] uhci_hcd 0000:00:1d.0: setting latency timer to 64
[    1.512398] uhci_hcd 0000:00:1d.0: UHCI Host Controller
[    1.512481] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 4
[    1.512597] uhci_hcd 0000:00:1d.0: irq 19, io base 0x000020e0
[    1.512970] hub 4-0:1.0: USB hub found
[    1.513044] hub 4-0:1.0: 2 ports detected
[    1.641810] usb 1-1: new high speed USB device number 2 using ehci_hcd
[    1.766533] hub 1-1:1.0: USB hub found
[    1.766760] hub 1-1:1.0: 3 ports detected
[    1.871644] usb 1-2: new high speed USB device number 3 using ehci_hcd
[    1.945013] Refined TSC clocksource calibration: 1700.011 MHz.
[    1.945110] Switching to clocksource tsc
[    2.118180] usb 2-1: new high speed USB device number 2 using ehci_hcd
[    2.242718] hub 2-1:1.0: USB hub found
[    2.242882] hub 2-1:1.0: 2 ports detected
[    2.321674] usb 1-1.1: new full speed USB device number 4 using ehci_hcd
[    2.420942] hub 1-1.1:1.0: USB hub found
[    2.421114] hub 1-1.1:1.0: 3 ports detected
[    2.501565] usb 1-1.2: new full speed USB device number 5 using ehci_hcd
[    2.531273] ata2.00: failed to resume link (SControl 0)
[    2.629216] usbcore: registered new interface driver usbhid
[    2.629288] usbhid: USB HID core driver
[    2.648373] input: Apple Inc. Apple Internal Keyboard / Trackpad as /devices/pci0000:00/0000:00:1a.7/usb1/1-1/1-1.2/1-1.2:1.0/input/input0
[    2.649062] apple 0003:05AC:024D.0001: input,hidraw0: USB HID v1.11 Keyboard [Apple Inc. Apple Internal Keyboard / Trackpad] on usb-0000:00:1a.7-1.2/input0
[    2.688084] usb 2-1.1: new high speed USB device number 3 using ehci_hcd
[    2.730091] apple 0003:05AC:024D.0002: hidraw1: USB HID v1.11 Device [Apple Inc. Apple Internal Keyboard / Trackpad] on usb-0000:00:1a.7-1.2/input1
[    2.854396] ata1.01: failed to resume link (SControl 0)
[    2.867955] usb 1-1.1.1: new full speed USB device number 6 using ehci_hcd
[    2.956335] input: HID 05ac:820a as /devices/pci0000:00/0000:00:1a.7/usb1/1-1/1-1.1/1-1.1.1/1-1.1.1:1.0/input/input1
[    2.956663] generic-usb 0003:05AC:820A.0003: input,hidraw2: USB HID v1.11 Keyboard [HID 05ac:820a] on usb-0000:00:1a.7-1.1.1/input0
[    3.007704] ata1.00: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    3.007790] ata1.01: SATA link down (SStatus 0 SControl 0)
[    3.014701] ata1.00: ATA-8: APPLE SSD SM256C, AXM09A1Q, max UDMA/133
[    3.014777] ata1.00: 490234752 sectors, multi 16: LBA48 NCQ (depth 0/32)
[    3.021237] ata1.00: configured for UDMA/133
[    3.022076] scsi 0:0:0:0: Direct-Access     ATA      APPLE SSD SM256C AXM0 PQ: 0 ANSI: 5
[    3.034472] usb 1-1.1.2: new full speed USB device number 7 using ehci_hcd
[    3.122489] input: HID 05ac:820b as /devices/pci0000:00/0000:00:1a.7/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/input/input2
[    3.123393] generic-usb 0003:05AC:820B.0004: input,hidraw3: USB HID v1.11 Mouse [HID 05ac:820b] on usb-0000:00:1a.7-1.1.2/input0
[    3.187768] usb 1-1.1.3: new full speed USB device number 8 using ehci_hcd
[    3.554032] ata2.01: failed to resume link (SControl 0)
[    3.565710] ata2.00: SATA link down (SStatus 0 SControl 0)
[    3.565792] ata2.01: SATA link down (SStatus 0 SControl 0)
[    3.576271] sd 0:0:0:0: [sda] 490234752 512-byte logical blocks: (251 GB/233 GiB)
[    3.576550] sd 0:0:0:0: [sda] Write Protect is off
[    3.576620] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    3.576675] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    3.582532]  sda: sda1 sda2 sda3 sda4 sda5
[    3.583900] sd 0:0:0:0: [sda] Attached SCSI disk
[    3.842194] device-mapper: uevent: version 1.0.3
[    3.842771] device-mapper: ioctl: 4.21.0-ioctl (2011-07-06) initialised: dm-devel@redhat.com
[    9.610920] padlock_aes: VIA PadLock not detected.
[    9.852708] JFS: nTxBlock = 8192, nTxLock = 65536
[   10.233302] udevd[361]: starting version 173
[   10.314517] ACPI: acpi_idle yielding to intel_idle
[   10.320241] input: Lid Switch as /devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input3
[   10.335714] ACPI: Lid Switch [LID0]
[   10.338545] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input4
[   10.338653] ACPI: Power Button [PWRB]
[   10.339092] input: Sleep Button as /devices/LNXSYSTM:00/device:00/PNP0C0E:00/input/input5
[   10.339186] ACPI: Sleep Button [SLPB]
[   10.340804] ACPI: AC Adapter [ADP1] (off-line)
[   10.341260] agpgart-intel 0000:00:00.0: Intel Sandybridge Chipset
[   10.341659] agpgart-intel 0000:00:00.0: detected gtt size: 2097152K total, 262144K mappable
[   10.343797] agpgart-intel 0000:00:00.0: detected 65536K stolen memory
[   10.344181] agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0x90000000
[   10.352371] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input6
[   10.352469] ACPI: Power Button [PWRF]
[   10.378805] mei: module is from the staging directory, the quality is unknown, you have been warned.
[   10.380107] mei 0000:00:16.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[   10.380186] mei 0000:00:16.0: setting latency timer to 64
[   10.398049] iTCO_vendor_support: vendor-support=0
[   10.410520] input: PC Speaker as /devices/platform/pcspkr/input/input7
[   10.412094] i801_smbus 0000:00:1f.3: PCI INT C -> GSI 18 (level, low) -> IRQ 18
[   10.442799] ACPI: Battery Slot [BAT0] (battery present)
[   10.456370] cfg80211: Calling CRDA to update world regulatory domain
[   10.459252] sd 0:0:0:0: Attached scsi generic sg0 type 0
[   10.459761] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.06
[   10.460046] iTCO_wdt: unable to reset NO_REBOOT flag, device disabled by hardware/BIOS
[   10.462597] brcmutil: module is from the staging directory, the quality is unknown, you have been warned.
[   10.473923] [drm] Initialized drm 1.1.0 20060810
[   10.490146] brcmsmac: module is from the staging directory, the quality is unknown, you have been warned.
[   10.493356] brcmsmac 0000:02:00.0: bus 2 slot 0 func 0 irq 11
[   10.493497] brcmsmac 0000:02:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
[   10.493730] brcmsmac 0000:02:00.0: setting latency timer to 64
[   10.511557] i915 0000:00:02.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[   10.511638] i915 0000:00:02.0: setting latency timer to 64
[   10.555871] applesmc: : read arg fail
[   10.642572] Linux media interface: v0.10
[   10.644846] usbcore: registered new interface driver uas
[   10.653241] input: bcm5974 as /devices/pci0000:00/0000:00:1a.7/usb1/1-1/1-1.2/1-1.2:1.2/input/input8
[   10.653300] Linux video capture interface: v2.00
[   10.653699] applesmc: : read arg fail
[   10.657827] Initializing USB Mass Storage driver...
[   10.660753] uvcvideo: Found UVC 1.00 device FaceTime Camera (Built-in) (05ac:850a)
[   10.661910] scsi2 : usb-storage 2-1.1:1.0
[   10.670584] usbcore: registered new interface driver bcm5974
[   10.676045] input: FaceTime Camera (Built-in) as /devices/pci0000:00/0000:00:1a.7/usb1/1-2/1-2:1.0/input/input9
[   10.679645] usbcore: registered new interface driver uvcvideo
[   10.679916] USB Video Class driver (1.1.1)
[   10.680020] usbcore: registered new interface driver usb-storage
[   10.680098] USB Mass Storage support registered.
[   10.713146] applesmc: key=349 fan=1 temp=25 acc=0 lux=2 kbd=1
[   10.713228] applesmc: init_smcreg() took 100 ms
[   10.718500] Registered led device: smc::kbd_backlight
[   10.753519] i915 0000:00:02.0: irq 45 for MSI/MSI-X
[   10.753537] [drm] Supports vblank timestamp caching Rev 1 (10.10.2010).
[   10.753622] [drm] Driver supports precise vblank timestamp query.
[   10.753868] [drm:intel_dsm_platform_mux_info] *ERROR* MUX INFO call failed
[   10.754301] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem
[   10.757999] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
[   11.701802] scsi 2:0:0:0: Direct-Access     APPLE    SD Card Reader   2.00 PQ: 0 ANSI: 0
[   11.702777] sd 2:0:0:0: Attached scsi generic sg1 type 0
[   11.705063] sd 2:0:0:0: [sdb] Attached SCSI removable disk
[   11.945768] fbcon: inteldrmfb (fb0) is primary device
[   12.936099] [drm:intel_dp_complete_link_train] *ERROR* failed to train DP, aborting
[   12.962545] Console: switching to colour frame buffer device 180x56
[   12.966402] fb0: inteldrmfb frame buffer device
[   12.966429] drm: registered panic notifier
[   12.997626] acpi device:0d: registered as cooling_device4
[   12.998133] input: Video Bus as /devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:00/input/input10
[   12.998389] ACPI: Video Device [IGPU] (multi-head: yes  rom: no  post: no)
[   12.998589] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0
[   12.998809] snd_hda_intel 0000:00:1b.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22
[   12.999008] snd_hda_intel 0000:00:1b.0: irq 46 for MSI/MSI-X
[   12.999085] snd_hda_intel 0000:00:1b.0: setting latency timer to 64
[   13.556883] HDMI status: Codec=3 Pin=5 Presence_Detect=0 ELD_Valid=0
[   13.557255] HDMI status: Codec=3 Pin=6 Presence_Detect=0 ELD_Valid=0
[   13.557630] HDMI status: Codec=3 Pin=7 Presence_Detect=0 ELD_Valid=0
[   13.562785] input: HDA Intel PCH HDMI/DP as /devices/pci0000:00/0000:00:1b.0/sound/card0/input11
[   13.563030] input: HDA Intel PCH HDMI/DP as /devices/pci0000:00/0000:00:1b.0/sound/card0/input12
[   13.563265] input: HDA Intel PCH HDMI/DP as /devices/pci0000:00/0000:00:1b.0/sound/card0/input13
[   13.812348] EXT4-fs (sda4): mounted filesystem with ordered data mode. Opts: (null)
[   71.643988] ieee80211 phy0: brcms_ops_config: change monitor mode: false (implement)
[   71.643994] ieee80211 phy0: brcms_ops_config: change power-save mode: false (implement)
[   71.656555] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[   73.745443] ieee80211 phy0: brcms_ops_config: change monitor mode: false (implement)
[   73.745449] ieee80211 phy0: brcms_ops_config: change power-save mode: false (implement)
[   73.751221] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[   78.000815] wlan0: direct probe to 00:03:52:e3:0e:10 (try 1/3)
[   78.001652] wlan0: direct probe responded
[   78.030787] wlan0: authenticate with 00:03:52:e3:0e:10 (try 1)
[   78.036342] wlan0: authenticated
[   78.071152] wlan0: associate with 00:03:52:e3:0e:10 (try 1)
[   78.082597] wlan0: RX AssocResp from 00:03:52:e3:0e:10 (capab=0x11 status=0 aid=2)
[   78.082601] wlan0: associated
[   78.083520] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[   78.083528] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: associated
[   78.083554] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
[   78.102023] ------------[ cut here ]------------
[   78.102041] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[   78.102044] Hardware name: MacBookAir4,2
[   78.102046] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[   78.102118] Pid: 0, comm: swapper Tainted: G         C  3.1.0-rc6-gbee709a #3
[   78.102121] Call Trace:
[   78.102123]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[   78.102136]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[   78.102141]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[   78.102151]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[   78.102155]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[   78.102161]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[   78.102165]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[   78.102172]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[   78.102177]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[   78.102181]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[   78.102186]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[   78.102191]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[   78.102195]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[   78.102200]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[   78.102203]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[   78.102205]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[   78.102215]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[   78.102220]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[   78.102224]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[   78.102229]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[   78.102234]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[   78.102239]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[   78.102243]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[   78.102247]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[   78.102251]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[   78.102254] ---[ end trace 7e7e66110d68d9fe ]---
[   79.085714] ------------[ cut here ]------------
[   79.085736] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[   79.085739] Hardware name: MacBookAir4,2
[   79.085741] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[   79.085815] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[   79.085818] Call Trace:
[   79.085820]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[   79.085834]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[   79.085839]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[   79.085849]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[   79.085854]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[   79.085860]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[   79.085864]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[   79.085871]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[   79.085876]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[   79.085880]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[   79.085885]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[   79.085891]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[   79.085895]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[   79.085899]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[   79.085903]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[   79.085905]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[   79.085915]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[   79.085921]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[   79.085925]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[   79.085930]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[   79.085935]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[   79.085941]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[   79.085945]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[   79.085949]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[   79.085953]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[   79.085956] ---[ end trace 7e7e66110d68d9ff ]---
[   88.079087] wlan0: disassociating from 00:03:52:e3:0e:10 by local choice (reason=3)
[   88.080016] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[   88.080064] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: disassociated
[   88.080075] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled false, count 0 (implement)
[   88.118707] cfg80211: Calling CRDA for country: X3
[   88.119357] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local choice (reason=3)
[   90.077860] wlan0: direct probe to 00:03:52:2c:01:00 (try 1/3)
[   90.277009] wlan0: direct probe to 00:03:52:2c:01:00 (try 2/3)
[   90.477526] wlan0: direct probe to 00:03:52:2c:01:00 (try 3/3)
[   90.496336] wlan0: direct probe responded
[   90.523522] wlan0: authenticate with 00:03:52:2c:01:00 (try 1)
[   90.723398] wlan0: authenticate with 00:03:52:2c:01:00 (try 2)
[   90.855260] wlan0: authenticated
[   90.886270] wlan0: associate with 00:03:52:2c:01:00 (try 1)
[   90.896305] wlan0: RX ReassocResp from 00:03:52:2c:01:00 (capab=0x421 status=17 aid=0)
[   90.896310] wlan0: 00:03:52:2c:01:00 denied association (code=17)
[   90.908474] wlan0: deauthenticating from 00:03:52:2c:01:00 by local choice (reason=3)
[  159.960725] ieee80211 phy0: brcms_ops_config: change monitor mode: false (implement)
[  159.960731] ieee80211 phy0: brcms_ops_config: change power-save mode: false (implement)
[  159.984034] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  162.063907] wlan0: authenticate with 00:03:52:e3:0e:10 (try 1)
[  162.064485] wlan0: authenticated
[  162.064622] wlan0: associate with 00:03:52:e3:0e:10 (try 1)
[  162.065168] wlan0: RX AssocResp from 00:03:52:e3:0e:10 (capab=0x11 status=0 aid=2)
[  162.065171] wlan0: associated
[  162.065992] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  162.065998] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: associated
[  162.066024] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
[  162.070581] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  162.070597] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: disassociated
[  162.070610] ------------[ cut here ]------------
[  162.070626] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  162.070630] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled false, count 0 (implement)
[  162.070633] Hardware name: MacBookAir4,2
[  162.070635] Modules linked in: ext4
[  162.070638] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  162.070641]  mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  162.070710] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  162.070712] Call Trace:
[  162.070715]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  162.070728]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  162.070733]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  162.070743]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  162.070748]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  162.070754]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  162.070758]  [<ffffffff8142bdb7>] ? _raw_spin_unlock_irqrestore+0x77/0x80
[  162.070765]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  162.070770]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  162.070774]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  162.070780]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  162.070786]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  162.070789]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  162.070794]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  162.070798]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  162.070800]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  162.070811]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  162.070816]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  162.070820]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  162.070825]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  162.070829]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  162.070835]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  162.070839]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  162.070843]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  162.070847]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  162.070850] ---[ end trace 7e7e66110d68da00 ]---
[  162.112229] cfg80211: Calling CRDA to update world regulatory domain
[  164.254967] ieee80211 phy0: brcms_ops_config: change monitor mode: false (implement)
[  164.254972] ieee80211 phy0: brcms_ops_config: change power-save mode: false (implement)
[  164.278260] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  166.364775] wlan0: authenticate with 00:03:52:e3:0e:10 (try 1)
[  166.365295] wlan0: authenticated
[  166.365465] wlan0: associate with 00:03:52:e3:0e:10 (try 1)
[  166.366237] wlan0: RX AssocResp from 00:03:52:e3:0e:10 (capab=0x11 status=0 aid=2)
[  166.366242] wlan0: associated
[  166.366962] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  166.366967] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: associated
[  166.366991] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
[  166.372368] ------------[ cut here ]------------
[  166.372387] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  166.372390] Hardware name: MacBookAir4,2
[  166.372392] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  166.372466] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  166.372469] Call Trace:
[  166.372471]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  166.372485]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  166.372490]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  166.372500]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  166.372505]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  166.372511]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  166.372515]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  166.372522]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  166.372527]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  166.372531]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  166.372537]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  166.372542]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  166.372546]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  166.372551]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  166.372554]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  166.372556]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  166.372566]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  166.372572]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  166.372576]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  166.372581]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  166.372585]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  166.372591]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  166.372595]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  166.372599]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  166.372603]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  166.372606] ---[ end trace 7e7e66110d68da01 ]---
[  167.369649] ------------[ cut here ]------------
[  167.369668] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  167.369671] Hardware name: MacBookAir4,2
[  167.369673] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  167.369748] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  167.369751] Call Trace:
[  167.369753]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  167.369766]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  167.369771]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  167.369780]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  167.369785]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  167.369791]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  167.369795]  [<ffffffff8142bdb7>] ? _raw_spin_unlock_irqrestore+0x77/0x80
[  167.369802]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  167.369807]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  167.369811]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  167.369816]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  167.369822]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  167.369826]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  167.369830]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  167.369834]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  167.369836]  <EOI>  [<ffffffff8142c378>] ? retint_restore_args+0x13/0x13
[  167.369845]  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  167.369850]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  167.369855]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  167.369860]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  167.369865]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  167.369869]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  167.369874]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  167.369878]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  167.369883]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  167.369886]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  167.369890] ---[ end trace 7e7e66110d68da02 ]---
[  176.362881] wlan0: disassociating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  176.363443] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  176.363455] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: disassociated
[  176.363467] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled false, count 0 (implement)
[  176.390511] cfg80211: Calling CRDA to update world regulatory domain
[  176.390953] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  178.331135] wlan0: authenticate with 00:03:52:e3:0e:10 (try 1)
[  178.332034] wlan0: authenticated
[  178.332200] wlan0: associate with 00:03:52:e3:0e:10 (try 1)
[  178.332858] wlan0: RX ReassocResp from 00:03:52:e3:0e:10 (capab=0x11 status=0 aid=1)
[  178.332863] wlan0: associated
[  178.333589] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  178.333595] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: associated
[  178.333621] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
[  178.340395] ------------[ cut here ]------------
[  178.340414] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  178.340417] Hardware name: MacBookAir4,2
[  178.340419] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  178.340491] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  178.340494] Call Trace:
[  178.340496]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  178.340510]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  178.340515]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  178.340524]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  178.340529]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  178.340535]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  178.340540]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  178.340547]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  178.340552]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  178.340556]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  178.340561]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  178.340566]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  178.340570]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  178.340575]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  178.340578]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  178.340581]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  178.340591]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  178.340596]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  178.340600]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  178.340605]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  178.340610]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  178.340616]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  178.340620]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  178.340624]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  178.340628]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  178.340631] ---[ end trace 7e7e66110d68da03 ]---
[  178.392297] ------------[ cut here ]------------
[  178.392312] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  178.392315] Hardware name: MacBookAir4,2
[  178.392317] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  178.392383] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  178.392386] Call Trace:
[  178.392387]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  178.392398]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  178.392403]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  178.392412]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  178.392416]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  178.392421]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  178.392425]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  178.392432]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  178.392437]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  178.392441]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  178.392445]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  178.392449]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  178.392453]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  178.392457]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  178.392461]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  178.392463]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  178.392475]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  178.392479]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  178.392483]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  178.392487]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  178.392492]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  178.392496]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  178.392500]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  178.392504]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  178.392508]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  178.392511] ---[ end trace 7e7e66110d68da04 ]---
[  181.431730] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  181.431746] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: disassociated
[  181.431758] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled false, count 0 (implement)
[  181.431767] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  181.447579] cfg80211: Calling CRDA to update world regulatory domain
[  263.195643] ieee80211 phy0: brcms_ops_config: change monitor mode: false (implement)
[  263.195649] ieee80211 phy0: brcms_ops_config: change power-save mode: false (implement)
[  263.219103] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  267.436581] ieee80211 phy0: brcms_ops_config: change monitor mode: false (implement)
[  267.436587] ieee80211 phy0: brcms_ops_config: change power-save mode: false (implement)
[  267.460076] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  269.538261] wlan0: authenticate with 00:03:52:e3:0e:10 (try 1)
[  269.538827] wlan0: authenticated
[  269.539011] wlan0: associate with 00:03:52:e3:0e:10 (try 1)
[  269.539555] wlan0: RX AssocResp from 00:03:52:e3:0e:10 (capab=0x11 status=0 aid=1)
[  269.539560] wlan0: associated
[  269.540454] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  269.540463] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: associated
[  269.540492] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
[  269.543383] ------------[ cut here ]------------
[  269.543402] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  269.543405] Hardware name: MacBookAir4,2
[  269.543407] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  269.543480] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  269.543482] Call Trace:
[  269.543484]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  269.543499]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  269.543503]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  269.543513]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  269.543518]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  269.543524]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  269.543529]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  269.543536]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  269.543541]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  269.543545]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  269.543550]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  269.543556]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  269.543560]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  269.543564]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  269.543568]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  269.543570]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  269.543580]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  269.543585]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  269.543589]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  269.543595]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  269.543599]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  269.543605]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  269.543609]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  269.543613]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  269.543617]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  269.543620] ---[ end trace 7e7e66110d68da05 ]---
[  270.544059] ------------[ cut here ]------------
[  270.544082] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  270.544086] Hardware name: MacBookAir4,2
[  270.544089] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  270.544202] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  270.544207] Call Trace:
[  270.544210]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  270.544227]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  270.544234]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  270.544248]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  270.544255]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  270.544263]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  270.544270]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  270.544280]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  270.544287]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  270.544293]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  270.544301]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  270.544308]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  270.544314]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  270.544321]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  270.544327]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  270.544330]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  270.544344]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  270.544351]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  270.544357]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  270.544365]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  270.544371]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  270.544378]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  270.544385]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  270.544391]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  270.544398]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  270.544403] ---[ end trace 7e7e66110d68da06 ]---
[  279.536625] wlan0: disassociating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  279.537214] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  279.537230] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: disassociated
[  279.537243] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled false, count 0 (implement)
[  279.567326] cfg80211: Calling CRDA to update world regulatory domain
[  279.568299] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  281.507957] wlan0: authenticate with 00:03:52:e3:0e:10 (try 1)
[  281.508400] wlan0: authenticated
[  281.508522] wlan0: associate with 00:03:52:e3:0e:10 (try 1)
[  281.509161] wlan0: RX ReassocResp from 00:03:52:e3:0e:10 (capab=0x11 status=0 aid=1)
[  281.509166] wlan0: associated
[  281.509982] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  281.509992] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: associated
[  281.510023] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
[  281.516503] ------------[ cut here ]------------
[  281.516522] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  281.516525] Hardware name: MacBookAir4,2
[  281.516527] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  281.516599] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  281.516602] Call Trace:
[  281.516604]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  281.516618]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  281.516623]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  281.516632]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  281.516637]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  281.516643]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  281.516647]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  281.516655]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  281.516659]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  281.516663]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  281.516668]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  281.516674]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  281.516677]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  281.516682]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  281.516686]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  281.516688]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  281.516698]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  281.516703]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  281.516707]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  281.516712]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  281.516716]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  281.516721]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  281.516726]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  281.516729]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  281.516733]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  281.516736] ---[ end trace 7e7e66110d68da07 ]---
[  281.569697] ------------[ cut here ]------------
[  281.569712] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  281.569715] Hardware name: MacBookAir4,2
[  281.569717] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  281.569784] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  281.569786] Call Trace:
[  281.569788]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  281.569798]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  281.569803]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  281.569813]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  281.569817]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  281.569821]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  281.569826]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  281.569833]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  281.569837]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  281.569841]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  281.569846]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  281.569850]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  281.569853]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  281.569858]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  281.569861]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  281.569863]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  281.569872]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  281.569876]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  281.569880]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  281.569885]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  281.569889]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  281.569894]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  281.569898]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  281.569902]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  281.569906]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  281.569908] ---[ end trace 7e7e66110d68da08 ]---
[  284.613413] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  284.613428] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: disassociated
[  284.613441] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled false, count 0 (implement)
[  284.613449] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  284.627868] cfg80211: Calling CRDA to update world regulatory domain
[  306.209575] ieee80211 phy0: brcms_ops_config: change monitor mode: false (implement)
[  306.209581] ieee80211 phy0: brcms_ops_config: change power-save mode: false (implement)
[  306.233674] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  310.418058] ieee80211 phy0: brcms_ops_config: change monitor mode: false (implement)
[  310.418064] ieee80211 phy0: brcms_ops_config: change power-save mode: false (implement)
[  310.441395] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  312.539968] wlan0: authenticate with 00:03:52:e3:0e:10 (try 1)
[  312.540603] wlan0: authenticated
[  312.540772] wlan0: associate with 00:03:52:e3:0e:10 (try 1)
[  312.541639] wlan0: RX AssocResp from 00:03:52:e3:0e:10 (capab=0x11 status=0 aid=1)
[  312.541643] wlan0: associated
[  312.542358] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  312.542363] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: associated
[  312.542389] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
[  312.548855] ------------[ cut here ]------------
[  312.548874] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  312.548877] Hardware name: MacBookAir4,2
[  312.548879] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  312.548952] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  312.548955] Call Trace:
[  312.548957]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  312.548971]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  312.548976]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  312.548985]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  312.548990]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  312.548995]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  312.549000]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  312.549007]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  312.549012]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  312.549016]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  312.549021]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  312.549026]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  312.549030]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  312.549035]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  312.549038]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  312.549040]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  312.549050]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  312.549055]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  312.549059]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  312.549064]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  312.549069]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  312.549074]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  312.549078]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  312.549082]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  312.549086]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  312.549089] ---[ end trace 7e7e66110d68da09 ]---
[  313.544850] ------------[ cut here ]------------
[  313.544870] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  313.544873] Hardware name: MacBookAir4,2
[  313.544875] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  313.544948] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  313.544950] Call Trace:
[  313.544953]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  313.544966]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  313.544971]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  313.544981]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  313.544985]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  313.544991]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  313.544996]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  313.545003]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  313.545007]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  313.545011]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  313.545017]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  313.545022]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  313.545025]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  313.545030]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  313.545034]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  313.545036]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  313.545045]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  313.545050]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  313.545054]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  313.545060]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  313.545064]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  313.545069]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  313.545073]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  313.545077]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  313.545081]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  313.545084] ---[ end trace 7e7e66110d68da0a ]---
[  322.538288] wlan0: disassociating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  322.538850] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  322.538891] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: disassociated
[  322.538903] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled false, count 0 (implement)
[  322.569056] cfg80211: Calling CRDA to update world regulatory domain
[  322.569910] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  324.513017] wlan0: authenticate with 00:03:52:e3:0e:10 (try 1)
[  324.513491] wlan0: authenticated
[  324.513592] wlan0: associate with 00:03:52:e3:0e:10 (try 1)
[  324.514175] wlan0: RX ReassocResp from 00:03:52:e3:0e:10 (capab=0x11 status=0 aid=1)
[  324.514178] wlan0: associated
[  324.515063] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  324.515069] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: associated
[  324.515096] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
[  324.522901] ------------[ cut here ]------------
[  324.522920] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  324.522922] Hardware name: MacBookAir4,2
[  324.522924] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  324.522997] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  324.523000] Call Trace:
[  324.523002]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  324.523016]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  324.523020]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  324.523030]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  324.523035]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  324.523041]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  324.523045]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  324.523052]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  324.523057]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  324.523061]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  324.523066]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  324.523072]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  324.523076]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  324.523080]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  324.523084]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  324.523086]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  324.523096]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  324.523101]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  324.523105]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  324.523110]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  324.523115]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  324.523121]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  324.523125]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  324.523129]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  324.523133]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  324.523136] ---[ end trace 7e7e66110d68da0b ]---
[  324.571262] ------------[ cut here ]------------
[  324.571278] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  324.571281] Hardware name: MacBookAir4,2
[  324.571282] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  324.571349] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  324.571351] Call Trace:
[  324.571353]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  324.571364]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  324.571369]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  324.571378]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  324.571382]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  324.571387]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  324.571391]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  324.571398]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  324.571402]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  324.571406]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  324.571411]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  324.571415]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  324.571419]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  324.571423]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  324.571426]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  324.571428]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  324.571437]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  324.571442]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  324.571446]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  324.571450]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  324.571454]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  324.571459]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  324.571463]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  324.571467]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  324.571471]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  324.571474] ---[ end trace 7e7e66110d68da0c ]---
[  327.601115] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  327.601130] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: disassociated
[  327.601143] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled false, count 0 (implement)
[  327.601151] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  327.619466] cfg80211: Calling CRDA to update world regulatory domain
[  343.282516] ieee80211 phy0: brcms_ops_config: change monitor mode: false (implement)
[  343.282522] ieee80211 phy0: brcms_ops_config: change power-save mode: false (implement)
[  343.305976] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  345.421077] wlan0: authenticate with 00:03:52:e3:0e:10 (try 1)
[  345.421591] wlan0: authenticated
[  345.421706] wlan0: associate with 00:03:52:e3:0e:10 (try 1)
[  345.422379] wlan0: RX AssocResp from 00:03:52:e3:0e:10 (capab=0x11 status=0 aid=1)
[  345.422384] wlan0: associated
[  345.423204] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  345.423210] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: associated
[  345.423236] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
[  345.430243] ------------[ cut here ]------------
[  345.430262] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  345.430265] Hardware name: MacBookAir4,2
[  345.430267] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  345.430339] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  345.430341] Call Trace:
[  345.430344]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  345.430358]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  345.430363]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  345.430372]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  345.430377]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  345.430383]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  345.430387]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  345.430395]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  345.430399]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  345.430403]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  345.430409]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  345.430415]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  345.430418]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  345.430423]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  345.430426]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  345.430429]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  345.430439]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  345.430444]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  345.430449]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  345.430454]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  345.430459]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  345.430464]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  345.430468]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  345.430472]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  345.430476]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  345.430479] ---[ end trace 7e7e66110d68da0d ]---
[  346.425596] ------------[ cut here ]------------
[  346.425613] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  346.425616] Hardware name: MacBookAir4,2
[  346.425618] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  346.425685] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  346.425688] Call Trace:
[  346.425690]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  346.425700]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  346.425705]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  346.425715]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  346.425719]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  346.425724]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  346.425728]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  346.425735]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  346.425739]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  346.425743]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  346.425748]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  346.425752]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  346.425756]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  346.425760]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  346.425764]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  346.425766]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  346.425775]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  346.425779]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  346.425783]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  346.425788]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  346.425792]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  346.425796]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  346.425801]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  346.425805]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  346.425808]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  346.425811] ---[ end trace 7e7e66110d68da0e ]---
[  355.419708] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  355.419732] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: disassociated
[  355.419744] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled false, count 0 (implement)
[  355.419761] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  355.449977] cfg80211: Calling CRDA to update world regulatory domain
[  357.390618] wlan0: authenticate with 00:03:52:e3:0e:10 (try 1)
[  357.391132] wlan0: authenticated
[  357.391254] wlan0: associate with 00:03:52:e3:0e:10 (try 1)
[  357.391885] wlan0: RX AssocResp from 00:03:52:e3:0e:10 (capab=0x11 status=0 aid=1)
[  357.391889] wlan0: associated
[  357.392718] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  357.392724] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: associated
[  357.392749] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
[  357.400434] ------------[ cut here ]------------
[  357.400453] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  357.400456] Hardware name: MacBookAir4,2
[  357.400457] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  357.400528] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  357.400531] Call Trace:
[  357.400533]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  357.400547]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  357.400552]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  357.400562]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  357.400567]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  357.400572]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  357.400576]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  357.400584]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  357.400588]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  357.400592]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  357.400598]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  357.400603]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  357.400607]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  357.400611]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  357.400615]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  357.400617]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  357.400627]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  357.400632]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  357.400636]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  357.400641]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  357.400646]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  357.400651]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  357.400655]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  357.400659]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  357.400663]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  357.400665] ---[ end trace 7e7e66110d68da0f ]---
[  357.451565] ------------[ cut here ]------------
[  357.451580] WARNING: at net/mac80211/rx.c:2922 ieee80211_rx+0x3bd/0xa40 [mac80211]()
[  357.451583] Hardware name: MacBookAir4,2
[  357.451585] Modules linked in: ext4 mbcache jbd2 crc16 snd_hda_codec_hdmi snd_hda_codec_cirrus joydev arc4 uvcvideo usb_storage videodev bcm5974 media uas v4l2_compat_ioctl32 evdev snd_hda_intel i915 snd_hda_codec brcmsmac(C) snd_hwdep snd_pcm drm_kms_helper mac80211 snd_timer drm brcmutil(C) snd sg cfg80211 iTCO_wdt i2c_algo_bit applesmc soundcore input_polldev i2c_i801 pcspkr snd_page_alloc rfkill iTCO_vendor_support mei(C) i2c_core intel_agp battery apple_bl video ac intel_gtt button processor jfs aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod sd_mod pata_acpi hid_multitouch hid_apple usbhid hid uhci_hcd ata_piix libata scsi_mod ehci_hcd usbcore
[  357.451652] Pid: 0, comm: swapper Tainted: G        WC  3.1.0-rc6-gbee709a #3
[  357.451654] Call Trace:
[  357.451656]  <IRQ>  [<ffffffff81063f9f>] warn_slowpath_common+0x7f/0xc0
[  357.451666]  [<ffffffff813523d8>] ? skb_dequeue+0x28/0x90
[  357.451671]  [<ffffffff81063ffa>] warn_slowpath_null+0x1a/0x20
[  357.451680]  [<ffffffffa02a07ed>] ieee80211_rx+0x3bd/0xa40 [mac80211]
[  357.451685]  [<ffffffff8142bda5>] ? _raw_spin_unlock_irqrestore+0x65/0x80
[  357.451689]  [<ffffffff810a2a2f>] ? trace_hardirqs_on_caller+0xaf/0x1a0
[  357.451694]  [<ffffffff810a2b2d>] ? trace_hardirqs_on+0xd/0x10
[  357.451701]  [<ffffffffa0284e91>] ieee80211_tasklet_handler+0xd1/0xe0 [mac80211]
[  357.451705]  [<ffffffff8106a930>] tasklet_action+0x90/0x190
[  357.451709]  [<ffffffff8106bc58>] __do_softirq+0xc8/0x2a0
[  357.451714]  [<ffffffff8142f03c>] call_softirq+0x1c/0x30
[  357.451718]  [<ffffffff81017b55>] do_softirq+0xa5/0xe0
[  357.451721]  [<ffffffff8106c19e>] irq_exit+0xae/0xe0
[  357.451726]  [<ffffffff8142f913>] do_IRQ+0x63/0xe0
[  357.451729]  [<ffffffff8142c2b3>] common_interrupt+0x73/0x73
[  357.451731]  <EOI>  [<ffffffff81291038>] ? intel_idle+0xd8/0x130
[  357.451740]  [<ffffffff81291034>] ? intel_idle+0xd4/0x130
[  357.451745]  [<ffffffff813358f6>] cpuidle_idle_call+0xc6/0x360
[  357.451749]  [<ffffffff8101422e>] cpu_idle+0xce/0x120
[  357.451753]  [<ffffffff81407498>] rest_init+0xdc/0xe4
[  357.451757]  [<ffffffff814073bc>] ? csum_partial_copy_generic+0x16c/0x16c
[  357.451762]  [<ffffffff819a9c1c>] start_kernel+0x3d8/0x3e3
[  357.451766]  [<ffffffff819a9347>] x86_64_start_reservations+0x132/0x136
[  357.451770]  [<ffffffff819a9140>] ? early_idt_handlers+0x140/0x140
[  357.451774]  [<ffffffff819a944d>] x86_64_start_kernel+0x102/0x111
[  357.451777] ---[ end trace 7e7e66110d68da10 ]---
[  367.389061] ieee80211 phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
[  367.389075] ieee80211 phy0: brcmsmac: brcms_ops_bss_info_changed: disassociated
[  367.389088] ieee80211 phy0: brcms_ops_bss_info_changed: arp filtering: enabled false, count 0 (implement)
[  367.389096] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local choice (reason=3)
[  367.416312] cfg80211: Calling CRDA to update world regulatory domain
[  369.367667] wlan0: direct probe to 00:03:52:2c:01:00 (try 1/3)
[  369.565008] wlan0: direct probe to 00:03:52:2c:01:00 (try 2/3)
[  369.764891] wlan0: direct probe to 00:03:52:2c:01:00 (try 3/3)
[  369.964768] wlan0: direct probe to 00:03:52:2c:01:00 timed out
[  381.310339] wlan0: direct probe to 00:0f:61:1a:0c:50 (try 1/3)
[  381.508071] wlan0: direct probe to 00:0f:61:1a:0c:50 (try 2/3)
[  381.707955] wlan0: direct probe to 00:0f:61:1a:0c:50 (try 3/3)
[  381.907788] wlan0: direct probe to 00:0f:61:1a:0c:50 timed out
[  393.250073] wlan0: direct probe to 00:03:52:2c:01:00 (try 1/3)
[  393.447810] wlan0: direct probe to 00:03:52:2c:01:00 (try 2/3)
[  393.647700] wlan0: direct probe to 00:03:52:2c:01:00 (try 3/3)
[  393.847576] wlan0: direct probe to 00:03:52:2c:01:00 timed out
[  405.183177] wlan0: direct probe to 00:0f:61:1a:1d:30 (try 1/3)
[  405.380906] wlan0: direct probe to 00:0f:61:1a:1d:30 (try 2/3)
[  405.580773] wlan0: direct probe to 00:0f:61:1a:1d:30 (try 3/3)
[  405.780658] wlan0: direct probe to 00:0f:61:1a:1d:30 timed out
[  420.865517] usb 1-1.3: new high speed USB device number 9 using ehci_hcd

^ permalink raw reply

* Re: [PATCH 0/3] net: time stamping fixes
From: Eric Dumazet @ 2011-10-19 14:33 UTC (permalink / raw)
  To: Richard Cochran; +Cc: Johannes Berg, David Miller, netdev
In-Reply-To: <20111019142750.GB15253@netboy.at.omicron.at>

Le mercredi 19 octobre 2011 à 16:27 +0200, Richard Cochran a écrit :
> On Wed, Oct 19, 2011 at 04:24:08PM +0200, Johannes Berg wrote:
> > On Wed, 2011-10-19 at 16:08 +0200, Eric Dumazet wrote:
> > 
> > > > Anyway, I guess you agree that the patches as-is aren't actually the
> > > > right solution since we can't sock_hold() a TX skb socket reference?
> > > 
> > > Yes, the sock_hold() could be changed by an atomic_inc_not_zero()
> > > 
> > > What about doing this ?
> > 
> > >  		if (likely(phydev->drv->txtstamp)) {
> > > +			if (!atomic_inc_not_zero(&sk->sk_refcnt))
> > > +				return;
> > 
> > Yeah that seems like it works and just drops the timestamp in case we
> > don't still have a live socket, which is perfectly fine.
> 
> Yes, I think it resolves any doubt. I will resubmit with this
> solution.
> 

Thanks guys !

^ permalink raw reply

* Re: [PATCH 0/5] Better namespace handling for /sys/class/net/bonding_masters
From: Greg KH @ 2011-10-19 14:36 UTC (permalink / raw)
  To: David Miller; +Cc: ebiederm, linux-kernel, netdev, htejun, fubar, andy
In-Reply-To: <20111019.000932.523712028439316177.davem@davemloft.net>

On Wed, Oct 19, 2011 at 12:09:32AM -0400, David Miller wrote:
> From: ebiederm@xmission.com (Eric W. Biederman)
> Date: Thu, 13 Oct 2011 00:47:46 -0700
> 
> > Greg, Dave I'm don't know whose tree to merge this through as this code
> > is equally device-core and networking.  I am hoping that we can get this
> > improvement merged for 3.2.
> 
> I'm happy to take this series into my net-next tree.
> 
> Greg?  Any objections?

Nope:
	Acked-by: Greg Kroah-Hartman <gregkh@suse.de>

^ permalink raw reply

* Re: BUG: All network processes hang (brcmsmac/wpa_supplicant)
From: Arend van Spriel @ 2011-10-19 14:43 UTC (permalink / raw)
  To: Nico Schottelius, Eric Dumazet, LKML,
	"linux-wireless@vger.kernel.org" <linux-wireles
  Cc: wey-yi.w.guy
In-Reply-To: <20111019142837.GA1414@schottelius.org>

[-- Attachment #1: Type: text/plain, Size: 1980 bytes --]

On 10/19/2011 04:28 PM, Nico Schottelius wrote:
> Triggered it! 
> 
> And also got the traceback!
> 
> Dmesg + log attached, let me know when I can pull the fix from
> somewhere.
> 
> Cheers,
>
> Nico
> 

I actually don't see the rtnl_lock or mutex_lock that was listed in your
original dmesg. There are a lot of warning traces from mac80211.c.

The other interesting thing is the following:

[  367.389096] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local
choice (reason=3)
[  367.416312] cfg80211: Calling CRDA to update world regulatory domain
[  369.367667] wlan0: direct probe to 00:03:52:2c:01:00 (try 1/3)
[  369.565008] wlan0: direct probe to 00:03:52:2c:01:00 (try 2/3)
[  369.764891] wlan0: direct probe to 00:03:52:2c:01:00 (try 3/3)
[  369.964768] wlan0: direct probe to 00:03:52:2c:01:00 timed out
[  381.310339] wlan0: direct probe to 00:0f:61:1a:0c:50 (try 1/3)
[  381.508071] wlan0: direct probe to 00:0f:61:1a:0c:50 (try 2/3)
[  381.707955] wlan0: direct probe to 00:0f:61:1a:0c:50 (try 3/3)
[  381.907788] wlan0: direct probe to 00:0f:61:1a:0c:50 timed out
[  393.250073] wlan0: direct probe to 00:03:52:2c:01:00 (try 1/3)
[  393.447810] wlan0: direct probe to 00:03:52:2c:01:00 (try 2/3)
[  393.647700] wlan0: direct probe to 00:03:52:2c:01:00 (try 3/3)
[  393.847576] wlan0: direct probe to 00:03:52:2c:01:00 timed out
[  405.183177] wlan0: direct probe to 00:0f:61:1a:1d:30 (try 1/3)
[  405.380906] wlan0: direct probe to 00:0f:61:1a:1d:30 (try 2/3)
[  405.580773] wlan0: direct probe to 00:0f:61:1a:1d:30 (try 3/3)
[  405.780658] wlan0: direct probe to 00:0f:61:1a:1d:30 timed out

There is another thread title "iwlagn is getting very shaky". It makes
me wonder.

Where did you get your kernel from. From you dmesg I see:

Linux version 3.1.0-rc6-gbee709a (nico@brief)

I tried to locate the SHA1 bee709a but it is not in my repository. I
want to look what the warnings from mac80211 mean.

Gr. AvS


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 900 bytes --]

^ permalink raw reply

* Re: BUG: All network processes hang (brcmsmac/wpa_supplicant)
From: Eric Dumazet @ 2011-10-19 14:46 UTC (permalink / raw)
  To: Nico Schottelius
  Cc: Arend van Spriel, LKML, linux-wireless@vger.kernel.org, netdev
In-Reply-To: <20111019142837.GA1414@schottelius.org>

Le mercredi 19 octobre 2011 à 16:28 +0200, Nico Schottelius a écrit :
> Triggered it! 
> 
> And also got the traceback!
> 
> Dmesg + log attached, let me know when I can pull the fix from
> somewhere.
> 

Sorry, I cant see same messages in your dmesg, no mention of stuck
processes (blocked for more than 120 seconds.)

By the way, please update to latest 3.1.rc10

^ permalink raw reply

* Re: BUG: All network processes hang (brcmsmac/wpa_supplicant)
From: Nico Schottelius @ 2011-10-19 14:55 UTC (permalink / raw)
  To: Arend van Spriel
  Cc: Nico Schottelius, Eric Dumazet, LKML,
	linux-wireless@vger.kernel.org, netdev, wey-yi.w.guy
In-Reply-To: <4E9EE20F.1030403@broadcom.com>

[-- Attachment #1: Type: text/plain, Size: 2199 bytes --]

Hey Arend,


Arend van Spriel [Wed, Oct 19, 2011 at 04:43:27PM +0200]:
> I actually don't see the rtnl_lock or mutex_lock that was listed in your
> original dmesg. There are a lot of warning traces from mac80211.c.

Oh, sorry, ip r was stuck already and I didn't wait 120 seconds!


> The other interesting thing is the following:
> 
> [  367.389096] wlan0: deauthenticating from 00:03:52:e3:0e:10 by local
> choice (reason=3)
> [  367.416312] cfg80211: Calling CRDA to update world regulatory domain
> [  369.367667] wlan0: direct probe to 00:03:52:2c:01:00 (try 1/3)
> [  369.565008] wlan0: direct probe to 00:03:52:2c:01:00 (try 2/3)
> [  369.764891] wlan0: direct probe to 00:03:52:2c:01:00 (try 3/3)
> [  369.964768] wlan0: direct probe to 00:03:52:2c:01:00 timed out
> [  381.310339] wlan0: direct probe to 00:0f:61:1a:0c:50 (try 1/3)
> [  381.508071] wlan0: direct probe to 00:0f:61:1a:0c:50 (try 2/3)
> [  381.707955] wlan0: direct probe to 00:0f:61:1a:0c:50 (try 3/3)
> [  381.907788] wlan0: direct probe to 00:0f:61:1a:0c:50 timed out
> [  393.250073] wlan0: direct probe to 00:03:52:2c:01:00 (try 1/3)
> [  393.447810] wlan0: direct probe to 00:03:52:2c:01:00 (try 2/3)
> [  393.647700] wlan0: direct probe to 00:03:52:2c:01:00 (try 3/3)
> [  393.847576] wlan0: direct probe to 00:03:52:2c:01:00 timed out
> [  405.183177] wlan0: direct probe to 00:0f:61:1a:1d:30 (try 1/3)
> [  405.380906] wlan0: direct probe to 00:0f:61:1a:1d:30 (try 2/3)
> [  405.580773] wlan0: direct probe to 00:0f:61:1a:1d:30 (try 3/3)
> [  405.780658] wlan0: direct probe to 00:0f:61:1a:1d:30 timed out
> 
> There is another thread title "iwlagn is getting very shaky". It makes
> me wonder.
> 
> Where did you get your kernel from. From you dmesg I see:

It's a mix of Keith's and Jiri's branches:

http://www.nico.schottelius.org/blog/macbook-air-42-touchpad-keyboard-correct-screen-resolution/

Those two are needed to get screen/keyboard/mouse working on the MacBook Air.

You can pull the merged result directly from

  git://git.schottelius.org/foreign/linux-keith-jiri-mba

Cheers,

Nico

-- 
PGP key: 7ED9 F7D3 6B10 81D7 0EC5  5C09 D7DC C8E4 3187 7DF0

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply

* Re: [PATCH 6/7] mlx4_en: Adding rxhash support
From: Ben Hutchings @ 2011-10-19 14:57 UTC (permalink / raw)
  To: Stephen Hemminger
  Cc: Yevgeny Petrilin, Eric Dumazet, davem@davemloft.net,
	netdev@vger.kernel.org
In-Reply-To: <1318966500.2783.124.camel@bwh-desktop>

On Tue, 2011-10-18 at 20:35 +0100, Ben Hutchings wrote:
[...]
> There was also a proposal a while back that we should try to make the
> hash symmetric w.r.t. RX and TX addresses, so that both directions of a
> flow through a router/bridge are aligned.  I think this was to be done
> by repeating a 16-bit pattern across the key.  Not sure whether that's
> worthwhile.

That also makes it relatively cheap to calculate in software, which
DragonflyBSD does:

http://gitweb.dragonflybsd.org/dragonfly.git/blob/master:/sys/net/toeplitz.c
http://gitweb.dragonflybsd.org/dragonfly.git/blob/master:/sys/net/toeplitz2.h

(the latter file appears to assume that in_addr_t/in_port_t are byte-
swapped i.e. the host is little-endian).

Ben.

-- 
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.

^ permalink raw reply

* Re: BUG: All network processes hang (brcmsmac/wpa_supplicant)
From: Nico Schottelius @ 2011-10-19 14:58 UTC (permalink / raw)
  To: Eric Dumazet
  Cc: Nico Schottelius, Arend van Spriel, LKML,
	linux-wireless@vger.kernel.org, netdev
In-Reply-To: <1319035584.8416.34.camel@edumazet-laptop>

Eric Dumazet [Wed, Oct 19, 2011 at 04:46:24PM +0200]:
> Le mercredi 19 octobre 2011 à 16:28 +0200, Nico Schottelius a écrit :
> > Triggered it! 
> > 
> > And also got the traceback!
> > 
> > Dmesg + log attached, let me know when I can pull the fix from
> > somewhere.
> > 
> 
> Sorry, I cant see same messages in your dmesg, no mention of stuck
> processes (blocked for more than 120 seconds.)
> 
> By the way, please update to latest 3.1.rc10
 
I can rebuild Linus' tree if you want, but only use it temporarily due
to the other errors mentioned in the previous message.

If you've a tree somewhere that merges on top of Keith+Jiri,
I'd try to merge that one as well, to make the mba more usable.

Cheers,

Nico

-- 
PGP key: 7ED9 F7D3 6B10 81D7 0EC5  5C09 D7DC C8E4 3187 7DF0

^ permalink raw reply

* RE: [PATCH net-next] igb: fix a compile warning
From: Rose, Gregory V @ 2011-10-19 16:28 UTC (permalink / raw)
  To: roy.qing.li@gmail.com, netdev@vger.kernel.org
In-Reply-To: <1319014355-15678-1-git-send-email-roy.qing.li@gmail.com>

> -----Original Message-----
> From: netdev-owner@vger.kernel.org [mailto:netdev-owner@vger.kernel.org]
> On Behalf Of roy.qing.li@gmail.com
> Sent: Wednesday, October 19, 2011 1:53 AM
> To: netdev@vger.kernel.org
> Subject: [PATCH net-next] igb: fix a compile warning
> 
> From: RongQing Li <roy.qing.li@gmail.com>
> 
> control these three function declarations and
> definitions with same macro CONFIG_PCI_IOV
> 
> drivers/net/ethernet/intel/igb/igb_main.c:165:
> warning: ‘igb_vf_configure’ declared ‘static’ but never defined
> drivers/net/ethernet/intel/igb/igb_main.c:166:
> warning: ‘igb_find_enabled_vfs’ declared ‘static’ but never defined
> drivers/net/ethernet/intel/igb/igb_main.c:167:
> warning: ‘igb_check_vf_assignment’ declared ‘static’ but never defined
> 
> Signed-off-by: RongQing Li <roy.qing.li@gmail.com>

Acked-by: Greg Rose <gregory.v.rose@intel.com>


^ permalink raw reply

* Re: BUG: All network processes hang (brcmsmac/wpa_supplicant)
From: Arend van Spriel @ 2011-10-19 16:48 UTC (permalink / raw)
  To: Nico Schottelius, Eric Dumazet, LKML,
	"linux-wireless@vger.kernel.org" <linux-wireles
In-Reply-To: <20111019145501.GB1414@schottelius.org>


[-- Attachment #1.1: Type: text/plain, Size: 1028 bytes --]

On 10/19/2011 04:55 PM, Nico Schottelius wrote:
> Hey Arend,
> 
> 
> Arend van Spriel [Wed, Oct 19, 2011 at 04:43:27PM +0200]:
>> I actually don't see the rtnl_lock or mutex_lock that was listed in your
>> original dmesg. There are a lot of warning traces from mac80211.c.

The warnings are probably a diversion. This is the warning in
ieee80211_rx():

			if (WARN_ON(status->rate_idx < 0 ||
				    status->rate_idx >= sband->n_bitrates))
				goto drop;
			rate = &sband->bitrates[status->rate_idx];

This means that the driver (brcmsmac) provides a data packet with an
out-of-range rate index. This reminded me of a fix I made about a month
ago. Could you apply the attached patch file. It is based on:

commit bee709ab1d390afe69e4407bc86bb706c6fb2965
Merge: ad1c761 1f2c7e9
Author: Nico Schottelius <nico@kr.ethz.ch>
Date:   Tue Oct 18 00:04:05 2011 +0200

    Merge branch 'fix-edp-vdd-power' of ../keithp/linux

As it drops receive packets it may be your problem. Is your AP on 5GHz?

Gr. AvS

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-staging-brcm80211-fix-for-rate-index-in-receive-stat.patch --]
[-- Type: text/x-patch; name="0001-staging-brcm80211-fix-for-rate-index-in-receive-stat.patch", Size: 1096 bytes --]

From 7d14bd6cbfbf26369c5958e56a468fd8429841d7 Mon Sep 17 00:00:00 2001
From: Arend van Spriel <arend@broadcom.com>
Date: Wed, 19 Oct 2011 18:42:45 +0200
Subject: [PATCH] staging: brcm80211: fix for rate index in receive status

Made a patch for Nico to try whether this resolves his issue.

Signed-off-by: Arend van Spriel <arend@broadcom.com>
---
 drivers/staging/brcm80211/brcmsmac/main.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/brcm80211/brcmsmac/main.c b/drivers/staging/brcm80211/brcmsmac/main.c
index 1763c45..49c8eb9 100644
--- a/drivers/staging/brcm80211/brcmsmac/main.c
+++ b/drivers/staging/brcm80211/brcmsmac/main.c
@@ -4608,6 +4608,10 @@ prep_mac80211_status(struct brcms_c_info *wlc, struct d11rxhdr *rxh,
 			wiphy_err(wlc->wiphy, "%s: Unknown rate\n", __func__);
 		}
 
+		/* DEBUG: fix rate index in receive status */
+		if (rx_status->band == IEEE80211_BAND_5GHZ)
+			rx_status->rate_idx -= 4;
+
 		/* Determine short preamble and rate_idx */
 		preamble = 0;
 		if (IS_CCK(rspec)) {
-- 
1.7.4.1


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 900 bytes --]

^ permalink raw reply related

* Re: [PATCH] iproute2: Conforming to -D_FORTIFY_SOURCE=2 restrictions
From: Stephen Hemminger @ 2011-10-19 16:50 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: Bin Li, netdev
In-Reply-To: <1319023851.3103.17.camel@edumazet-laptop>

On Wed, 19 Oct 2011 13:30:51 +0200
Eric Dumazet <eric.dumazet@gmail.com> wrote:

> Le mercredi 19 octobre 2011 à 17:15 +0800, Bin Li a écrit :
> > Stephen,
> > 
> >  You can reproduce this issue in 2.6.37 like below. And the previous
> > gdb log is after the install the debuginfo package in SUSE.
> > 
> > # ip -6 xfrm state add src 3ffe:501:ffff:ff03:21a:64ff:fe12:e4c1 dst
> > 3ffe:501:ffff:ff05:200:ff:fe00:c1c1 proto ah spi 0x1000 mode transport
> > auth md5 "TAHITEST89ABCDEF"
> > 
> > *** buffer overflow detected ***: ip terminated
> > ======= Backtrace: =========
> > /lib/libc.so.6(__fortify_fail+0x40)[0xb76d0070]
> > /lib/libc.so.6(+0xe8e27)[0xb76cde27]
> > /lib/libc.so.6(+0xe8317)[0xb76cd317]
> > ip[0x806d6c4]
> > ip(do_xfrm_state+0x120)[0x806dc70]
> > ip(do_xfrm+0x81)[0x806ad51]
> > ip[0x804c355]
> > ip(main+0x476)[0x804caa6]
> > /lib/libc.so.6(__libc_start_main+0xfe)[0xb75fbc2e]
> > ip[0x804c261]
> > ======= Memory map: ========
> > 08048000-08087000 r-xp 00000000 08:01 4465       /sbin/ip
> > 08087000-08088000 r--p 0003e000 08:01 4465       /sbin/ip
> > 08088000-0808a000 rw-p 0003f000 08:01 4465       /sbin/ip
> > 0808a000-080ad000 rw-p 00000000 00:00 0          [heap]
> > b75c6000-b75e2000 r-xp 00000000 08:01 131084     /lib/libgcc_s.so.1
> > b75e2000-b75e3000 r--p 0001b000 08:01 131084     /lib/libgcc_s.so.1
> > b75e3000-b75e4000 rw-p 0001c000 08:01 131084     /lib/libgcc_s.so.1
> > b75e4000-b75e5000 rw-p 00000000 00:00 0
> > b75e5000-b774b000 r-xp 00000000 08:01 131375     /lib/libc-2.11.3.so
> > b774b000-b774c000 ---p 00166000 08:01 131375     /lib/libc-2.11.3.so
> > b774c000-b774e000 r--p 00166000 08:01 131375     /lib/libc-2.11.3.so
> > b774e000-b774f000 rw-p 00168000 08:01 131375     /lib/libc-2.11.3.so
> > b774f000-b7752000 rw-p 00000000 00:00 0
> > b7752000-b7755000 r-xp 00000000 08:01 131428     /lib/libdl-2.11.3.so
> > b7755000-b7756000 r--p 00002000 08:01 131428     /lib/libdl-2.11.3.so
> > b7756000-b7757000 rw-p 00003000 08:01 131428     /lib/libdl-2.11.3.so
> > b7774000-b7775000 rw-p 00000000 00:00 0
> > b7775000-b7794000 r-xp 00000000 08:01 154467     /lib/ld-2.11.3.so
> > b7794000-b7795000 r--p 0001e000 08:01 154467     /lib/ld-2.11.3.so
> > b7795000-b7796000 rw-p 0001f000 08:01 154467     /lib/ld-2.11.3.so
> > bfa02000-bfa23000 rw-p 00000000 00:00 0          [stack]
> > ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
> > Aborted
> > 
> > And If without -D_FORTIFY_SOURCE=2 in gcc, it works fine, so It's a
> > bug in iproute2 which is not conforming to -D_FORTIFY_SOURCE=2
> > restrictions.
> > 
> 
> FORTIFY assumes we cant copy a string on alg.u.alg.alg_key !
> 
> This completely precludes 0-sized arrays
> 
> struct xfrm_algo {
>         char            alg_name[64];
>         unsigned int    alg_key_len;    /* in bits */
>         char            alg_key[0];
> };
> 
> struct {
>       union {
>           struct xfrm_algo alg;
>           struct xfrm_algo_aead aead;
>           struct xfrm_algo_auth auth;
>       } u;
>       char buf[XFRM_ALGO_KEY_BUF_SIZE];
> } alg = {};
> 
> I would say its a FORTIFY bug. This kind of construct is perfectly
> valid.

Maybe it will handle flexible style arrays.
See also:
   http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html

At this time, I won't accept the patch that uses alloca() just to deal
with this FORTIFY bug.

^ permalink raw reply

* Re: [net-next 5/6] ixgbe: add hardware timestamping support
From: Jacob Keller @ 2011-10-19 17:04 UTC (permalink / raw)
  To: Richard Cochran
  Cc: Jeff Kirsher, davem, Jacob Keller, netdev, gospo, sassmann
In-Reply-To: <20111017164433.GA2028@netboy.at.omicron.at>

On Mon, Oct 17, 2011 at 9:44 AM, Richard Cochran
<richardcochran@gmail.com> wrote:
> On Mon, Oct 17, 2011 at 05:21:01AM -0700, Jeff Kirsher wrote:
>> The cyclecounter has the potential to miss a wrap-around of the
>> systim register (this should occur no more often than every 35
>> seconds) unless some activity regarding the cycle counter occurs at
>> least once within this time. This version adds a cycle counter read
>> every time the watchdog task is run, which should occur at least once
>> within this timeframe. Any packets being timestamped will also count
>> as a read due to the call to timecompare_update.
>
> So, is this wrap around due to the fact that you are tied to the
> system time via time_compare? Or, putting it another way, can't you
> program the hardware time stamping unit so that the registers have
> some reasonable resolution (like 64 bits worth of nanoseconds) and
> just offer RAW timestamps?

The wrap around is due to hardware limitations. The ixgbe devices
cannot support 64bits worth of nanoseconds and still have the ability
to adjust the frequency in parts per billion. A larger increment
increases the resolution available for frequency adjustments, but
decreases the time it takes for the cycle counter to wrap around.

>
> I would really like to move away from the timecompare hacks and
> towards a proper PHC->SYS PPS solution.
>

I agree that this is the correct approach. The timecompare
functionality does have issues.

>> This version fixes an issue regarding timecompare not updating
>> detected skew after the clock offset is changed due to ptpd or outside
>> influence from the OS. Now the skew detection is forced just before we
>> hand a timestamp up to the kernel stack
>
> Again, doing the update thing on every packet won't work for real
> world PTP scenarios.
>
Which is why the PHC solution is better. Work on implementing this
support is in progress. Out of curiosity, what is the sync rate for
the scenario that breaks this? I would like to try that rate out on my
setup.

> Thanks,
> Richard
> --
> 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

* [PATCH 01/10] cxgb4: Detect DB FULL events and notify RDMA ULD.
From: Vipul Pandya @ 2011-10-19 17:10 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA
  Cc: roland-BHEL68pLQRGGvPXPguhicg, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
	divy-ut6Up61K2wZBDgjK7y7TUQ, dm-ut6Up61K2wZBDgjK7y7TUQ,
	kumaras-ut6Up61K2wZBDgjK7y7TUQ,
	swise-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW, Vipul Pandya
In-Reply-To: <1319044264-779-1-git-send-email-vipul-ut6Up61K2wZBDgjK7y7TUQ@public.gmane.org>

Signed-off-by: Vipul Pandya <vipul-ut6Up61K2wZBDgjK7y7TUQ@public.gmane.org>
Signed-off-by: Steve Wise <swise-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>
---
 drivers/net/ethernet/chelsio/cxgb4/cxgb4.h      |    4 +
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c |   77 +++++++++++++++++++++++
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h  |    7 ++
 drivers/net/ethernet/chelsio/cxgb4/sge.c        |    6 ++
 drivers/net/ethernet/chelsio/cxgb4/t4_hw.c      |    9 +++
 5 files changed, 103 insertions(+), 0 deletions(-)

diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
index 223a7f7..e18b5ad 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
@@ -504,6 +504,8 @@ struct adapter {
 	void **tid_release_head;
 	spinlock_t tid_release_lock;
 	struct work_struct tid_release_task;
+	struct work_struct db_full_task;
+	struct work_struct db_drop_task;
 	bool tid_release_task_busy;
 
 	struct dentry *debugfs_root;
@@ -719,4 +721,6 @@ int t4_ctrl_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
 int t4_ofld_eq_free(struct adapter *adap, unsigned int mbox, unsigned int pf,
 		    unsigned int vf, unsigned int eqid);
 int t4_handle_fw_rpl(struct adapter *adap, const __be64 *rpl);
+void t4_db_full(struct adapter *adapter);
+void t4_db_dropped(struct adapter *adapter);
 #endif /* __CXGB4_H__ */
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 4c8f42a..870c320 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -2371,6 +2371,16 @@ unsigned int cxgb4_port_chan(const struct net_device *dev)
 }
 EXPORT_SYMBOL(cxgb4_port_chan);
 
+unsigned int cxgb4_dbfifo_count(const struct net_device *dev, int lpfifo)
+{
+	struct adapter *adap = netdev2adap(dev);
+	u32 v;
+
+	v = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
+	return lpfifo ? G_LP_COUNT(v) : G_HP_COUNT(v);
+}
+EXPORT_SYMBOL(cxgb4_dbfifo_count);
+
 /**
  *	cxgb4_port_viid - get the VI id of a port
  *	@dev: the net device for the port
@@ -2451,6 +2461,69 @@ static struct notifier_block cxgb4_netevent_nb = {
 	.notifier_call = netevent_cb
 };
 
+static void notify_rdma_uld(struct adapter *adap, enum cxgb4_control cmd)
+{
+	mutex_lock(&uld_mutex);
+	if (adap->uld_handle[CXGB4_ULD_RDMA])
+		ulds[CXGB4_ULD_RDMA].control(adap->uld_handle[CXGB4_ULD_RDMA],
+				cmd);
+	mutex_unlock(&uld_mutex);
+}
+
+static void process_db_full(struct work_struct *work)
+{
+	struct adapter *adap;
+	static int delay = 1000;
+	u32 v;
+
+	adap = container_of(work, struct adapter, db_full_task);
+
+
+	/* stop LLD queues */
+
+	notify_rdma_uld(adap, CXGB4_CONTROL_DB_FULL);
+	do {
+		set_current_state(TASK_UNINTERRUPTIBLE);
+		schedule_timeout(usecs_to_jiffies(delay));
+		v = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
+		if (G_LP_COUNT(v) == 0 && G_HP_COUNT(v) == 0)
+			break;
+	} while (1);
+	notify_rdma_uld(adap, CXGB4_CONTROL_DB_EMPTY);
+
+
+	/*
+	 * The more we get db full interrupts, the more we'll delay
+	 * in re-enabling db rings on queues, capped off at 200ms.
+	 */
+	delay = min(delay << 1, 200000);
+
+	/* resume LLD queues */
+}
+
+static void process_db_drop(struct work_struct *work)
+{
+	struct adapter *adap;
+	adap = container_of(work, struct adapter, db_drop_task);
+
+
+	/*
+	 * sync the PIDX values in HW and SW for LLD queues.
+	 */
+
+	notify_rdma_uld(adap, CXGB4_CONTROL_DB_DROP);
+}
+
+void t4_db_full(struct adapter *adap)
+{
+	schedule_work(&adap->db_full_task);
+}
+
+void t4_db_dropped(struct adapter *adap)
+{
+	schedule_work(&adap->db_drop_task);
+}
+
 static void uld_attach(struct adapter *adap, unsigned int uld)
 {
 	void *handle;
@@ -2654,6 +2727,8 @@ static void cxgb_down(struct adapter *adapter)
 {
 	t4_intr_disable(adapter);
 	cancel_work_sync(&adapter->tid_release_task);
+	cancel_work_sync(&adapter->db_full_task);
+	cancel_work_sync(&adapter->db_drop_task);
 	adapter->tid_release_task_busy = false;
 	adapter->tid_release_head = NULL;
 
@@ -3606,6 +3681,8 @@ static int __devinit init_one(struct pci_dev *pdev,
 	spin_lock_init(&adapter->tid_release_lock);
 
 	INIT_WORK(&adapter->tid_release_task, process_tid_release_list);
+	INIT_WORK(&adapter->db_full_task, process_db_full);
+	INIT_WORK(&adapter->db_drop_task, process_db_drop);
 
 	err = t4_prep_adapter(adapter);
 	if (err)
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
index b1d39b8..5cc2f27 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
@@ -163,6 +163,12 @@ enum cxgb4_state {
 	CXGB4_STATE_DETACH
 };
 
+enum cxgb4_control {
+	CXGB4_CONTROL_DB_FULL,
+	CXGB4_CONTROL_DB_EMPTY,
+	CXGB4_CONTROL_DB_DROP,
+};
+
 struct pci_dev;
 struct l2t_data;
 struct net_device;
@@ -225,6 +231,7 @@ struct cxgb4_uld_info {
 int cxgb4_register_uld(enum cxgb4_uld type, const struct cxgb4_uld_info *p);
 int cxgb4_unregister_uld(enum cxgb4_uld type);
 int cxgb4_ofld_send(struct net_device *dev, struct sk_buff *skb);
+unsigned int cxgb4_dbfifo_count(const struct net_device *dev, int lpfifo);
 unsigned int cxgb4_port_chan(const struct net_device *dev);
 unsigned int cxgb4_port_viid(const struct net_device *dev);
 unsigned int cxgb4_port_idx(const struct net_device *dev);
diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c
index 007ce23..3631fbb 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/sge.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c
@@ -2414,6 +2414,12 @@ void t4_sge_init(struct adapter *adap)
 			 RXPKTCPLMODE |
 			 (STAT_LEN == 128 ? EGRSTATUSPAGESIZE : 0));
 
+	t4_set_reg_field(adap, A_SGE_DBFIFO_STATUS,
+			V_HP_INT_THRESH(5) | V_LP_INT_THRESH(5),
+			V_HP_INT_THRESH(5) | V_LP_INT_THRESH(5));
+	t4_set_reg_field(adap, A_SGE_DOORBELL_CONTROL, F_ENABLE_DROP,
+			F_ENABLE_DROP);
+
 	for (i = v = 0; i < 32; i += 4)
 		v |= (PAGE_SHIFT - 10) << i;
 	t4_write_reg(adap, SGE_HOST_PAGE_SIZE, v);
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
index d1ec111..13609bf 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
@@ -1013,6 +1013,8 @@ static void sge_intr_handler(struct adapter *adapter)
 		{ ERR_INVALID_CIDX_INC,
 		  "SGE GTS CIDX increment too large", -1, 0 },
 		{ ERR_CPL_OPCODE_0, "SGE received 0-length CPL", -1, 0 },
+		{ F_DBFIFO_LP_INT, NULL, -1, 0 },
+		{ F_DBFIFO_HP_INT, NULL, -1, 0 },
 		{ ERR_DROPPED_DB, "SGE doorbell dropped", -1, 0 },
 		{ ERR_DATA_CPL_ON_HIGH_QID1 | ERR_DATA_CPL_ON_HIGH_QID0,
 		  "SGE IQID > 1023 received CPL for FL", -1, 0 },
@@ -1042,6 +1044,12 @@ static void sge_intr_handler(struct adapter *adapter)
 		t4_write_reg(adapter, SGE_INT_CAUSE2, v >> 32);
 	}
 
+	err = t4_read_reg(adapter, A_SGE_INT_CAUSE3);
+	if (err & (F_DBFIFO_HP_INT|F_DBFIFO_LP_INT))
+		t4_db_full(adapter);
+	if (err & F_ERR_DROPPED_DB)
+		t4_db_dropped(adapter);
+
 	if (t4_handle_intr_status(adapter, SGE_INT_CAUSE3, sge_intr_info) ||
 	    v != 0)
 		t4_fatal_err(adapter);
@@ -1513,6 +1521,7 @@ void t4_intr_enable(struct adapter *adapter)
 		     ERR_BAD_DB_PIDX2 | ERR_BAD_DB_PIDX1 |
 		     ERR_BAD_DB_PIDX0 | ERR_ING_CTXT_PRIO |
 		     ERR_EGR_CTXT_PRIO | INGRESS_SIZE_ERR |
+		     F_DBFIFO_HP_INT | F_DBFIFO_LP_INT |
 		     EGRESS_SIZE_ERR);
 	t4_write_reg(adapter, MYPF_REG(PL_PF_INT_ENABLE), PF_INTR_MASK);
 	t4_set_reg_field(adapter, PL_INT_MAP0, 0, 1 << pf);
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" 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

* [PATCH 04/10] RDMA/cxgb4: Add debugfs rdma memory stats
From: Vipul Pandya @ 2011-10-19 17:10 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA
  Cc: roland-BHEL68pLQRGGvPXPguhicg, davem-fT/PcQaiUtIeIZ0/mPfg9Q,
	divy-ut6Up61K2wZBDgjK7y7TUQ, dm-ut6Up61K2wZBDgjK7y7TUQ,
	kumaras-ut6Up61K2wZBDgjK7y7TUQ,
	swise-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW, Vipul Pandya
In-Reply-To: <1319044264-779-1-git-send-email-vipul-ut6Up61K2wZBDgjK7y7TUQ@public.gmane.org>

Signed-off-by: Vipul Pandya <vipul-ut6Up61K2wZBDgjK7y7TUQ@public.gmane.org>
Signed-off-by: Steve Wise <swise-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>
---
 drivers/infiniband/hw/cxgb4/device.c   |   78 +++++++++++++++++++++++++++++++-
 drivers/infiniband/hw/cxgb4/iw_cxgb4.h |   17 +++++++
 drivers/infiniband/hw/cxgb4/mem.c      |   11 ++++-
 drivers/infiniband/hw/cxgb4/provider.c |    8 +++
 drivers/infiniband/hw/cxgb4/resource.c |   44 ++++++++++++++++++
 5 files changed, 155 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
index 6d0df6e..8483111 100644
--- a/drivers/infiniband/hw/cxgb4/device.c
+++ b/drivers/infiniband/hw/cxgb4/device.c
@@ -240,6 +240,62 @@ static const struct file_operations stag_debugfs_fops = {
 	.llseek  = default_llseek,
 };
 
+static int stats_show(struct seq_file *seq, void *v)
+{
+	struct c4iw_dev *dev = seq->private;
+
+	seq_printf(seq, " Object: %10s %10s %10s\n", "Total", "Current", "Max");
+	seq_printf(seq, "     PDID: %10llu %10llu %10llu\n",
+			dev->rdev.stats.pd.total, dev->rdev.stats.pd.cur,
+			dev->rdev.stats.pd.max);
+	seq_printf(seq, "      QID: %10llu %10llu %10llu\n",
+			dev->rdev.stats.qid.total, dev->rdev.stats.qid.cur,
+			dev->rdev.stats.qid.max);
+	seq_printf(seq, "   TPTMEM: %10llu %10llu %10llu\n",
+			dev->rdev.stats.stag.total, dev->rdev.stats.stag.cur,
+			dev->rdev.stats.stag.max);
+	seq_printf(seq, "   PBLMEM: %10llu %10llu %10llu\n",
+			dev->rdev.stats.pbl.total, dev->rdev.stats.pbl.cur,
+			dev->rdev.stats.pbl.max);
+	seq_printf(seq, "   RQTMEM: %10llu %10llu %10llu\n",
+			dev->rdev.stats.rqt.total, dev->rdev.stats.rqt.cur,
+			dev->rdev.stats.rqt.max);
+	seq_printf(seq, "  OCQPMEM: %10llu %10llu %10llu\n",
+			dev->rdev.stats.ocqp.total, dev->rdev.stats.ocqp.cur,
+			dev->rdev.stats.ocqp.max);
+	return 0;
+}
+
+static int stats_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, stats_show, inode->i_private);
+}
+
+static ssize_t stats_clear(struct file *file, const char __user *buf,
+		size_t count, loff_t *pos)
+{
+	struct c4iw_dev *dev = ((struct seq_file *)file->private_data)->private;
+
+	mutex_lock(&dev->rdev.stats.lock);
+	dev->rdev.stats.pd.max = 0;
+	dev->rdev.stats.qid.max = 0;
+	dev->rdev.stats.stag.max = 0;
+	dev->rdev.stats.pbl.max = 0;
+	dev->rdev.stats.rqt.max = 0;
+	dev->rdev.stats.ocqp.max = 0;
+	mutex_unlock(&dev->rdev.stats.lock);
+	return count;
+}
+
+static const struct file_operations stats_debugfs_fops = {
+	.owner   = THIS_MODULE,
+	.open    = stats_open,
+	.release = single_release,
+	.read    = seq_read,
+	.llseek  = seq_lseek,
+	.write   = stats_clear,
+};
+
 static int setup_debugfs(struct c4iw_dev *devp)
 {
 	struct dentry *de;
@@ -256,6 +312,12 @@ static int setup_debugfs(struct c4iw_dev *devp)
 				 (void *)devp, &stag_debugfs_fops);
 	if (de && de->d_inode)
 		de->d_inode->i_size = 4096;
+
+	de = debugfs_create_file("stats", S_IWUSR, devp->debugfs_root,
+			(void *)devp, &stats_debugfs_fops);
+	if (de && de->d_inode)
+		de->d_inode->i_size = 4096;
+
 	return 0;
 }
 
@@ -269,9 +331,13 @@ void c4iw_release_dev_ucontext(struct c4iw_rdev *rdev,
 	list_for_each_safe(pos, nxt, &uctx->qpids) {
 		entry = list_entry(pos, struct c4iw_qid_list, entry);
 		list_del_init(&entry->entry);
-		if (!(entry->qid & rdev->qpmask))
+		if (!(entry->qid & rdev->qpmask)) {
 			c4iw_put_resource(&rdev->resource.qid_fifo, entry->qid,
-					  &rdev->resource.qid_fifo_lock);
+					&rdev->resource.qid_fifo_lock);
+			mutex_lock(&rdev->stats.lock);
+			rdev->stats.qid.cur -= rdev->qpmask + 1;
+			mutex_unlock(&rdev->stats.lock);
+		}
 		kfree(entry);
 	}
 
@@ -332,6 +398,13 @@ static int c4iw_rdev_open(struct c4iw_rdev *rdev)
 		goto err1;
 	}
 
+	rdev->stats.pd.total = T4_MAX_NUM_PD;
+	rdev->stats.stag.total = rdev->lldi.vr->stag.size;
+	rdev->stats.pbl.total = rdev->lldi.vr->pbl.size;
+	rdev->stats.rqt.total = rdev->lldi.vr->rq.size;
+	rdev->stats.ocqp.total = rdev->lldi.vr->ocq.size;
+	rdev->stats.qid.total = rdev->lldi.vr->qp.size;
+
 	err = c4iw_init_resource(rdev, c4iw_num_stags(rdev), T4_MAX_NUM_PD);
 	if (err) {
 		printk(KERN_ERR MOD "error %d initializing resources\n", err);
@@ -440,6 +513,7 @@ static struct c4iw_dev *c4iw_alloc(const struct cxgb4_lld_info *infop)
 	idr_init(&devp->qpidr);
 	idr_init(&devp->mmidr);
 	spin_lock_init(&devp->lock);
+	mutex_init(&devp->rdev.stats.lock);
 
 	if (c4iw_debugfs_root) {
 		devp->debugfs_root = debugfs_create_dir(
diff --git a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
index 62cea0e..ec7c848 100644
--- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
+++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
@@ -103,6 +103,22 @@ enum c4iw_rdev_flags {
 	T4_FATAL_ERROR = (1<<0),
 };
 
+struct c4iw_stat {
+	u64 total;
+	u64 cur;
+	u64 max;
+};
+
+struct c4iw_stats {
+	struct mutex lock;
+	struct c4iw_stat qid;
+	struct c4iw_stat pd;
+	struct c4iw_stat stag;
+	struct c4iw_stat pbl;
+	struct c4iw_stat rqt;
+	struct c4iw_stat ocqp;
+};
+
 struct c4iw_rdev {
 	struct c4iw_resource resource;
 	unsigned long qpshift;
@@ -117,6 +133,7 @@ struct c4iw_rdev {
 	struct cxgb4_lld_info lldi;
 	unsigned long oc_mw_pa;
 	void __iomem *oc_mw_kva;
+	struct c4iw_stats stats;
 };
 
 static inline int c4iw_fatal_error(struct c4iw_rdev *rdev)
diff --git a/drivers/infiniband/hw/cxgb4/mem.c b/drivers/infiniband/hw/cxgb4/mem.c
index 40c8353..2a87379 100644
--- a/drivers/infiniband/hw/cxgb4/mem.c
+++ b/drivers/infiniband/hw/cxgb4/mem.c
@@ -135,6 +135,11 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry,
 					     &rdev->resource.tpt_fifo_lock);
 		if (!stag_idx)
 			return -ENOMEM;
+		mutex_lock(&rdev->stats.lock);
+		rdev->stats.stag.cur += 32;
+		if (rdev->stats.stag.cur > rdev->stats.stag.max)
+			rdev->stats.stag.max = rdev->stats.stag.cur;
+		mutex_unlock(&rdev->stats.lock);
 		*stag = (stag_idx << 8) | (atomic_inc_return(&key) & 0xff);
 	}
 	PDBG("%s stag_state 0x%0x type 0x%0x pdid 0x%0x, stag_idx 0x%x\n",
@@ -165,9 +170,13 @@ static int write_tpt_entry(struct c4iw_rdev *rdev, u32 reset_tpt_entry,
 				(rdev->lldi.vr->stag.start >> 5),
 				sizeof(tpt), &tpt);
 
-	if (reset_tpt_entry)
+	if (reset_tpt_entry) {
 		c4iw_put_resource(&rdev->resource.tpt_fifo, stag_idx,
 				  &rdev->resource.tpt_fifo_lock);
+		mutex_lock(&rdev->stats.lock);
+		rdev->stats.stag.cur -= 32;
+		mutex_unlock(&rdev->stats.lock);
+	}
 	return err;
 }
 
diff --git a/drivers/infiniband/hw/cxgb4/provider.c b/drivers/infiniband/hw/cxgb4/provider.c
index 247fe70..c2554ef 100644
--- a/drivers/infiniband/hw/cxgb4/provider.c
+++ b/drivers/infiniband/hw/cxgb4/provider.c
@@ -190,6 +190,9 @@ static int c4iw_deallocate_pd(struct ib_pd *pd)
 	PDBG("%s ibpd %p pdid 0x%x\n", __func__, pd, php->pdid);
 	c4iw_put_resource(&rhp->rdev.resource.pdid_fifo, php->pdid,
 			  &rhp->rdev.resource.pdid_fifo_lock);
+	mutex_lock(&rhp->rdev.stats.lock);
+	rhp->rdev.stats.pd.cur--;
+	mutex_unlock(&rhp->rdev.stats.lock);
 	kfree(php);
 	return 0;
 }
@@ -222,6 +225,11 @@ static struct ib_pd *c4iw_allocate_pd(struct ib_device *ibdev,
 			return ERR_PTR(-EFAULT);
 		}
 	}
+	mutex_lock(&rhp->rdev.stats.lock);
+	rhp->rdev.stats.pd.cur++;
+	if (rhp->rdev.stats.pd.cur > rhp->rdev.stats.pd.max)
+		rhp->rdev.stats.pd.max = rhp->rdev.stats.pd.cur;
+	mutex_unlock(&rhp->rdev.stats.lock);
 	PDBG("%s pdid 0x%0x ptr 0x%p\n", __func__, pdid, php);
 	return &php->ibpd;
 }
diff --git a/drivers/infiniband/hw/cxgb4/resource.c b/drivers/infiniband/hw/cxgb4/resource.c
index 407ff39..1b948d1 100644
--- a/drivers/infiniband/hw/cxgb4/resource.c
+++ b/drivers/infiniband/hw/cxgb4/resource.c
@@ -185,6 +185,9 @@ u32 c4iw_get_cqid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
 					&rdev->resource.qid_fifo_lock);
 		if (!qid)
 			goto out;
+		mutex_lock(&rdev->stats.lock);
+		rdev->stats.qid.cur += rdev->qpmask + 1;
+		mutex_unlock(&rdev->stats.lock);
 		for (i = qid+1; i & rdev->qpmask; i++) {
 			entry = kmalloc(sizeof *entry, GFP_KERNEL);
 			if (!entry)
@@ -213,6 +216,10 @@ u32 c4iw_get_cqid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
 out:
 	mutex_unlock(&uctx->lock);
 	PDBG("%s qid 0x%x\n", __func__, qid);
+	mutex_lock(&rdev->stats.lock);
+	if (rdev->stats.qid.cur > rdev->stats.qid.max)
+		rdev->stats.qid.max = rdev->stats.qid.cur;
+	mutex_unlock(&rdev->stats.lock);
 	return qid;
 }
 
@@ -249,6 +256,9 @@ u32 c4iw_get_qpid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
 					&rdev->resource.qid_fifo_lock);
 		if (!qid)
 			goto out;
+		mutex_lock(&rdev->stats.lock);
+		rdev->stats.qid.cur += rdev->qpmask + 1;
+		mutex_unlock(&rdev->stats.lock);
 		for (i = qid+1; i & rdev->qpmask; i++) {
 			entry = kmalloc(sizeof *entry, GFP_KERNEL);
 			if (!entry)
@@ -277,6 +287,10 @@ u32 c4iw_get_qpid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
 out:
 	mutex_unlock(&uctx->lock);
 	PDBG("%s qid 0x%x\n", __func__, qid);
+	mutex_lock(&rdev->stats.lock);
+	if (rdev->stats.qid.cur > rdev->stats.qid.max)
+		rdev->stats.qid.max = rdev->stats.qid.cur;
+	mutex_unlock(&rdev->stats.lock);
 	return qid;
 }
 
@@ -315,12 +329,22 @@ u32 c4iw_pblpool_alloc(struct c4iw_rdev *rdev, int size)
 	if (!addr)
 		printk_ratelimited(KERN_WARNING MOD "%s: Out of PBL memory\n",
 		       pci_name(rdev->lldi.pdev));
+	if (addr) {
+		mutex_lock(&rdev->stats.lock);
+		rdev->stats.pbl.cur += roundup(size, 1 << MIN_PBL_SHIFT);
+		if (rdev->stats.pbl.cur > rdev->stats.pbl.max)
+			rdev->stats.pbl.max = rdev->stats.pbl.cur;
+		mutex_unlock(&rdev->stats.lock);
+	}
 	return (u32)addr;
 }
 
 void c4iw_pblpool_free(struct c4iw_rdev *rdev, u32 addr, int size)
 {
 	PDBG("%s addr 0x%x size %d\n", __func__, addr, size);
+	mutex_lock(&rdev->stats.lock);
+	rdev->stats.pbl.cur -= roundup(size, 1 << MIN_PBL_SHIFT);
+	mutex_unlock(&rdev->stats.lock);
 	gen_pool_free(rdev->pbl_pool, (unsigned long)addr, size);
 }
 
@@ -377,12 +401,22 @@ u32 c4iw_rqtpool_alloc(struct c4iw_rdev *rdev, int size)
 	if (!addr)
 		printk_ratelimited(KERN_WARNING MOD "%s: Out of RQT memory\n",
 		       pci_name(rdev->lldi.pdev));
+	if (addr) {
+		mutex_lock(&rdev->stats.lock);
+		rdev->stats.rqt.cur += roundup(size << 6, 1 << MIN_RQT_SHIFT);
+		if (rdev->stats.rqt.cur > rdev->stats.rqt.max)
+			rdev->stats.rqt.max = rdev->stats.rqt.cur;
+		mutex_unlock(&rdev->stats.lock);
+	}
 	return (u32)addr;
 }
 
 void c4iw_rqtpool_free(struct c4iw_rdev *rdev, u32 addr, int size)
 {
 	PDBG("%s addr 0x%x size %d\n", __func__, addr, size << 6);
+	mutex_lock(&rdev->stats.lock);
+	rdev->stats.rqt.cur -= roundup(size << 6, 1 << MIN_RQT_SHIFT);
+	mutex_unlock(&rdev->stats.lock);
 	gen_pool_free(rdev->rqt_pool, (unsigned long)addr, size << 6);
 }
 
@@ -433,12 +467,22 @@ u32 c4iw_ocqp_pool_alloc(struct c4iw_rdev *rdev, int size)
 {
 	unsigned long addr = gen_pool_alloc(rdev->ocqp_pool, size);
 	PDBG("%s addr 0x%x size %d\n", __func__, (u32)addr, size);
+	if (addr) {
+		mutex_lock(&rdev->stats.lock);
+		rdev->stats.ocqp.cur += roundup(size, 1 << MIN_OCQP_SHIFT);
+		if (rdev->stats.ocqp.cur > rdev->stats.ocqp.max)
+			rdev->stats.ocqp.max = rdev->stats.ocqp.cur;
+		mutex_unlock(&rdev->stats.lock);
+	}
 	return (u32)addr;
 }
 
 void c4iw_ocqp_pool_free(struct c4iw_rdev *rdev, u32 addr, int size)
 {
 	PDBG("%s addr 0x%x size %d\n", __func__, addr, size);
+	mutex_lock(&rdev->stats.lock);
+	rdev->stats.ocqp.cur -= roundup(size, 1 << MIN_OCQP_SHIFT);
+	mutex_unlock(&rdev->stats.lock);
 	gen_pool_free(rdev->ocqp_pool, (unsigned long)addr, size);
 }
 
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" 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

* [PATCH 00/10] Doorbell drop recovery for T4 iWARP
From: Vipul Pandya @ 2011-10-19 17:10 UTC (permalink / raw)
  To: linux-rdma, netdev; +Cc: roland, davem, divy, dm, kumaras, swise, Vipul Pandya

This patch-series implements doorbell drop recovery for T4 iWARP driver.

In the event where DBs are dropped application can get stalled for one or more
reasons. So, we recover RDMA and LLD queues in such an event.
We also take care for handling DB overflow events.

The patch-series also has some bug fixes, adds RDMA debugfs stats and removes
kfifo usage for ID mangement.

The patch-series is based on linux-next, and involves changes on
drivers/net/ethernet/chelsio/cxgb4 and drivers/infiniband/hw/cxgb4.

The changes on drivers/infiniband/hw/cxgb4 are dependent on the changes of
drivers/net/ethernet/chelsio/cxgb4 for the T4-iWARP driver to build correctly.
So, we request to merge the entire patch-series through one tree - either
through Roland's tree, or through Dave Miller's tree.

Both linux-rdma and netdev are included in this post for review.

Vipul Pandya (10):
  cxgb4: Detect DB FULL events and notify RDMA ULD.
  cxgb4: DB Drop Recovery for RDMA and LLD queues.
  cxgb4: DB Drop Recovery for RDMA and LLD queues.
  RDMA/cxgb4: Add debugfs rdma memory stats
  RDMA/cxgb4: Add DB Overflow Avoidance.
  RDMA/cxgb4: disable interrupts in c4iw_ev_dispatch().
  RDMA/cxgb4: DB Drop Recovery for RDMA and LLD queues.
  RDMA/cxgb4: Use vmalloc for debugfs qp dump. Allows dumping thousands
    of qps.
  RDMA/cxgb4: remove kfifo usage
  RDMA/cxgb4: Add query_qp support in driver to query the qp state
    before flushing.

 drivers/infiniband/hw/cxgb4/Makefile            |    2 +-
 drivers/infiniband/hw/cxgb4/cm.c                |   23 ++-
 drivers/infiniband/hw/cxgb4/device.c            |  339 ++++++++++++++++++++++-
 drivers/infiniband/hw/cxgb4/ev.c                |    8 +-
 drivers/infiniband/hw/cxgb4/id_table.c          |  112 ++++++++
 drivers/infiniband/hw/cxgb4/iw_cxgb4.h          |  134 ++++++++--
 drivers/infiniband/hw/cxgb4/mem.c               |   21 +-
 drivers/infiniband/hw/cxgb4/provider.c          |   19 +-
 drivers/infiniband/hw/cxgb4/qp.c                |  105 +++++++-
 drivers/infiniband/hw/cxgb4/resource.c          |  180 +++++-------
 drivers/infiniband/hw/cxgb4/t4.h                |   24 ++
 drivers/net/ethernet/chelsio/cxgb4/cxgb4.h      |   11 +
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c |  235 +++++++++++++++-
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h  |   11 +
 drivers/net/ethernet/chelsio/cxgb4/sge.c        |   22 ++-
 drivers/net/ethernet/chelsio/cxgb4/t4_hw.c      |   62 ++++-
 drivers/net/ethernet/chelsio/cxgb4/t4_regs.h    |   53 ++++
 drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h   |   28 ++
 18 files changed, 1218 insertions(+), 171 deletions(-)
 create mode 100644 drivers/infiniband/hw/cxgb4/id_table.c

^ permalink raw reply

* [PATCH 02/10] cxgb4: DB Drop Recovery for RDMA and LLD queues.
From: Vipul Pandya @ 2011-10-19 17:10 UTC (permalink / raw)
  To: linux-rdma, netdev; +Cc: roland, davem, divy, dm, kumaras, swise, Vipul Pandya
In-Reply-To: <1319044264-779-1-git-send-email-vipul@chelsio.com>

    - Add platform-specific callback functions for interrupts.  This is
    needed to do a single read-clear of the CAUSE register and then call
    out to platform specific functions for DB threshold interrupts and DB
    drop interrupts.

    - Add t4_mem_win_read_len() - mem-window reads for arbitrary lengths.
    This is used to read the CIDX/PIDX values from EC contexts during DB
    drop recovery.

    - Add t4_fwaddrspace_write() - sends addrspace write cmds to the fw.
    Needed to flush the sge eq context cache.

Signed-off-by: Vipul Pandya <vipul@chelsio.com>
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
---
 drivers/net/ethernet/chelsio/cxgb4/t4_hw.c    |   69 +++++++++++++++++++++----
 drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h |    5 ++
 2 files changed, 63 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
index 13609bf..32e1dd5 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
@@ -868,11 +868,14 @@ int t4_restart_aneg(struct adapter *adap, unsigned int mbox, unsigned int port)
 	return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
 }
 
+typedef void (*int_handler_t)(struct adapter *adap);
+
 struct intr_info {
 	unsigned int mask;       /* bits to check in interrupt status */
 	const char *msg;         /* message to print or NULL */
 	short stat_idx;          /* stat counter to increment or -1 */
 	unsigned short fatal;    /* whether the condition reported is fatal */
+	int_handler_t int_handler; /* platform-specific int handler */
 };
 
 /**
@@ -905,6 +908,8 @@ static int t4_handle_intr_status(struct adapter *adapter, unsigned int reg,
 		} else if (acts->msg && printk_ratelimit())
 			dev_warn(adapter->pdev_dev, "%s (0x%x)\n", acts->msg,
 				 status & acts->mask);
+		if (acts->int_handler)
+			acts->int_handler(adapter);
 		mask |= acts->mask;
 	}
 	status &= mask;
@@ -1013,9 +1018,9 @@ static void sge_intr_handler(struct adapter *adapter)
 		{ ERR_INVALID_CIDX_INC,
 		  "SGE GTS CIDX increment too large", -1, 0 },
 		{ ERR_CPL_OPCODE_0, "SGE received 0-length CPL", -1, 0 },
-		{ F_DBFIFO_LP_INT, NULL, -1, 0 },
-		{ F_DBFIFO_HP_INT, NULL, -1, 0 },
-		{ ERR_DROPPED_DB, "SGE doorbell dropped", -1, 0 },
+		{ F_DBFIFO_LP_INT, NULL, -1, 0, t4_db_full },
+		{ F_DBFIFO_HP_INT, NULL, -1, 0, t4_db_full },
+		{ F_ERR_DROPPED_DB, NULL, -1, 0, t4_db_dropped },
 		{ ERR_DATA_CPL_ON_HIGH_QID1 | ERR_DATA_CPL_ON_HIGH_QID0,
 		  "SGE IQID > 1023 received CPL for FL", -1, 0 },
 		{ ERR_BAD_DB_PIDX3, "SGE DBP 3 pidx increment too large", -1,
@@ -1036,20 +1041,14 @@ static void sge_intr_handler(struct adapter *adapter)
 	};
 
 	v = (u64)t4_read_reg(adapter, SGE_INT_CAUSE1) |
-	    ((u64)t4_read_reg(adapter, SGE_INT_CAUSE2) << 32);
+		((u64)t4_read_reg(adapter, SGE_INT_CAUSE2) << 32);
 	if (v) {
 		dev_alert(adapter->pdev_dev, "SGE parity error (%#llx)\n",
-			 (unsigned long long)v);
+				(unsigned long long)v);
 		t4_write_reg(adapter, SGE_INT_CAUSE1, v);
 		t4_write_reg(adapter, SGE_INT_CAUSE2, v >> 32);
 	}
 
-	err = t4_read_reg(adapter, A_SGE_INT_CAUSE3);
-	if (err & (F_DBFIFO_HP_INT|F_DBFIFO_LP_INT))
-		t4_db_full(adapter);
-	if (err & F_ERR_DROPPED_DB)
-		t4_db_dropped(adapter);
-
 	if (t4_handle_intr_status(adapter, SGE_INT_CAUSE3, sge_intr_info) ||
 	    v != 0)
 		t4_fatal_err(adapter);
@@ -1995,6 +1994,54 @@ int t4_wol_pat_enable(struct adapter *adap, unsigned int port, unsigned int map,
 	(var).retval_len16 = htonl(FW_LEN16(var)); \
 } while (0)
 
+int t4_fwaddrspace_write(struct adapter *adap, unsigned int mbox,
+			  u32 addr, u32 val)
+{
+	struct fw_ldst_cmd c;
+
+	memset(&c, 0, sizeof(c));
+	c.op_to_addrspace = htonl(V_FW_CMD_OP(FW_LDST_CMD) | F_FW_CMD_REQUEST |
+			    F_FW_CMD_WRITE |
+			    V_FW_LDST_CMD_ADDRSPACE(FW_LDST_ADDRSPC_FIRMWARE));
+	c.cycles_to_len16 = htonl(FW_LEN16(c));
+	c.u.addrval.addr = htonl(addr);
+	c.u.addrval.val = htonl(val);
+
+	return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
+}
+
+/*
+ *     t4_mem_win_read_len - read memory through PCIE memory window
+ *     @adap: the adapter
+ *     @addr: address of first byte requested aligned on 32b.
+ *     @data: len bytes to hold the data read
+ *     @len: amount of data to read from window.  Must be <=
+ *            MEMWIN0_APERATURE after adjusting for 16B alignment
+ *            requirements of the the memory window.
+ *
+ *     Read len bytes of data from MC starting at @addr.
+ */
+int t4_mem_win_read_len(struct adapter *adap, u32 addr, __be32 *data, int len)
+{
+	int i;
+	int off;
+
+	/*
+	 * Align on a 16B boundary.
+	 */
+	off = addr & 15;
+	if ((addr & 3) || (len + off) > MEMWIN0_APERTURE)
+		return -EINVAL;
+
+	t4_write_reg(adap, A_PCIE_MEM_ACCESS_OFFSET, addr & ~15);
+	t4_read_reg(adap, A_PCIE_MEM_ACCESS_OFFSET);
+
+	for (i = 0; i < len; i += 4)
+		*data++ = t4_read_reg(adap, (MEMWIN0_BASE + off + i));
+
+	return 0;
+}
+
 /**
  *	t4_mdio_rd - read a PHY register through MDIO
  *	@adap: the adapter
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
index edcfd7e..83ca454 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
@@ -1620,4 +1620,9 @@ struct fw_hdr {
 #define FW_HDR_FW_VER_MINOR_GET(x) (((x) >> 16) & 0xff)
 #define FW_HDR_FW_VER_MICRO_GET(x) (((x) >> 8) & 0xff)
 #define FW_HDR_FW_VER_BUILD_GET(x) (((x) >> 0) & 0xff)
+
+int t4_mem_win_read_len(struct adapter *adap, u32 addr, __be32 *data, int len);
+int t4_fwaddrspace_write(struct adapter *adap, unsigned int mbox,
+			  u32 addr, u32 val);
+
 #endif /* _T4FW_INTERFACE_H_ */
-- 
1.7.1

^ permalink raw reply related

* [PATCH 03/10] cxgb4: DB Drop Recovery for RDMA and LLD queues.
From: Vipul Pandya @ 2011-10-19 17:10 UTC (permalink / raw)
  To: linux-rdma, netdev; +Cc: roland, davem, divy, dm, kumaras, swise, Vipul Pandya
In-Reply-To: <1319044264-779-1-git-send-email-vipul@chelsio.com>

    - recover LLD EQs for DB drop interrupts.  This includes adding a new
    db_lock, a spin lock disabling BH too, used by the recovery thread and
    the ring_tx_db() paths to allow db drop recovery.

    - cleaned up initial db avoidance code.

    - add read_eq_indices() - allows the LLD to use the pcie mw to efficiently
    read hw eq contexts.

    - add cxgb4_sync_txq_pidx() - called by iw_cxgb4 to sync up the sw/hw pidx
    value.

    - add flush_eq_cache() and cxgb4_flush_eq_cache().  This allows iw_cxgb4
    to flush the sge eq context cache before beginning db drop recovery.

    - add module parameter, dbfoifo_int_thresh, to allow tuning the db
    interrupt threshold value.

    - add dbfifo_int_thresh to cxgb4_lld_info so iw_cxgb4 knows the threshold.

    - add module parameter, dbfoifo_drain_delay, to allow tuning the amount
    of time delay between DB FULL and EMPTY upcalls to iw_cxgb4.

Signed-off-by: Vipul Pandya <vipul@chelsio.com>
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
---
 drivers/net/ethernet/chelsio/cxgb4/cxgb4.h      |    7 +
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c |  214 +++++++++++++++++++----
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h  |    4 +
 drivers/net/ethernet/chelsio/cxgb4/sge.c        |   20 ++-
 drivers/net/ethernet/chelsio/cxgb4/t4_regs.h    |   53 ++++++
 drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h   |   23 +++
 6 files changed, 279 insertions(+), 42 deletions(-)

diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
index e18b5ad..f202cb9 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
@@ -51,6 +51,8 @@
 #define FW_VERSION_MINOR 1
 #define FW_VERSION_MICRO 0
 
+#define CH_WARN(adap, fmt, ...) dev_warn(adap->pdev_dev, fmt, ## __VA_ARGS__)
+
 enum {
 	MAX_NPORTS = 4,     /* max # of ports */
 	SERNUM_LEN = 24,    /* Serial # length */
@@ -403,6 +405,9 @@ struct sge_txq {
 	struct tx_sw_desc *sdesc;   /* address of SW Tx descriptor ring */
 	struct sge_qstat *stat;     /* queue status entry */
 	dma_addr_t    phys_addr;    /* physical address of the ring */
+	spinlock_t db_lock;
+	int db_disabled;
+	unsigned short db_pidx;
 };
 
 struct sge_eth_txq {                /* state for an SGE Ethernet Tx queue */
@@ -475,6 +480,7 @@ struct adapter {
 	void __iomem *regs;
 	struct pci_dev *pdev;
 	struct device *pdev_dev;
+	unsigned int mbox;
 	unsigned int fn;
 	unsigned int flags;
 
@@ -607,6 +613,7 @@ irqreturn_t t4_sge_intr_msix(int irq, void *cookie);
 void t4_sge_init(struct adapter *adap);
 void t4_sge_start(struct adapter *adap);
 void t4_sge_stop(struct adapter *adap);
+extern int dbfifo_int_thresh;
 
 #define for_each_port(adapter, iter) \
 	for (iter = 0; iter < (adapter)->params.nports; ++iter)
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 870c320..64ad1c8 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -149,15 +149,6 @@ static unsigned int pfvfres_pmask(struct adapter *adapter,
 #endif
 
 enum {
-	MEMWIN0_APERTURE = 65536,
-	MEMWIN0_BASE     = 0x30000,
-	MEMWIN1_APERTURE = 32768,
-	MEMWIN1_BASE     = 0x28000,
-	MEMWIN2_APERTURE = 2048,
-	MEMWIN2_BASE     = 0x1b800,
-};
-
-enum {
 	MAX_TXQ_ENTRIES      = 16384,
 	MAX_CTRL_TXQ_ENTRIES = 1024,
 	MAX_RSPQ_ENTRIES     = 16384,
@@ -369,6 +360,15 @@ static int set_addr_filters(const struct net_device *dev, bool sleep)
 				uhash | mhash, sleep);
 }
 
+int dbfifo_int_thresh = 10; /* 10 == 640 entry threshold */
+module_param(dbfifo_int_thresh, int, 0644);
+MODULE_PARM_DESC(dbfifo_int_thresh, "doorbell fifo interrupt threshold");
+
+int dbfifo_drain_delay = 1000; /* usecs to sleep while draining the dbfifo */
+module_param(dbfifo_drain_delay, int, 0644);
+MODULE_PARM_DESC(dbfifo_drain_delay,
+		 "usecs to sleep while draining the dbfifo");
+
 /*
  * Set Rx properties of a port, such as promiscruity, address filters, and MTU.
  * If @mtu is -1 it is left unchanged.
@@ -387,6 +387,8 @@ static int set_rxmode(struct net_device *dev, int mtu, bool sleep_ok)
 	return ret;
 }
 
+static struct workqueue_struct *workq;
+
 /**
  *	link_start - enable a port
  *	@dev: the port to enable
@@ -2201,7 +2203,7 @@ static void cxgb4_queue_tid_release(struct tid_info *t, unsigned int chan,
 	adap->tid_release_head = (void **)((uintptr_t)p | chan);
 	if (!adap->tid_release_task_busy) {
 		adap->tid_release_task_busy = true;
-		schedule_work(&adap->tid_release_task);
+		queue_work(workq, &adap->tid_release_task);
 	}
 	spin_unlock_bh(&adap->tid_release_lock);
 }
@@ -2428,6 +2430,59 @@ void cxgb4_iscsi_init(struct net_device *dev, unsigned int tag_mask,
 }
 EXPORT_SYMBOL(cxgb4_iscsi_init);
 
+int cxgb4_flush_eq_cache(struct net_device *dev)
+{
+	struct adapter *adap = netdev2adap(dev);
+	int ret;
+
+	ret = t4_fwaddrspace_write(adap, adap->mbox,
+				   0xe1000000 + A_SGE_CTXT_CMD, 0x20000000);
+	return ret;
+}
+EXPORT_SYMBOL(cxgb4_flush_eq_cache);
+
+static int read_eq_indices(struct adapter *adap, u16 qid, u16 *pidx, u16 *cidx)
+{
+	u32 addr = t4_read_reg(adap, A_SGE_DBQ_CTXT_BADDR) + 24 * qid + 8;
+	__be64 indices;
+	int ret;
+
+	ret = t4_mem_win_read_len(adap, addr, (__be32 *)&indices, 8);
+	if (!ret) {
+		indices = be64_to_cpu(indices);
+		*cidx = (indices >> 25) & 0xffff;
+		*pidx = (indices >> 9) & 0xffff;
+	}
+	return ret;
+}
+
+int cxgb4_sync_txq_pidx(struct net_device *dev, u16 qid, u16 pidx,
+			u16 size)
+{
+	struct adapter *adap = netdev2adap(dev);
+	u16 hw_pidx, hw_cidx;
+	int ret;
+
+	ret = read_eq_indices(adap, qid, &hw_pidx, &hw_cidx);
+	if (ret)
+		goto out;
+
+	if (pidx != hw_pidx) {
+		u16 delta;
+
+		if (pidx >= hw_pidx)
+			delta = pidx - hw_pidx;
+		else
+			delta = size - hw_pidx + pidx;
+		wmb();
+		t4_write_reg(adap, MYPF_REG(A_SGE_PF_KDOORBELL),
+			     V_QID(qid) | V_PIDX(delta));
+	}
+out:
+	return ret;
+}
+EXPORT_SYMBOL(cxgb4_sync_txq_pidx);
+
 static struct pci_driver cxgb4_driver;
 
 static void check_neigh_update(struct neighbour *neigh)
@@ -2461,6 +2516,95 @@ static struct notifier_block cxgb4_netevent_nb = {
 	.notifier_call = netevent_cb
 };
 
+static void drain_db_fifo(struct adapter *adap, int usecs)
+{
+	u32 v;
+
+	do {
+		set_current_state(TASK_UNINTERRUPTIBLE);
+		schedule_timeout(usecs_to_jiffies(usecs));
+		v = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
+		if (G_LP_COUNT(v) == 0 && G_HP_COUNT(v) == 0)
+			break;
+	} while (1);
+}
+
+static void disable_txq_db(struct sge_txq *q)
+{
+	spin_lock_irq(&q->db_lock);
+	q->db_disabled = 1;
+	spin_unlock_irq(&q->db_lock);
+}
+
+static void enable_txq_db(struct sge_txq *q)
+{
+	spin_lock_irq(&q->db_lock);
+	q->db_disabled = 0;
+	spin_unlock_irq(&q->db_lock);
+}
+
+static void disable_dbs(struct adapter *adap)
+{
+	int i;
+
+	for_each_ethrxq(&adap->sge, i)
+		disable_txq_db(&adap->sge.ethtxq[i].q);
+	for_each_ofldrxq(&adap->sge, i)
+		disable_txq_db(&adap->sge.ofldtxq[i].q);
+	for_each_port(adap, i)
+		disable_txq_db(&adap->sge.ctrlq[i].q);
+}
+
+static void enable_dbs(struct adapter *adap)
+{
+	int i;
+
+	for_each_ethrxq(&adap->sge, i)
+		enable_txq_db(&adap->sge.ethtxq[i].q);
+	for_each_ofldrxq(&adap->sge, i)
+		enable_txq_db(&adap->sge.ofldtxq[i].q);
+	for_each_port(adap, i)
+		enable_txq_db(&adap->sge.ctrlq[i].q);
+}
+
+static void sync_txq_pidx(struct adapter *adap, struct sge_txq *q)
+{
+	u16 hw_pidx, hw_cidx;
+	int ret;
+
+	spin_lock_bh(&q->db_lock);
+	ret = read_eq_indices(adap, (u16)q->cntxt_id, &hw_pidx, &hw_cidx);
+	if (ret)
+		goto out;
+	if (q->db_pidx != hw_pidx) {
+		u16 delta;
+
+		if (q->db_pidx >= hw_pidx)
+			delta = q->db_pidx - hw_pidx;
+		else
+			delta = q->size - hw_pidx + q->db_pidx;
+		wmb();
+		t4_write_reg(adap, MYPF_REG(A_SGE_PF_KDOORBELL),
+				V_QID(q->cntxt_id) | V_PIDX(delta));
+	}
+out:
+	q->db_disabled = 0;
+	spin_unlock_bh(&q->db_lock);
+	if (ret)
+		CH_WARN(adap, "DB drop recovery failed.\n");
+}
+static void recover_all_queues(struct adapter *adap)
+{
+	int i;
+
+	for_each_ethrxq(&adap->sge, i)
+		sync_txq_pidx(adap, &adap->sge.ethtxq[i].q);
+	for_each_ofldrxq(&adap->sge, i)
+		sync_txq_pidx(adap, &adap->sge.ofldtxq[i].q);
+	for_each_port(adap, i)
+		sync_txq_pidx(adap, &adap->sge.ctrlq[i].q);
+}
+
 static void notify_rdma_uld(struct adapter *adap, enum cxgb4_control cmd)
 {
 	mutex_lock(&uld_mutex);
@@ -2473,55 +2617,41 @@ static void notify_rdma_uld(struct adapter *adap, enum cxgb4_control cmd)
 static void process_db_full(struct work_struct *work)
 {
 	struct adapter *adap;
-	static int delay = 1000;
-	u32 v;
 
 	adap = container_of(work, struct adapter, db_full_task);
 
-
-	/* stop LLD queues */
-
 	notify_rdma_uld(adap, CXGB4_CONTROL_DB_FULL);
-	do {
-		set_current_state(TASK_UNINTERRUPTIBLE);
-		schedule_timeout(usecs_to_jiffies(delay));
-		v = t4_read_reg(adap, A_SGE_DBFIFO_STATUS);
-		if (G_LP_COUNT(v) == 0 && G_HP_COUNT(v) == 0)
-			break;
-	} while (1);
+	drain_db_fifo(adap, dbfifo_drain_delay);
+	t4_set_reg_field(adap, A_SGE_INT_ENABLE3,
+			F_DBFIFO_HP_INT | F_DBFIFO_LP_INT,
+			F_DBFIFO_HP_INT | F_DBFIFO_LP_INT);
 	notify_rdma_uld(adap, CXGB4_CONTROL_DB_EMPTY);
-
-
-	/*
-	 * The more we get db full interrupts, the more we'll delay
-	 * in re-enabling db rings on queues, capped off at 200ms.
-	 */
-	delay = min(delay << 1, 200000);
-
-	/* resume LLD queues */
 }
 
 static void process_db_drop(struct work_struct *work)
 {
 	struct adapter *adap;
-	adap = container_of(work, struct adapter, db_drop_task);
 
+	adap = container_of(work, struct adapter, db_drop_task);
 
-	/*
-	 * sync the PIDX values in HW and SW for LLD queues.
-	 */
-
+	t4_set_reg_field(adap, A_SGE_DOORBELL_CONTROL, F_DROPPED_DB, 0);
+	disable_dbs(adap);
 	notify_rdma_uld(adap, CXGB4_CONTROL_DB_DROP);
+	drain_db_fifo(adap, 1);
+	recover_all_queues(adap);
+	enable_dbs(adap);
 }
 
 void t4_db_full(struct adapter *adap)
 {
-	schedule_work(&adap->db_full_task);
+	t4_set_reg_field(adap, A_SGE_INT_ENABLE3,
+			F_DBFIFO_HP_INT | F_DBFIFO_LP_INT, 0);
+	queue_work(workq, &adap->db_full_task);
 }
 
 void t4_db_dropped(struct adapter *adap)
 {
-	schedule_work(&adap->db_drop_task);
+	queue_work(workq, &adap->db_drop_task);
 }
 
 static void uld_attach(struct adapter *adap, unsigned int uld)
@@ -2557,6 +2687,7 @@ static void uld_attach(struct adapter *adap, unsigned int uld)
 	lli.gts_reg = adap->regs + MYPF_REG(SGE_PF_GTS);
 	lli.db_reg = adap->regs + MYPF_REG(SGE_PF_KDOORBELL);
 	lli.fw_vers = adap->params.fw_vers;
+	lli.dbfifo_int_thresh = dbfifo_int_thresh;
 
 	handle = ulds[uld].add(&lli);
 	if (IS_ERR(handle)) {
@@ -3673,6 +3804,7 @@ static int __devinit init_one(struct pci_dev *pdev,
 
 	adapter->pdev = pdev;
 	adapter->pdev_dev = &pdev->dev;
+	adapter->mbox = func;
 	adapter->fn = func;
 	adapter->msg_enable = dflt_msg_enable;
 	memset(adapter->chan_map, 0xff, sizeof(adapter->chan_map));
@@ -3868,6 +4000,10 @@ static int __init cxgb4_init_module(void)
 {
 	int ret;
 
+	workq = create_singlethread_workqueue("cxgb4");
+	if (!workq)
+		return -ENOMEM;
+
 	/* Debugfs support is optional, just warn if this fails */
 	cxgb4_debugfs_root = debugfs_create_dir(KBUILD_MODNAME, NULL);
 	if (!cxgb4_debugfs_root)
@@ -3883,6 +4019,8 @@ static void __exit cxgb4_cleanup_module(void)
 {
 	pci_unregister_driver(&cxgb4_driver);
 	debugfs_remove(cxgb4_debugfs_root);  /* NULL ok */
+	flush_workqueue(workq);
+	destroy_workqueue(workq);
 }
 
 module_init(cxgb4_init_module);
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
index 5cc2f27..d79980c 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h
@@ -218,6 +218,7 @@ struct cxgb4_lld_info {
 	unsigned short ucq_density;          /* # of user CQs/page */
 	void __iomem *gts_reg;               /* address of GTS register */
 	void __iomem *db_reg;                /* address of kernel doorbell */
+	int dbfifo_int_thresh;		     /* doorbell fifo int threshold */
 };
 
 struct cxgb4_uld_info {
@@ -226,6 +227,7 @@ struct cxgb4_uld_info {
 	int (*rx_handler)(void *handle, const __be64 *rsp,
 			  const struct pkt_gl *gl);
 	int (*state_change)(void *handle, enum cxgb4_state new_state);
+	int (*control)(void *handle, enum cxgb4_control control, ...);
 };
 
 int cxgb4_register_uld(enum cxgb4_uld type, const struct cxgb4_uld_info *p);
@@ -243,4 +245,6 @@ void cxgb4_iscsi_init(struct net_device *dev, unsigned int tag_mask,
 		      const unsigned int *pgsz_order);
 struct sk_buff *cxgb4_pktgl_to_skb(const struct pkt_gl *gl,
 				   unsigned int skb_len, unsigned int pull_len);
+int cxgb4_sync_txq_pidx(struct net_device *dev, u16 qid, u16 pidx, u16 size);
+int cxgb4_flush_eq_cache(struct net_device *dev);
 #endif  /* !__CXGB4_OFLD_H */
diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c
index 3631fbb..65ecf1e 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/sge.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c
@@ -767,8 +767,13 @@ static void write_sgl(const struct sk_buff *skb, struct sge_txq *q,
 static inline void ring_tx_db(struct adapter *adap, struct sge_txq *q, int n)
 {
 	wmb();            /* write descriptors before telling HW */
-	t4_write_reg(adap, MYPF_REG(SGE_PF_KDOORBELL),
-		     QID(q->cntxt_id) | PIDX(n));
+	spin_lock(&q->db_lock);
+	if (!q->db_disabled) {
+		t4_write_reg(adap, MYPF_REG(A_SGE_PF_KDOORBELL),
+			     V_QID(q->cntxt_id) | V_PIDX(n));
+	}
+	q->db_pidx = q->pidx;
+	spin_unlock(&q->db_lock);
 }
 
 /**
@@ -2080,6 +2085,7 @@ static void init_txq(struct adapter *adap, struct sge_txq *q, unsigned int id)
 	q->stops = q->restarts = 0;
 	q->stat = (void *)&q->desc[q->size];
 	q->cntxt_id = id;
+	spin_lock_init(&q->db_lock);
 	adap->sge.egr_map[id - adap->sge.egr_start] = q;
 }
 
@@ -2414,9 +2420,15 @@ void t4_sge_init(struct adapter *adap)
 			 RXPKTCPLMODE |
 			 (STAT_LEN == 128 ? EGRSTATUSPAGESIZE : 0));
 
+	/*
+	 * Set up to drop DOORBELL writes when the DOORBELL FIFO overflows
+	 * and generate an interrupt when this occurs so we can recover.
+	 */
 	t4_set_reg_field(adap, A_SGE_DBFIFO_STATUS,
-			V_HP_INT_THRESH(5) | V_LP_INT_THRESH(5),
-			V_HP_INT_THRESH(5) | V_LP_INT_THRESH(5));
+			V_HP_INT_THRESH(M_HP_INT_THRESH) |
+			V_LP_INT_THRESH(M_LP_INT_THRESH),
+			V_HP_INT_THRESH(dbfifo_int_thresh) |
+			V_LP_INT_THRESH(dbfifo_int_thresh));
 	t4_set_reg_field(adap, A_SGE_DOORBELL_CONTROL, F_ENABLE_DROP,
 			F_ENABLE_DROP);
 
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
index 0adc5bc..111fc32 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_regs.h
@@ -190,6 +190,59 @@
 #define SGE_DEBUG_DATA_LOW 0x10d4
 #define SGE_INGRESS_QUEUES_PER_PAGE_PF 0x10f4
 
+#define S_LP_INT_THRESH    12
+#define V_LP_INT_THRESH(x) ((x) << S_LP_INT_THRESH)
+#define S_HP_INT_THRESH    28
+#define V_HP_INT_THRESH(x) ((x) << S_HP_INT_THRESH)
+#define A_SGE_DBFIFO_STATUS 0x10a4
+
+#define S_ENABLE_DROP    13
+#define V_ENABLE_DROP(x) ((x) << S_ENABLE_DROP)
+#define F_ENABLE_DROP    V_ENABLE_DROP(1U)
+#define A_SGE_DOORBELL_CONTROL 0x10a8
+
+#define A_SGE_CTXT_CMD 0x11fc
+#define A_SGE_DBQ_CTXT_BADDR 0x1084
+
+#define A_SGE_PF_KDOORBELL 0x0
+
+#define S_QID 15
+#define V_QID(x) ((x) << S_QID)
+
+#define S_PIDX 0
+#define V_PIDX(x) ((x) << S_PIDX)
+
+#define M_LP_COUNT 0x7ffU
+#define S_LP_COUNT 0
+#define G_LP_COUNT(x) (((x) >> S_LP_COUNT) & M_LP_COUNT)
+
+#define M_HP_COUNT 0x7ffU
+#define S_HP_COUNT 16
+#define G_HP_COUNT(x) (((x) >> S_HP_COUNT) & M_HP_COUNT)
+
+#define A_SGE_INT_ENABLE3 0x1040
+
+#define S_DBFIFO_HP_INT 8
+#define V_DBFIFO_HP_INT(x) ((x) << S_DBFIFO_HP_INT)
+#define F_DBFIFO_HP_INT V_DBFIFO_HP_INT(1U)
+
+#define S_DBFIFO_LP_INT 7
+#define V_DBFIFO_LP_INT(x) ((x) << S_DBFIFO_LP_INT)
+#define F_DBFIFO_LP_INT V_DBFIFO_LP_INT(1U)
+
+#define S_DROPPED_DB 0
+#define V_DROPPED_DB(x) ((x) << S_DROPPED_DB)
+#define F_DROPPED_DB V_DROPPED_DB(1U)
+
+#define S_ERR_DROPPED_DB 18
+#define V_ERR_DROPPED_DB(x) ((x) << S_ERR_DROPPED_DB)
+#define F_ERR_DROPPED_DB V_ERR_DROPPED_DB(1U)
+
+#define A_PCIE_MEM_ACCESS_OFFSET 0x306c
+
+#define M_HP_INT_THRESH 0xfU
+#define M_LP_INT_THRESH 0xfU
+
 #define PCIE_PF_CLI 0x44
 #define PCIE_INT_CAUSE 0x3004
 #define  UNXSPLCPLERR  0x20000000U
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
index 83ca454..0579e98 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
@@ -1625,4 +1625,27 @@ int t4_mem_win_read_len(struct adapter *adap, u32 addr, __be32 *data, int len);
 int t4_fwaddrspace_write(struct adapter *adap, unsigned int mbox,
 			  u32 addr, u32 val);
 
+#define S_FW_CMD_OP 24
+#define V_FW_CMD_OP(x) ((x) << S_FW_CMD_OP)
+
+#define S_FW_CMD_REQUEST 23
+#define V_FW_CMD_REQUEST(x) ((x) << S_FW_CMD_REQUEST)
+#define F_FW_CMD_REQUEST V_FW_CMD_REQUEST(1U)
+
+#define S_FW_CMD_WRITE 21
+#define V_FW_CMD_WRITE(x) ((x) << S_FW_CMD_WRITE)
+#define F_FW_CMD_WRITE V_FW_CMD_WRITE(1U)
+
+#define S_FW_LDST_CMD_ADDRSPACE 0
+#define V_FW_LDST_CMD_ADDRSPACE(x) ((x) << S_FW_LDST_CMD_ADDRSPACE)
+
+enum {
+	MEMWIN0_APERTURE = 65536,
+	MEMWIN0_BASE     = 0x30000,
+	MEMWIN1_APERTURE = 32768,
+	MEMWIN1_BASE     = 0x28000,
+	MEMWIN2_APERTURE = 2048,
+	MEMWIN2_BASE     = 0x1b800,
+};
+
 #endif /* _T4FW_INTERFACE_H_ */
-- 
1.7.1

^ permalink raw reply related

* [PATCH 05/10] RDMA/cxgb4: Add DB Overflow Avoidance.
From: Vipul Pandya @ 2011-10-19 17:10 UTC (permalink / raw)
  To: linux-rdma, netdev; +Cc: roland, davem, divy, dm, kumaras, swise, Vipul Pandya
In-Reply-To: <1319044264-779-1-git-send-email-vipul@chelsio.com>

        - get FULL/EMPTY/DROP events from LLD

        - on FULL event, disable normal user mode DB rings.

        - add modify_qp semantics to allow user processes to call into
        the kernel to ring doobells without overflowing.

        Add DB Full/Empty/Drop stats.

        Mark queues when created indicating the doorbell state.

        If we're in the middle of db overflow avoidance, then newly created
        queues should start out in this mode.

Signed-off-by: Vipul Pandya <vipul@chelsio.com>
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
---
 drivers/infiniband/hw/cxgb4/device.c   |   84 +++++++++++++++++++++++++++++--
 drivers/infiniband/hw/cxgb4/iw_cxgb4.h |   37 ++++++++++++--
 drivers/infiniband/hw/cxgb4/qp.c       |   51 +++++++++++++++++++-
 3 files changed, 161 insertions(+), 11 deletions(-)

diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
index 8483111..9062ed9 100644
--- a/drivers/infiniband/hw/cxgb4/device.c
+++ b/drivers/infiniband/hw/cxgb4/device.c
@@ -44,6 +44,12 @@ MODULE_DESCRIPTION("Chelsio T4 RDMA Driver");
 MODULE_LICENSE("Dual BSD/GPL");
 MODULE_VERSION(DRV_VERSION);
 
+struct uld_ctx {
+	struct list_head entry;
+	struct cxgb4_lld_info lldi;
+	struct c4iw_dev *dev;
+};
+
 static LIST_HEAD(uld_ctx_list);
 static DEFINE_MUTEX(dev_mutex);
 
@@ -263,6 +269,9 @@ static int stats_show(struct seq_file *seq, void *v)
 	seq_printf(seq, "  OCQPMEM: %10llu %10llu %10llu\n",
 			dev->rdev.stats.ocqp.total, dev->rdev.stats.ocqp.cur,
 			dev->rdev.stats.ocqp.max);
+	seq_printf(seq, "  DB FULL: %10llu\n", dev->rdev.stats.db_full);
+	seq_printf(seq, " DB EMPTY: %10llu\n", dev->rdev.stats.db_empty);
+	seq_printf(seq, "  DB DROP: %10llu\n", dev->rdev.stats.db_drop);
 	return 0;
 }
 
@@ -283,6 +292,9 @@ static ssize_t stats_clear(struct file *file, const char __user *buf,
 	dev->rdev.stats.pbl.max = 0;
 	dev->rdev.stats.rqt.max = 0;
 	dev->rdev.stats.ocqp.max = 0;
+	dev->rdev.stats.db_full = 0;
+	dev->rdev.stats.db_empty = 0;
+	dev->rdev.stats.db_drop = 0;
 	mutex_unlock(&dev->rdev.stats.lock);
 	return count;
 }
@@ -443,12 +455,6 @@ static void c4iw_rdev_close(struct c4iw_rdev *rdev)
 	c4iw_destroy_resource(&rdev->resource);
 }
 
-struct uld_ctx {
-	struct list_head entry;
-	struct cxgb4_lld_info lldi;
-	struct c4iw_dev *dev;
-};
-
 static void c4iw_dealloc(struct uld_ctx *ctx)
 {
 	c4iw_rdev_close(&ctx->dev->rdev);
@@ -514,6 +520,7 @@ static struct c4iw_dev *c4iw_alloc(const struct cxgb4_lld_info *infop)
 	idr_init(&devp->mmidr);
 	spin_lock_init(&devp->lock);
 	mutex_init(&devp->rdev.stats.lock);
+	mutex_init(&devp->db_mutex);
 
 	if (c4iw_debugfs_root) {
 		devp->debugfs_root = debugfs_create_dir(
@@ -659,11 +666,76 @@ static int c4iw_uld_state_change(void *handle, enum cxgb4_state new_state)
 	return 0;
 }
 
+static int disable_qp_db(int id, void *p, void *data)
+{
+	struct c4iw_qp *qp = p;
+
+	t4_disable_wq_db(&qp->wq);
+	return 0;
+}
+
+static void stop_queues(struct uld_ctx *ctx)
+{
+	spin_lock_irq(&ctx->dev->lock);
+	ctx->dev->db_state = FLOW_CONTROL;
+	idr_for_each(&ctx->dev->qpidr, disable_qp_db, NULL);
+	spin_unlock_irq(&ctx->dev->lock);
+}
+
+static int enable_qp_db(int id, void *p, void *data)
+{
+	struct c4iw_qp *qp = p;
+
+	t4_enable_wq_db(&qp->wq);
+	return 0;
+}
+
+static void resume_queues(struct uld_ctx *ctx)
+{
+	spin_lock_irq(&ctx->dev->lock);
+	ctx->dev->db_state = NORMAL;
+	idr_for_each(&ctx->dev->qpidr, enable_qp_db, NULL);
+	spin_unlock_irq(&ctx->dev->lock);
+}
+
+static int c4iw_uld_control(void *handle, enum cxgb4_control control, ...)
+{
+	struct uld_ctx *ctx = handle;
+
+	switch (control) {
+	case CXGB4_CONTROL_DB_FULL:
+		stop_queues(ctx);
+		mutex_lock(&ctx->dev->rdev.stats.lock);
+		ctx->dev->rdev.stats.db_full++;
+		mutex_unlock(&ctx->dev->rdev.stats.lock);
+		break;
+	case CXGB4_CONTROL_DB_EMPTY:
+		resume_queues(ctx);
+		mutex_lock(&ctx->dev->rdev.stats.lock);
+		ctx->dev->rdev.stats.db_empty++;
+		mutex_unlock(&ctx->dev->rdev.stats.lock);
+		break;
+	case CXGB4_CONTROL_DB_DROP:
+		printk(KERN_WARNING MOD "%s: Fatal DB DROP\n",
+		       pci_name(ctx->lldi.pdev));
+		mutex_lock(&ctx->dev->rdev.stats.lock);
+		ctx->dev->rdev.stats.db_drop++;
+		mutex_unlock(&ctx->dev->rdev.stats.lock);
+		break;
+	default:
+		printk(KERN_WARNING MOD "%s: unknown control cmd %u\n",
+		       pci_name(ctx->lldi.pdev), control);
+		break;
+	}
+	return 0;
+}
+
 static struct cxgb4_uld_info c4iw_uld_info = {
 	.name = DRV_NAME,
 	.add = c4iw_uld_add,
 	.rx_handler = c4iw_uld_rx_handler,
 	.state_change = c4iw_uld_state_change,
+	.control = c4iw_uld_control,
 };
 
 static int __init c4iw_init_module(void)
diff --git a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
index ec7c848..1924c19 100644
--- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
+++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
@@ -117,6 +117,9 @@ struct c4iw_stats {
 	struct c4iw_stat pbl;
 	struct c4iw_stat rqt;
 	struct c4iw_stat ocqp;
+	u64  db_full;
+	u64  db_empty;
+	u64  db_drop;
 };
 
 struct c4iw_rdev {
@@ -192,6 +195,12 @@ static inline int c4iw_wait_for_reply(struct c4iw_rdev *rdev,
 	return wr_waitp->ret;
 }
 
+enum db_state {
+	NORMAL = 0,
+	FLOW_CONTROL = 1,
+	RECOVERY = 2
+};
+
 struct c4iw_dev {
 	struct ib_device ibdev;
 	struct c4iw_rdev rdev;
@@ -200,7 +209,9 @@ struct c4iw_dev {
 	struct idr qpidr;
 	struct idr mmidr;
 	spinlock_t lock;
+	struct mutex db_mutex;
 	struct dentry *debugfs_root;
+	enum db_state db_state;
 };
 
 static inline struct c4iw_dev *to_c4iw_dev(struct ib_device *ibdev)
@@ -228,8 +239,8 @@ static inline struct c4iw_mr *get_mhp(struct c4iw_dev *rhp, u32 mmid)
 	return idr_find(&rhp->mmidr, mmid);
 }
 
-static inline int insert_handle(struct c4iw_dev *rhp, struct idr *idr,
-				void *handle, u32 id)
+static inline int _insert_handle(struct c4iw_dev *rhp, struct idr *idr,
+				 void *handle, u32 id, int lock)
 {
 	int ret;
 	int newid;
@@ -237,15 +248,29 @@ static inline int insert_handle(struct c4iw_dev *rhp, struct idr *idr,
 	do {
 		if (!idr_pre_get(idr, GFP_KERNEL))
 			return -ENOMEM;
-		spin_lock_irq(&rhp->lock);
+		if (lock)
+			spin_lock_irq(&rhp->lock);
 		ret = idr_get_new_above(idr, handle, id, &newid);
 		BUG_ON(newid != id);
-		spin_unlock_irq(&rhp->lock);
+		if (lock)
+			spin_unlock_irq(&rhp->lock);
 	} while (ret == -EAGAIN);
 
 	return ret;
 }
 
+static inline int insert_handle(struct c4iw_dev *rhp, struct idr *idr,
+				void *handle, u32 id)
+{
+	return _insert_handle(rhp, idr, handle, id, 1);
+}
+
+static inline int insert_handle_nolock(struct c4iw_dev *rhp, struct idr *idr,
+				       void *handle, u32 id)
+{
+	return _insert_handle(rhp, idr, handle, id, 0);
+}
+
 static inline void remove_handle(struct c4iw_dev *rhp, struct idr *idr, u32 id)
 {
 	spin_lock_irq(&rhp->lock);
@@ -369,6 +394,8 @@ struct c4iw_qp_attributes {
 	struct c4iw_ep *llp_stream_handle;
 	u8 layer_etype;
 	u8 ecode;
+	u16 sq_db_inc;
+	u16 rq_db_inc;
 };
 
 struct c4iw_qp {
@@ -443,6 +470,8 @@ static inline void insert_mmap(struct c4iw_ucontext *ucontext,
 
 enum c4iw_qp_attr_mask {
 	C4IW_QP_ATTR_NEXT_STATE = 1 << 0,
+	C4IW_QP_ATTR_SQ_DB = 1<<1,
+	C4IW_QP_ATTR_RQ_DB = 1<<2,
 	C4IW_QP_ATTR_ENABLE_RDMA_READ = 1 << 7,
 	C4IW_QP_ATTR_ENABLE_RDMA_WRITE = 1 << 8,
 	C4IW_QP_ATTR_ENABLE_RDMA_BIND = 1 << 9,
diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
index 74df98e..36fc94d 100644
--- a/drivers/infiniband/hw/cxgb4/qp.c
+++ b/drivers/infiniband/hw/cxgb4/qp.c
@@ -34,6 +34,10 @@
 
 #include "iw_cxgb4.h"
 
+static int db_delay_usecs = 1;
+module_param(db_delay_usecs, int, 0644);
+MODULE_PARM_DESC(db_delay_usecs, "Usecs to delay awaiting db fifo to drain");
+
 static int ocqp_support = 1;
 module_param(ocqp_support, int, 0644);
 MODULE_PARM_DESC(ocqp_support, "Support on-chip SQs (default=1)");
@@ -1117,6 +1121,29 @@ out:
 	return ret;
 }
 
+/*
+ * Called by the library when the qp has user dbs disabled due to
+ * a DB_FULL condition.  This function will single-thread all user
+ * DB rings to avoid overflowing the hw db-fifo.
+ */
+static int ring_kernel_db(struct c4iw_qp *qhp, u32 qid, u16 inc)
+{
+	int delay = db_delay_usecs;
+
+	mutex_lock(&qhp->rhp->db_mutex);
+	do {
+		if (cxgb4_dbfifo_count(qhp->rhp->rdev.lldi.ports[0], 1) < 768) {
+			writel(V_QID(qid) | V_PIDX(inc), qhp->wq.db);
+			break;
+		}
+		set_current_state(TASK_UNINTERRUPTIBLE);
+		schedule_timeout(usecs_to_jiffies(delay));
+		delay = min(delay << 1, 200000);
+	} while (1);
+	mutex_unlock(&qhp->rhp->db_mutex);
+	return 0;
+}
+
 int c4iw_modify_qp(struct c4iw_dev *rhp, struct c4iw_qp *qhp,
 		   enum c4iw_qp_attr_mask mask,
 		   struct c4iw_qp_attributes *attrs,
@@ -1165,6 +1192,15 @@ int c4iw_modify_qp(struct c4iw_dev *rhp, struct c4iw_qp *qhp,
 		qhp->attr = newattr;
 	}
 
+	if (mask & C4IW_QP_ATTR_SQ_DB) {
+		ret = ring_kernel_db(qhp, qhp->wq.sq.qid, attrs->sq_db_inc);
+		goto out;
+	}
+	if (mask & C4IW_QP_ATTR_RQ_DB) {
+		ret = ring_kernel_db(qhp, qhp->wq.rq.qid, attrs->rq_db_inc);
+		goto out;
+	}
+
 	if (!(mask & C4IW_QP_ATTR_NEXT_STATE))
 		goto out;
 	if (qhp->attr.state == attrs->next_state)
@@ -1454,7 +1490,11 @@ struct ib_qp *c4iw_create_qp(struct ib_pd *pd, struct ib_qp_init_attr *attrs,
 	init_waitqueue_head(&qhp->wait);
 	atomic_set(&qhp->refcnt, 1);
 
-	ret = insert_handle(rhp, &rhp->qpidr, qhp, qhp->wq.sq.qid);
+	spin_lock_irq(&rhp->lock);
+	if (rhp->db_state != NORMAL)
+		t4_disable_wq_db(&qhp->wq);
+	ret = insert_handle_nolock(rhp, &rhp->qpidr, qhp, qhp->wq.sq.qid);
+	spin_unlock_irq(&rhp->lock);
 	if (ret)
 		goto err2;
 
@@ -1598,6 +1638,15 @@ int c4iw_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
 			 C4IW_QP_ATTR_ENABLE_RDMA_WRITE |
 			 C4IW_QP_ATTR_ENABLE_RDMA_BIND) : 0;
 
+	/*
+	 * Use SQ_PSN and RQ_PSN to pass in IDX_INC values for
+	 * ringing the queue db when we're in DB_FULL mode.
+	 */
+	attrs.sq_db_inc = attr->sq_psn;
+	attrs.rq_db_inc = attr->rq_psn;
+	mask |= (attr_mask & IB_QP_SQ_PSN) ? C4IW_QP_ATTR_SQ_DB : 0;
+	mask |= (attr_mask & IB_QP_RQ_PSN) ? C4IW_QP_ATTR_RQ_DB : 0;
+
 	return c4iw_modify_qp(rhp, qhp, mask, &attrs, 0);
 }
 
-- 
1.7.1

^ permalink raw reply related

* [PATCH 06/10] RDMA/cxgb4: disable interrupts in c4iw_ev_dispatch().
From: Vipul Pandya @ 2011-10-19 17:11 UTC (permalink / raw)
  To: linux-rdma, netdev; +Cc: roland, davem, divy, dm, kumaras, swise, Vipul Pandya
In-Reply-To: <1319044264-779-1-git-send-email-vipul@chelsio.com>

	Use GFP_ATOMIC in _insert_handle() if ints are disabled.

	Don't panic if we get an abort with no endpoint found. Just log a
	warning.

Signed-off-by: Vipul Pandya <vipul@chelsio.com>
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
---
 drivers/infiniband/hw/cxgb4/cm.c       |    5 ++++-
 drivers/infiniband/hw/cxgb4/ev.c       |    8 ++++----
 drivers/infiniband/hw/cxgb4/iw_cxgb4.h |    2 +-
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
index b36cdac..c51818a 100644
--- a/drivers/infiniband/hw/cxgb4/cm.c
+++ b/drivers/infiniband/hw/cxgb4/cm.c
@@ -1360,7 +1360,10 @@ static int abort_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
 
 	ep = lookup_tid(t, tid);
 	PDBG("%s ep %p tid %u\n", __func__, ep, ep->hwtid);
-	BUG_ON(!ep);
+	if (!ep) {
+		printk(KERN_WARNING MOD "Abort rpl to freed endpoint\n");
+		return 0;
+	}
 	mutex_lock(&ep->com.mutex);
 	switch (ep->com.state) {
 	case ABORTING:
diff --git a/drivers/infiniband/hw/cxgb4/ev.c b/drivers/infiniband/hw/cxgb4/ev.c
index c13041a..e9eac34 100644
--- a/drivers/infiniband/hw/cxgb4/ev.c
+++ b/drivers/infiniband/hw/cxgb4/ev.c
@@ -81,7 +81,7 @@ void c4iw_ev_dispatch(struct c4iw_dev *dev, struct t4_cqe *err_cqe)
 	struct c4iw_qp *qhp;
 	u32 cqid;
 
-	spin_lock(&dev->lock);
+	spin_lock_irq(&dev->lock);
 	qhp = get_qhp(dev, CQE_QPID(err_cqe));
 	if (!qhp) {
 		printk(KERN_ERR MOD "BAD AE qpid 0x%x opcode %d "
@@ -90,7 +90,7 @@ void c4iw_ev_dispatch(struct c4iw_dev *dev, struct t4_cqe *err_cqe)
 		       CQE_OPCODE(err_cqe), CQE_STATUS(err_cqe),
 		       CQE_TYPE(err_cqe), CQE_WRID_HI(err_cqe),
 		       CQE_WRID_LOW(err_cqe));
-		spin_unlock(&dev->lock);
+		spin_unlock_irq(&dev->lock);
 		goto out;
 	}
 
@@ -106,13 +106,13 @@ void c4iw_ev_dispatch(struct c4iw_dev *dev, struct t4_cqe *err_cqe)
 		       CQE_OPCODE(err_cqe), CQE_STATUS(err_cqe),
 		       CQE_TYPE(err_cqe), CQE_WRID_HI(err_cqe),
 		       CQE_WRID_LOW(err_cqe));
-		spin_unlock(&dev->lock);
+		spin_unlock_irq(&dev->lock);
 		goto out;
 	}
 
 	c4iw_qp_add_ref(&qhp->ibqp);
 	atomic_inc(&chp->refcnt);
-	spin_unlock(&dev->lock);
+	spin_unlock_irq(&dev->lock);
 
 	/* Bad incoming write */
 	if (RQ_TYPE(err_cqe) &&
diff --git a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
index 1924c19..2ce7741 100644
--- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
+++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
@@ -246,7 +246,7 @@ static inline int _insert_handle(struct c4iw_dev *rhp, struct idr *idr,
 	int newid;
 
 	do {
-		if (!idr_pre_get(idr, GFP_KERNEL))
+		if (!idr_pre_get(idr, lock ? GFP_KERNEL : GFP_ATOMIC))
 			return -ENOMEM;
 		if (lock)
 			spin_lock_irq(&rhp->lock);
-- 
1.7.1

^ permalink raw reply related

* [PATCH 07/10] RDMA/cxgb4: DB Drop Recovery for RDMA and LLD queues.
From: Vipul Pandya @ 2011-10-19 17:11 UTC (permalink / raw)
  To: linux-rdma, netdev; +Cc: roland, davem, divy, dm, kumaras, swise, Vipul Pandya
In-Reply-To: <1319044264-779-1-git-send-email-vipul@chelsio.com>

    - add module option db_fc_threshold which is the count of active QPs
    that trigger automatic db flow control mode.

    - automatically transition to/from flow control mode when the active qp
    count crosses db_fc_theshold.

    - add more db debugfs stats

    - on DB DROP event from the LLD, recover all the iwarp queues.

Signed-off-by: Vipul Pandya <vipul@chelsio.com>
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
---
 drivers/infiniband/hw/cxgb4/device.c   |  176 ++++++++++++++++++++++++++++++-
 drivers/infiniband/hw/cxgb4/iw_cxgb4.h |   24 ++++-
 drivers/infiniband/hw/cxgb4/qp.c       |   47 ++++++++-
 drivers/infiniband/hw/cxgb4/t4.h       |   24 +++++
 4 files changed, 259 insertions(+), 12 deletions(-)

diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
index 9062ed9..bdb398f 100644
--- a/drivers/infiniband/hw/cxgb4/device.c
+++ b/drivers/infiniband/hw/cxgb4/device.c
@@ -246,6 +246,8 @@ static const struct file_operations stag_debugfs_fops = {
 	.llseek  = default_llseek,
 };
 
+static char *db_state_str[] = {"NORMAL", "FLOW_CONTROL", "RECOVERY"};
+
 static int stats_show(struct seq_file *seq, void *v)
 {
 	struct c4iw_dev *dev = seq->private;
@@ -272,6 +274,9 @@ static int stats_show(struct seq_file *seq, void *v)
 	seq_printf(seq, "  DB FULL: %10llu\n", dev->rdev.stats.db_full);
 	seq_printf(seq, " DB EMPTY: %10llu\n", dev->rdev.stats.db_empty);
 	seq_printf(seq, "  DB DROP: %10llu\n", dev->rdev.stats.db_drop);
+	seq_printf(seq, " DB State: %s Transitions %llu\n",
+		   db_state_str[dev->db_state],
+		   dev->rdev.stats.db_state_transitions);
 	return 0;
 }
 
@@ -295,6 +300,7 @@ static ssize_t stats_clear(struct file *file, const char __user *buf,
 	dev->rdev.stats.db_full = 0;
 	dev->rdev.stats.db_empty = 0;
 	dev->rdev.stats.db_drop = 0;
+	dev->rdev.stats.db_state_transitions = 0;
 	mutex_unlock(&dev->rdev.stats.lock);
 	return count;
 }
@@ -677,8 +683,11 @@ static int disable_qp_db(int id, void *p, void *data)
 static void stop_queues(struct uld_ctx *ctx)
 {
 	spin_lock_irq(&ctx->dev->lock);
-	ctx->dev->db_state = FLOW_CONTROL;
-	idr_for_each(&ctx->dev->qpidr, disable_qp_db, NULL);
+	if (ctx->dev->db_state == NORMAL) {
+		ctx->dev->rdev.stats.db_state_transitions++;
+		ctx->dev->db_state = FLOW_CONTROL;
+		idr_for_each(&ctx->dev->qpidr, disable_qp_db, NULL);
+	}
 	spin_unlock_irq(&ctx->dev->lock);
 }
 
@@ -693,9 +702,165 @@ static int enable_qp_db(int id, void *p, void *data)
 static void resume_queues(struct uld_ctx *ctx)
 {
 	spin_lock_irq(&ctx->dev->lock);
-	ctx->dev->db_state = NORMAL;
-	idr_for_each(&ctx->dev->qpidr, enable_qp_db, NULL);
+	if (ctx->dev->qpcnt <= db_fc_threshold &&
+	    ctx->dev->db_state == FLOW_CONTROL) {
+		ctx->dev->db_state = NORMAL;
+		ctx->dev->rdev.stats.db_state_transitions++;
+		idr_for_each(&ctx->dev->qpidr, enable_qp_db, NULL);
+	}
+	spin_unlock_irq(&ctx->dev->lock);
+}
+
+struct qp_list {
+	unsigned idx;
+	struct c4iw_qp **qps;
+};
+
+static int add_and_ref_qp(int id, void *p, void *data)
+{
+	struct qp_list *qp_listp = data;
+	struct c4iw_qp *qp = p;
+
+	c4iw_qp_add_ref(&qp->ibqp);
+	qp_listp->qps[qp_listp->idx++] = qp;
+	return 0;
+}
+
+static int count_qps(int id, void *p, void *data)
+{
+	unsigned *countp = data;
+	(*countp)++;
+	return 0;
+}
+
+static void deref_qps(struct qp_list qp_list)
+{
+	int idx;
+
+	for (idx = 0; idx < qp_list.idx; idx++)
+		c4iw_qp_rem_ref(&qp_list.qps[idx]->ibqp);
+}
+
+static void recover_lost_dbs(struct uld_ctx *ctx, struct qp_list *qp_list)
+{
+	int idx;
+	int ret;
+
+	for (idx = 0; idx < qp_list->idx; idx++) {
+		struct c4iw_qp *qp = qp_list->qps[idx];
+
+		ret = cxgb4_sync_txq_pidx(qp->rhp->rdev.lldi.ports[0],
+					  qp->wq.sq.qid,
+					  t4_sq_host_wq_pidx(&qp->wq),
+					  t4_sq_wq_size(&qp->wq));
+		if (ret) {
+			printk(KERN_ERR MOD "%s: Fatal error - "
+			       "DB overflow recovery failed - "
+			       "error syncing SQ qid %u\n",
+			       pci_name(ctx->lldi.pdev), qp->wq.sq.qid);
+			return;
+		}
+
+		ret = cxgb4_sync_txq_pidx(qp->rhp->rdev.lldi.ports[0],
+					  qp->wq.rq.qid,
+					  t4_rq_host_wq_pidx(&qp->wq),
+					  t4_rq_wq_size(&qp->wq));
+
+		if (ret) {
+			printk(KERN_ERR MOD "%s: Fatal error - "
+			       "DB overflow recovery failed - "
+			       "error syncing RQ qid %u\n",
+			       pci_name(ctx->lldi.pdev), qp->wq.rq.qid);
+			return;
+		}
+
+		/* Wait for the dbfifo to drain */
+		while (cxgb4_dbfifo_count(qp->rhp->rdev.lldi.ports[0], 1) > 0) {
+			set_current_state(TASK_UNINTERRUPTIBLE);
+			schedule_timeout(usecs_to_jiffies(10));
+		}
+	}
+}
+
+static void recover_queues(struct uld_ctx *ctx)
+{
+	int count = 0;
+	struct qp_list qp_list;
+	int ret;
+
+	/* lock out kernel db ringers */
+	mutex_lock(&ctx->dev->db_mutex);
+
+	/* put all queues in to recovery mode */
+	spin_lock_irq(&ctx->dev->lock);
+	ctx->dev->db_state = RECOVERY;
+	ctx->dev->rdev.stats.db_state_transitions++;
+	idr_for_each(&ctx->dev->qpidr, disable_qp_db, NULL);
+	spin_unlock_irq(&ctx->dev->lock);
+
+	/* slow everybody down */
+	set_current_state(TASK_UNINTERRUPTIBLE);
+	schedule_timeout(usecs_to_jiffies(1000));
+
+	/* Wait for the dbfifo to completely drain. */
+	while (cxgb4_dbfifo_count(ctx->dev->rdev.lldi.ports[0], 1) > 0) {
+		set_current_state(TASK_UNINTERRUPTIBLE);
+		schedule_timeout(usecs_to_jiffies(10));
+	}
+
+	/* flush the SGE contexts */
+	ret = cxgb4_flush_eq_cache(ctx->dev->rdev.lldi.ports[0]);
+	if (ret) {
+		printk(KERN_ERR MOD "%s: Fatal error - DB overflow recovery failed\n",
+		       pci_name(ctx->lldi.pdev));
+		goto out;
+	}
+
+	/* Count active queues so we can build a list of queues to recover */
+	spin_lock_irq(&ctx->dev->lock);
+	idr_for_each(&ctx->dev->qpidr, count_qps, &count);
+
+	qp_list.qps = kzalloc(count * sizeof *qp_list.qps, GFP_ATOMIC);
+	if (!qp_list.qps) {
+		printk(KERN_ERR MOD "%s: Fatal error - DB overflow recovery failed\n",
+		       pci_name(ctx->lldi.pdev));
+		spin_unlock_irq(&ctx->dev->lock);
+		goto out;
+	}
+	qp_list.idx = 0;
+
+	/* add and ref each qp so it doesn't get freed */
+	idr_for_each(&ctx->dev->qpidr, add_and_ref_qp, &qp_list);
+
 	spin_unlock_irq(&ctx->dev->lock);
+
+	/* now traverse the list in a safe context to recover the db state*/
+	recover_lost_dbs(ctx, &qp_list);
+
+	/* we're almost done!  deref the qps and clean up */
+	deref_qps(qp_list);
+	kfree(qp_list.qps);
+
+	/* Wait for the dbfifo to completely drain again */
+	while (cxgb4_dbfifo_count(ctx->dev->rdev.lldi.ports[0], 1) > 0) {
+		set_current_state(TASK_UNINTERRUPTIBLE);
+		schedule_timeout(usecs_to_jiffies(10));
+	}
+
+	/* resume the queues */
+	spin_lock_irq(&ctx->dev->lock);
+	if (ctx->dev->qpcnt > db_fc_threshold)
+		ctx->dev->db_state = FLOW_CONTROL;
+	else {
+		ctx->dev->db_state = NORMAL;
+		idr_for_each(&ctx->dev->qpidr, enable_qp_db, NULL);
+	}
+	ctx->dev->rdev.stats.db_state_transitions++;
+	spin_unlock_irq(&ctx->dev->lock);
+
+out:
+	/* start up kernel db ringers again */
+	mutex_unlock(&ctx->dev->db_mutex);
 }
 
 static int c4iw_uld_control(void *handle, enum cxgb4_control control, ...)
@@ -716,8 +881,7 @@ static int c4iw_uld_control(void *handle, enum cxgb4_control control, ...)
 		mutex_unlock(&ctx->dev->rdev.stats.lock);
 		break;
 	case CXGB4_CONTROL_DB_DROP:
-		printk(KERN_WARNING MOD "%s: Fatal DB DROP\n",
-		       pci_name(ctx->lldi.pdev));
+		recover_queues(ctx);
 		mutex_lock(&ctx->dev->rdev.stats.lock);
 		ctx->dev->rdev.stats.db_drop++;
 		mutex_unlock(&ctx->dev->rdev.stats.lock);
diff --git a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
index 2ce7741..75d643c 100644
--- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
+++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
@@ -120,6 +120,7 @@ struct c4iw_stats {
 	u64  db_full;
 	u64  db_empty;
 	u64  db_drop;
+	u64  db_state_transitions;
 };
 
 struct c4iw_rdev {
@@ -212,6 +213,7 @@ struct c4iw_dev {
 	struct mutex db_mutex;
 	struct dentry *debugfs_root;
 	enum db_state db_state;
+	int qpcnt;
 };
 
 static inline struct c4iw_dev *to_c4iw_dev(struct ib_device *ibdev)
@@ -271,11 +273,25 @@ static inline int insert_handle_nolock(struct c4iw_dev *rhp, struct idr *idr,
 	return _insert_handle(rhp, idr, handle, id, 0);
 }
 
-static inline void remove_handle(struct c4iw_dev *rhp, struct idr *idr, u32 id)
+static inline void _remove_handle(struct c4iw_dev *rhp, struct idr *idr,
+				   u32 id, int lock)
 {
-	spin_lock_irq(&rhp->lock);
+	if (lock)
+		spin_lock_irq(&rhp->lock);
 	idr_remove(idr, id);
-	spin_unlock_irq(&rhp->lock);
+	if (lock)
+		spin_unlock_irq(&rhp->lock);
+}
+
+static inline void remove_handle(struct c4iw_dev *rhp, struct idr *idr, u32 id)
+{
+	_remove_handle(rhp, idr, id, 1);
+}
+
+static inline void remove_handle_nolock(struct c4iw_dev *rhp,
+					 struct idr *idr, u32 id)
+{
+	_remove_handle(rhp, idr, id, 0);
 }
 
 struct c4iw_pd {
@@ -842,5 +858,7 @@ void c4iw_ev_dispatch(struct c4iw_dev *dev, struct t4_cqe *err_cqe);
 extern struct cxgb4_client t4c_client;
 extern c4iw_handler_func c4iw_handlers[NUM_CPL_CMDS];
 extern int c4iw_max_read_depth;
+extern int db_fc_threshold;
+
 
 #endif
diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
index 36fc94d..215b66a 100644
--- a/drivers/infiniband/hw/cxgb4/qp.c
+++ b/drivers/infiniband/hw/cxgb4/qp.c
@@ -42,6 +42,11 @@ static int ocqp_support = 1;
 module_param(ocqp_support, int, 0644);
 MODULE_PARM_DESC(ocqp_support, "Support on-chip SQs (default=1)");
 
+int db_fc_threshold = 2000;
+module_param(db_fc_threshold, int, 0644);
+MODULE_PARM_DESC(db_fc_threshold, "QP count/threshold that triggers automatic "
+		 "db flow control mode (default = 2000)");
+
 static void set_state(struct c4iw_qp *qhp, enum c4iw_qp_state state)
 {
 	unsigned long flag;
@@ -1132,13 +1137,19 @@ static int ring_kernel_db(struct c4iw_qp *qhp, u32 qid, u16 inc)
 
 	mutex_lock(&qhp->rhp->db_mutex);
 	do {
-		if (cxgb4_dbfifo_count(qhp->rhp->rdev.lldi.ports[0], 1) < 768) {
+
+		/*
+		 * The interrupt threshold is dbfifo_int_thresh << 6. So
+		 * make sure we don't cross that and generate an interrupt.
+		 */
+		if (cxgb4_dbfifo_count(qhp->rhp->rdev.lldi.ports[0], 1) <
+		    (qhp->rhp->rdev.lldi.dbfifo_int_thresh << 5)) {
 			writel(V_QID(qid) | V_PIDX(inc), qhp->wq.db);
 			break;
 		}
 		set_current_state(TASK_UNINTERRUPTIBLE);
 		schedule_timeout(usecs_to_jiffies(delay));
-		delay = min(delay << 1, 200000);
+		delay = min(delay << 1, 2000);
 	} while (1);
 	mutex_unlock(&qhp->rhp->db_mutex);
 	return 0;
@@ -1373,6 +1384,14 @@ out:
 	return ret;
 }
 
+static int enable_qp_db(int id, void *p, void *data)
+{
+	struct c4iw_qp *qp = p;
+
+	t4_enable_wq_db(&qp->wq);
+	return 0;
+}
+
 int c4iw_destroy_qp(struct ib_qp *ib_qp)
 {
 	struct c4iw_dev *rhp;
@@ -1390,7 +1409,16 @@ int c4iw_destroy_qp(struct ib_qp *ib_qp)
 		c4iw_modify_qp(rhp, qhp, C4IW_QP_ATTR_NEXT_STATE, &attrs, 0);
 	wait_event(qhp->wait, !qhp->ep);
 
-	remove_handle(rhp, &rhp->qpidr, qhp->wq.sq.qid);
+	spin_lock_irq(&rhp->lock);
+	remove_handle_nolock(rhp, &rhp->qpidr, qhp->wq.sq.qid);
+	rhp->qpcnt--;
+	BUG_ON(rhp->qpcnt < 0);
+	if (rhp->qpcnt <= db_fc_threshold && rhp->db_state == FLOW_CONTROL) {
+		rhp->rdev.stats.db_state_transitions++;
+		rhp->db_state = NORMAL;
+		idr_for_each(&rhp->qpidr, enable_qp_db, NULL);
+	}
+	spin_unlock_irq(&rhp->lock);
 	atomic_dec(&qhp->refcnt);
 	wait_event(qhp->wait, !atomic_read(&qhp->refcnt));
 
@@ -1404,6 +1432,14 @@ int c4iw_destroy_qp(struct ib_qp *ib_qp)
 	return 0;
 }
 
+static int disable_qp_db(int id, void *p, void *data)
+{
+	struct c4iw_qp *qp = p;
+
+	t4_disable_wq_db(&qp->wq);
+	return 0;
+}
+
 struct ib_qp *c4iw_create_qp(struct ib_pd *pd, struct ib_qp_init_attr *attrs,
 			     struct ib_udata *udata)
 {
@@ -1493,6 +1529,11 @@ struct ib_qp *c4iw_create_qp(struct ib_pd *pd, struct ib_qp_init_attr *attrs,
 	spin_lock_irq(&rhp->lock);
 	if (rhp->db_state != NORMAL)
 		t4_disable_wq_db(&qhp->wq);
+	if (++rhp->qpcnt > db_fc_threshold && rhp->db_state == NORMAL) {
+		rhp->rdev.stats.db_state_transitions++;
+		rhp->db_state = FLOW_CONTROL;
+		idr_for_each(&rhp->qpidr, disable_qp_db, NULL);
+	}
 	ret = insert_handle_nolock(rhp, &rhp->qpidr, qhp, qhp->wq.sq.qid);
 	spin_unlock_irq(&rhp->lock);
 	if (ret)
diff --git a/drivers/infiniband/hw/cxgb4/t4.h b/drivers/infiniband/hw/cxgb4/t4.h
index c0221ee..16f26ab 100644
--- a/drivers/infiniband/hw/cxgb4/t4.h
+++ b/drivers/infiniband/hw/cxgb4/t4.h
@@ -62,6 +62,10 @@ struct t4_status_page {
 	__be16 pidx;
 	u8 qp_err;	/* flit 1 - sw owns */
 	u8 db_off;
+	u8 pad;
+	u16 host_wq_pidx;
+	u16 host_cidx;
+	u16 host_pidx;
 };
 
 #define T4_EQ_ENTRY_SIZE 64
@@ -375,6 +379,16 @@ static inline void t4_rq_consume(struct t4_wq *wq)
 		wq->rq.cidx = 0;
 }
 
+static inline u16 t4_rq_host_wq_pidx(struct t4_wq *wq)
+{
+	return wq->rq.queue[wq->rq.size].status.host_wq_pidx;
+}
+
+static inline u16 t4_rq_wq_size(struct t4_wq *wq)
+{
+		return wq->rq.size * T4_RQ_NUM_SLOTS;
+}
+
 static inline int t4_sq_onchip(struct t4_sq *sq)
 {
 	return sq->flags & T4_SQ_ONCHIP;
@@ -412,6 +426,16 @@ static inline void t4_sq_consume(struct t4_wq *wq)
 		wq->sq.cidx = 0;
 }
 
+static inline u16 t4_sq_host_wq_pidx(struct t4_wq *wq)
+{
+	return wq->sq.queue[wq->sq.size].status.host_wq_pidx;
+}
+
+static inline u16 t4_sq_wq_size(struct t4_wq *wq)
+{
+		return wq->sq.size * T4_SQ_NUM_SLOTS;
+}
+
 static inline void t4_ring_sq_db(struct t4_wq *wq, u16 inc)
 {
 	wmb();
-- 
1.7.1

^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox