* Re: 2.6.32: padlock_sha1 and hmac broken?
From: Herbert Xu @ 2010-01-31 9:22 UTC (permalink / raw)
To: Wolfgang Walter
Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
Linux Crypto Mailing List
In-Reply-To: <201001310311.23116.wolfgang.walter@stwm.de>
On Sun, Jan 31, 2010 at 03:11:22AM +0100, Wolfgang Walter wrote:
>
> Not sure.
>
> When I do
>
> modprobe tcrypt mode=101
>
> I get a kernel oops:
Sorry, this one should have a better chance at working.
diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c
index 0af8057..d3a27e0 100644
--- a/drivers/crypto/padlock-sha.c
+++ b/drivers/crypto/padlock-sha.c
@@ -57,6 +57,23 @@ static int padlock_sha_update(struct shash_desc *desc,
return crypto_shash_update(&dctx->fallback, data, length);
}
+static int padlock_sha_export(struct shash_desc *desc, void *out)
+{
+ struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
+
+ return crypto_shash_export(&dctx->fallback, out);
+}
+
+static int padlock_sha_import(struct shash_desc *desc, const void *in)
+{
+ struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
+ struct padlock_sha_ctx *ctx = crypto_shash_ctx(desc->tfm);
+
+ dctx->fallback.tfm = ctx->fallback;
+ dctx->fallback.flags = desc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;
+ return crypto_shash_import(&dctx->fallback, in);
+}
+
static inline void padlock_output_block(uint32_t *src,
uint32_t *dst, size_t count)
{
@@ -235,7 +252,10 @@ static struct shash_alg sha1_alg = {
.update = padlock_sha_update,
.finup = padlock_sha1_finup,
.final = padlock_sha1_final,
+ .export = padlock_sha_export,
+ .import = padlock_sha_import,
.descsize = sizeof(struct padlock_sha_desc),
+ .statesize = sizeof(struct sha1_state),
.base = {
.cra_name = "sha1",
.cra_driver_name = "sha1-padlock",
@@ -256,7 +276,10 @@ static struct shash_alg sha256_alg = {
.update = padlock_sha_update,
.finup = padlock_sha256_finup,
.final = padlock_sha256_final,
+ .export = padlock_sha_export,
+ .import = padlock_sha_import,
.descsize = sizeof(struct padlock_sha_desc),
+ .statesize = sizeof(struct sha256_state),
.base = {
.cra_name = "sha256",
.cra_driver_name = "sha256-padlock",
Thanks,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply related
* Re: [PATCH 1/8] percpu: add __percpu sparse annotations to core kernel subsystems
From: Paul E. McKenney @ 2010-01-31 11:42 UTC (permalink / raw)
To: Tejun Heo
Cc: linux-kernel, axboe, rusty, akpm, ebiederm, tytso,
Trond.Myklebust, aelder, hch, viro, davem, netdev, x86, mingo,
fweisbec, dan.j.williams, borislav.petkov, ying.huang, lenb,
neilb, cl, linux-mm, Dipankar Sarma, Peter Zijlstra
In-Reply-To: <1264432935-10453-2-git-send-email-tj@kernel.org>
On Tue, Jan 26, 2010 at 12:22:08AM +0900, Tejun Heo wrote:
> Add __percpu sparse annotations to core subsystems.
>
> These annotations are to make sparse consider percpu variables to be
> in a different address space and warn if accessed without going
> through percpu accessors. This patch doesn't affect normal builds.
The RCU pieces look fine to me.
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> Signed-off-by: Tejun Heo <tj@kernel.org>
> Cc: Jens Axboe <axboe@kernel.dk>
> Cc: linux-mm@kvack.org
> Cc: Rusty Russell <rusty@rustcorp.com.au>
> Cc: Dipankar Sarma <dipankar@in.ibm.com>
> Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Eric Biederman <ebiederm@xmission.com>
> ---
> include/linux/blktrace_api.h | 4 ++--
> include/linux/genhd.h | 2 +-
> include/linux/kexec.h | 2 +-
> include/linux/mmzone.h | 2 +-
> include/linux/module.h | 2 +-
> include/linux/percpu_counter.h | 2 +-
> include/linux/srcu.h | 2 +-
> kernel/kexec.c | 2 +-
> kernel/sched.c | 4 ++--
> kernel/stop_machine.c | 2 +-
> mm/percpu.c | 18 ++++++++++--------
> 11 files changed, 22 insertions(+), 20 deletions(-)
>
> diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h
> index 3b73b99..416bf62 100644
> --- a/include/linux/blktrace_api.h
> +++ b/include/linux/blktrace_api.h
> @@ -150,8 +150,8 @@ struct blk_user_trace_setup {
> struct blk_trace {
> int trace_state;
> struct rchan *rchan;
> - unsigned long *sequence;
> - unsigned char *msg_data;
> + unsigned long __percpu *sequence;
> + unsigned char __percpu *msg_data;
> u16 act_mask;
> u64 start_lba;
> u64 end_lba;
> diff --git a/include/linux/genhd.h b/include/linux/genhd.h
> index 9717081..56b5051 100644
> --- a/include/linux/genhd.h
> +++ b/include/linux/genhd.h
> @@ -101,7 +101,7 @@ struct hd_struct {
> unsigned long stamp;
> int in_flight[2];
> #ifdef CONFIG_SMP
> - struct disk_stats *dkstats;
> + struct disk_stats __percpu *dkstats;
> #else
> struct disk_stats dkstats;
> #endif
> diff --git a/include/linux/kexec.h b/include/linux/kexec.h
> index c356b69..03e8e8d 100644
> --- a/include/linux/kexec.h
> +++ b/include/linux/kexec.h
> @@ -199,7 +199,7 @@ extern struct kimage *kexec_crash_image;
> */
> extern struct resource crashk_res;
> typedef u32 note_buf_t[KEXEC_NOTE_BYTES/4];
> -extern note_buf_t *crash_notes;
> +extern note_buf_t __percpu *crash_notes;
> extern u32 vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4];
> extern size_t vmcoreinfo_size;
> extern size_t vmcoreinfo_max_size;
> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
> index 7874201..41acd4b 100644
> --- a/include/linux/mmzone.h
> +++ b/include/linux/mmzone.h
> @@ -301,7 +301,7 @@ struct zone {
> unsigned long min_unmapped_pages;
> unsigned long min_slab_pages;
> #endif
> - struct per_cpu_pageset *pageset;
> + struct per_cpu_pageset __percpu *pageset;
> /*
> * free areas of different sizes
> */
> diff --git a/include/linux/module.h b/include/linux/module.h
> index 7e74ae0..dd618eb 100644
> --- a/include/linux/module.h
> +++ b/include/linux/module.h
> @@ -365,7 +365,7 @@ struct module
>
> struct module_ref {
> int count;
> - } *refptr;
> + } __percpu *refptr;
> #endif
>
> #ifdef CONFIG_CONSTRUCTORS
> diff --git a/include/linux/percpu_counter.h b/include/linux/percpu_counter.h
> index a7684a5..9bd103c 100644
> --- a/include/linux/percpu_counter.h
> +++ b/include/linux/percpu_counter.h
> @@ -21,7 +21,7 @@ struct percpu_counter {
> #ifdef CONFIG_HOTPLUG_CPU
> struct list_head list; /* All percpu_counters are on a list */
> #endif
> - s32 *counters;
> + s32 __percpu *counters;
> };
>
> extern int percpu_counter_batch;
> diff --git a/include/linux/srcu.h b/include/linux/srcu.h
> index 4765d97..41eedcc 100644
> --- a/include/linux/srcu.h
> +++ b/include/linux/srcu.h
> @@ -33,7 +33,7 @@ struct srcu_struct_array {
>
> struct srcu_struct {
> int completed;
> - struct srcu_struct_array *per_cpu_ref;
> + struct srcu_struct_array __percpu *per_cpu_ref;
> struct mutex mutex;
> };
>
> diff --git a/kernel/kexec.c b/kernel/kexec.c
> index a9a93d9..c769613 100644
> --- a/kernel/kexec.c
> +++ b/kernel/kexec.c
> @@ -40,7 +40,7 @@
> #include <asm/sections.h>
>
> /* Per cpu memory for storing cpu states in case of system crash. */
> -note_buf_t* crash_notes;
> +note_buf_t __percpu *crash_notes;
>
> /* vmcoreinfo stuff */
> static unsigned char vmcoreinfo_data[VMCOREINFO_BYTES];
> diff --git a/kernel/sched.c b/kernel/sched.c
> index 4508fe7..512b10f 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -1566,7 +1566,7 @@ static unsigned long cpu_avg_load_per_task(int cpu)
>
> #ifdef CONFIG_FAIR_GROUP_SCHED
>
> -static __read_mostly unsigned long *update_shares_data;
> +static __read_mostly unsigned long __percpu *update_shares_data;
>
> static void __set_se_shares(struct sched_entity *se, unsigned long shares);
>
> @@ -10668,7 +10668,7 @@ struct cgroup_subsys cpu_cgroup_subsys = {
> struct cpuacct {
> struct cgroup_subsys_state css;
> /* cpuusage holds pointer to a u64-type object on every cpu */
> - u64 *cpuusage;
> + u64 __percpu *cpuusage;
> struct percpu_counter cpustat[CPUACCT_STAT_NSTATS];
> struct cpuacct *parent;
> };
> diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c
> index 912823e..9bb9fb1 100644
> --- a/kernel/stop_machine.c
> +++ b/kernel/stop_machine.c
> @@ -45,7 +45,7 @@ static int refcount;
> static struct workqueue_struct *stop_machine_wq;
> static struct stop_machine_data active, idle;
> static const struct cpumask *active_cpus;
> -static void *stop_machine_work;
> +static void __percpu *stop_machine_work;
>
> static void set_state(enum stopmachine_state newstate)
> {
> diff --git a/mm/percpu.c b/mm/percpu.c
> index b336638..768419d 100644
> --- a/mm/percpu.c
> +++ b/mm/percpu.c
> @@ -80,13 +80,15 @@
> /* default addr <-> pcpu_ptr mapping, override in asm/percpu.h if necessary */
> #ifndef __addr_to_pcpu_ptr
> #define __addr_to_pcpu_ptr(addr) \
> - (void *)((unsigned long)(addr) - (unsigned long)pcpu_base_addr \
> - + (unsigned long)__per_cpu_start)
> + (void __percpu *)((unsigned long)(addr) - \
> + (unsigned long)pcpu_base_addr + \
> + (unsigned long)__per_cpu_start)
> #endif
> #ifndef __pcpu_ptr_to_addr
> #define __pcpu_ptr_to_addr(ptr) \
> - (void *)((unsigned long)(ptr) + (unsigned long)pcpu_base_addr \
> - - (unsigned long)__per_cpu_start)
> + (void __force *)((unsigned long)(ptr) + \
> + (unsigned long)pcpu_base_addr - \
> + (unsigned long)__per_cpu_start)
> #endif
>
> struct pcpu_chunk {
> @@ -1065,7 +1067,7 @@ static struct pcpu_chunk *alloc_pcpu_chunk(void)
> * RETURNS:
> * Percpu pointer to the allocated area on success, NULL on failure.
> */
> -static void *pcpu_alloc(size_t size, size_t align, bool reserved)
> +static void __percpu *pcpu_alloc(size_t size, size_t align, bool reserved)
> {
> static int warn_limit = 10;
> struct pcpu_chunk *chunk;
> @@ -1194,7 +1196,7 @@ fail_unlock_mutex:
> * RETURNS:
> * Percpu pointer to the allocated area on success, NULL on failure.
> */
> -void *__alloc_percpu(size_t size, size_t align)
> +void __percpu *__alloc_percpu(size_t size, size_t align)
> {
> return pcpu_alloc(size, align, false);
> }
> @@ -1215,7 +1217,7 @@ EXPORT_SYMBOL_GPL(__alloc_percpu);
> * RETURNS:
> * Percpu pointer to the allocated area on success, NULL on failure.
> */
> -void *__alloc_reserved_percpu(size_t size, size_t align)
> +void __percpu *__alloc_reserved_percpu(size_t size, size_t align)
> {
> return pcpu_alloc(size, align, true);
> }
> @@ -1267,7 +1269,7 @@ static void pcpu_reclaim(struct work_struct *work)
> * CONTEXT:
> * Can be called from atomic context.
> */
> -void free_percpu(void *ptr)
> +void free_percpu(void __percpu *ptr)
> {
> void *addr;
> struct pcpu_chunk *chunk;
> --
> 1.6.4.2
>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply
* [PATCH 3/7] phonet: Use for_each_bit
From: Akinobu Mita @ 2010-01-31 11:53 UTC (permalink / raw)
To: linux-kernel; +Cc: Akinobu Mita, David S. Miller, netdev
In-Reply-To: <1264938810-4173-1-git-send-email-akinobu.mita@gmail.com>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: netdev@vger.kernel.org
---
net/phonet/pn_dev.c | 3 +--
net/phonet/pn_netlink.c | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/net/phonet/pn_dev.c b/net/phonet/pn_dev.c
index bc4a33b..52edfc4 100644
--- a/net/phonet/pn_dev.c
+++ b/net/phonet/pn_dev.c
@@ -107,8 +107,7 @@ static void phonet_device_destroy(struct net_device *dev)
if (pnd) {
u8 addr;
- for (addr = find_first_bit(pnd->addrs, 64); addr < 64;
- addr = find_next_bit(pnd->addrs, 64, 1+addr))
+ for_each_bit(addr, pnd->addrs, 64)
phonet_address_notify(RTM_DELADDR, dev, addr);
kfree(pnd);
}
diff --git a/net/phonet/pn_netlink.c b/net/phonet/pn_netlink.c
index 2e6c7eb..4edc048 100644
--- a/net/phonet/pn_netlink.c
+++ b/net/phonet/pn_netlink.c
@@ -141,8 +141,7 @@ static int getaddr_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
continue;
addr_idx = 0;
- for (addr = find_first_bit(pnd->addrs, 64); addr < 64;
- addr = find_next_bit(pnd->addrs, 64, 1+addr)) {
+ for_each_bit(addr, pnd->addrs, 64) {
if (addr_idx++ < addr_start_idx)
continue;
--
1.6.0.6
^ permalink raw reply related
* [PATCH 6/7] atm: Use for_each_bit
From: Akinobu Mita @ 2010-01-31 11:53 UTC (permalink / raw)
To: linux-kernel; +Cc: Akinobu Mita, Chas Williams, linux-atm-general, netdev
In-Reply-To: <1264938810-4173-1-git-send-email-akinobu.mita@gmail.com>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Chas Williams <chas@cmf.nrl.navy.mil>
Cc: linux-atm-general@lists.sourceforge.net
Cc: netdev@vger.kernel.org
---
drivers/atm/lanai.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c
index cf97c34..97700f8 100644
--- a/drivers/atm/lanai.c
+++ b/drivers/atm/lanai.c
@@ -306,11 +306,10 @@ static void vci_bitfield_iterate(struct lanai_dev *lanai,
const unsigned long *lp,
void (*func)(struct lanai_dev *,vci_t vci))
{
- vci_t vci = find_first_bit(lp, NUM_VCI);
- while (vci < NUM_VCI) {
+ vci_t vci;
+
+ for_each_bit(vci, lp, NUM_VCI)
func(lanai, vci);
- vci = find_next_bit(lp, NUM_VCI, vci + 1);
- }
}
/* -------------------- BUFFER UTILITIES: */
--
1.6.0.6
^ permalink raw reply related
* Re: [PATCH] iplink_can: add support to set one-shot mode
From: Oliver Hartkopp @ 2010-01-31 12:22 UTC (permalink / raw)
To: shemminger-ZtmgI6mnKB3QT0dZR+AlfA
Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w,
netdev-u79uwXL29TY76Z2rM5mHXA, Marc Kleine-Budde,
Wolfgang Grandegger
In-Reply-To: <4B4CE6D0.1030803-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
Wolfgang Grandegger wrote:
> Marc Kleine-Budde wrote:
>> This patch adds the flag CAN_CTRLMODE_ONE_SHOT. It is used as mask
>> or flag in the "struct can_ctrlmode".
>>
>> It also adds to "ip" the option to set a CAN controller into the special
>> "one-shot" mode. In this mode, if supported by the CAN controller,
>> tries only once to deliver a CAN frame and aborts it if an error
>> (e.g.: arbitration lost) happens.
>>
>> Signed-off-by: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
>> Acked-by: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
>
> Could this patch be considered for iproute2 inclusion? The corresponding
> kernel patch has been accepted in the meantime.
>
> Thanks,
>
> Wolfgang.
Hello Stephen,
this patch sits in patchwork with the state "Changes Requested"
http://patchwork.ozlabs.org/patch/41660/
which is obviously wrong.
It would by nice if this change could get into iproute2 until 2.6.33 hits the
ground.
Thanks,
Oliver
^ permalink raw reply
* [PATCH 1/4] MCS7830 USB-Ether: add Rx error support
From: Andreas Mohr @ 2010-01-31 12:58 UTC (permalink / raw)
To: David Miller, Arnd Bergmann, David Hollis, Phil Chang; +Cc: netdev, linux-usb
ChangeLog:
- evaluate Rx error statistics from trailing Rx status byte
- add driver TODO list
- add myself to authors
Quilt series run-tested, based on 2.6.33-rc4 (net-2.6.git mcs7830 has idle history,
should be good to go).
Signed-off-by: Andreas Mohr <andi@lisas.de>
Index: linux-2.6.33-rc4/drivers/net/usb/mcs7830.c
===================================================================
--- linux-2.6.33-rc4.orig/drivers/net/usb/mcs7830.c 2010-01-31 07:29:11.000000000 +0100
+++ linux-2.6.33-rc4/drivers/net/usb/mcs7830.c 2010-01-31 12:59:56.000000000 +0100
@@ -3,11 +3,27 @@
*
* based on usbnet.c, asix.c and the vendor provided mcs7830 driver
*
+ * Copyright (C) 2010 Andreas Mohr <andi@lisas.de>
* Copyright (C) 2006 Arnd Bergmann <arnd@arndb.de>
* Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com>
* Copyright (C) 2005 Phil Chang <pchang23@sbcglobal.net>
* Copyright (c) 2002-2003 TiVo Inc.
*
+ * Definitions gathered from MOSCHIP, Data Sheet_7830DA.pdf (thanks!).
+ *
+ * TODO:
+ * - add .reset_resume support (iface is _gone_ after resume w/ power loss)
+ * - verify that mcs7830_get_regs() does have same output pre-/post-suspend
+ * - support HIF_REG_CONFIG_SLEEPMODE/HIF_REG_CONFIG_TXENABLE (via autopm?)
+ * - implement ethtool_ops get_pauseparam/set_pauseparam
+ * via HIF_REG_PAUSE_THRESHOLD (>= revision C only!)
+ * - implement get_eeprom/[set_eeprom]
+ * - switch PHY on/off on ifup/ifdown (perhaps in usbnet.c, via MII)
+ * - mcs7830_get_regs() handling is weird: for rev 2 we return 32 regs,
+ * can access only ~ 24, remaining user buffer is uninitialized garbage
+ * - anything else?
+ *
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -83,6 +99,17 @@
HIF_REG_PAUSE_THRESHOLD_DEFAULT = 0,
};
+/* Trailing status byte in Ethernet Rx frame */
+enum {
+ MCS7830_RX_SHORT_FRAME = 0x01, /* < 64 bytes */
+ MCS7830_RX_LENGTH_ERROR = 0x02, /* framelen != Ethernet length field */
+ MCS7830_RX_ALIGNMENT_ERROR = 0x04, /* non-even number of nibbles */
+ MCS7830_RX_CRC_ERROR = 0x08,
+ MCS7830_RX_LARGE_FRAME = 0x10, /* > 1518 bytes */
+ MCS7830_RX_FRAME_CORRECT = 0x20, /* frame is correct */
+ /* [7:6] reserved */
+};
+
struct mcs7830_data {
u8 multi_filter[8];
u8 config;
@@ -539,9 +566,23 @@
skb_trim(skb, skb->len - 1);
status = skb->data[skb->len];
- if (status != 0x20)
+ if (status != MCS7830_RX_FRAME_CORRECT) {
dev_dbg(&dev->udev->dev, "rx fixup status %x\n", status);
+ /* hmm, perhaps usbnet.c already sees a globally visible
+ frame error and increments rx_errors on its own already? */
+ dev->net->stats.rx_errors++;
+
+ if (status & (MCS7830_RX_SHORT_FRAME
+ |MCS7830_RX_LENGTH_ERROR
+ |MCS7830_RX_LARGE_FRAME))
+ dev->net->stats.rx_length_errors++;
+ if (status & MCS7830_RX_ALIGNMENT_ERROR)
+ dev->net->stats.rx_frame_errors++;
+ if (status & MCS7830_RX_CRC_ERROR)
+ dev->net->stats.rx_crc_errors++;
+ }
+
return skb->len > 0;
}
^ permalink raw reply
* [PATCH 2/4] MCS7830 USB-Ether: Spelling corrections
From: Andreas Mohr @ 2010-01-31 12:58 UTC (permalink / raw)
To: David Miller, Arnd Bergmann, David Hollis, Phil Chang; +Cc: netdev, linux-usb
ChangeLog:
- spelling corrections / whitespace
Signed-off-by: Andreas Mohr <andi@lisas.de>
Index: linux-2.6.33-rc4/drivers/net/usb/mcs7830.c
===================================================================
--- linux-2.6.33-rc4.orig/drivers/net/usb/mcs7830.c 2010-01-31 12:34:39.000000000 +0100
+++ linux-2.6.33-rc4/drivers/net/usb/mcs7830.c 2010-01-31 12:34:45.000000000 +0100
@@ -1,5 +1,5 @@
/*
- * MosChips MCS7830 based USB 2.0 Ethernet Devices
+ * MOSCHIP MCS7830 based USB 2.0 Ethernet Devices
*
* based on usbnet.c, asix.c and the vendor provided mcs7830 driver
*
@@ -71,7 +71,7 @@
ADVERTISE_100HALF | ADVERTISE_10FULL | \
ADVERTISE_10HALF | ADVERTISE_CSMA)
-/* HIF_REG_XX coressponding index value */
+/* HIF_REG_XX corresponding index value */
enum {
HIF_REG_MULTICAST_HASH = 0x00,
HIF_REG_PACKET_GAP1 = 0x08,
@@ -92,7 +92,7 @@
HIF_REG_CONFIG_TXENABLE = 0x08,
HIF_REG_CONFIG_SLEEPMODE = 0x04,
HIF_REG_CONFIG_ALLMULTICAST = 0x02,
- HIF_REG_CONFIG_PROMISCIOUS = 0x01,
+ HIF_REG_CONFIG_PROMISCUOUS = 0x01,
HIF_REG_ETHERNET_ADDR = 0x0f,
HIF_REG_22 = 0x15,
HIF_REG_PAUSE_THRESHOLD = 0x16,
@@ -417,7 +417,7 @@
data->config |= HIF_REG_CONFIG_ALLMULTICAST;
if (net->flags & IFF_PROMISC) {
- data->config |= HIF_REG_CONFIG_PROMISCIOUS;
+ data->config |= HIF_REG_CONFIG_PROMISCUOUS;
} else if (net->flags & IFF_ALLMULTI ||
net->mc_count > MCS7830_MAX_MCAST) {
data->config |= HIF_REG_CONFIG_ALLMULTICAST;
@@ -522,7 +522,7 @@
.ndo_validate_addr = eth_validate_addr,
.ndo_do_ioctl = mcs7830_ioctl,
.ndo_set_multicast_list = mcs7830_set_multicast,
- .ndo_set_mac_address = mcs7830_set_mac_address,
+ .ndo_set_mac_address = mcs7830_set_mac_address,
};
static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev)
@@ -553,7 +553,7 @@
return ret;
}
-/* The chip always appends a status bytes that we need to strip */
+/* The chip always appends a status byte that we need to strip */
static int mcs7830_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
{
u8 status;
^ permalink raw reply
* [PATCH 3/4] MCS7830 USB-Ether: change register define
From: Andreas Mohr @ 2010-01-31 12:58 UTC (permalink / raw)
To: David Miller, Arnd Bergmann, David Hollis, Phil Chang; +Cc: netdev, linux-usb
ChangeLog:
- rename register, add comment
Signed-off-by: Andreas Mohr <andi@lisas.de>
Index: linux-2.6.33-rc4/drivers/net/usb/mcs7830.c
===================================================================
--- linux-2.6.33-rc4.orig/drivers/net/usb/mcs7830.c 2010-01-31 12:34:45.000000000 +0100
+++ linux-2.6.33-rc4/drivers/net/usb/mcs7830.c 2010-01-31 12:34:51.000000000 +0100
@@ -85,6 +85,7 @@
HIF_REG_PHY_CMD2_PEND_FLAG_BIT = 0x80,
HIF_REG_PHY_CMD2_READY_FLAG_BIT = 0x40,
HIF_REG_CONFIG = 0x0e,
+ /* hmm, spec sez: "R/W", "Except bit 3" (likely TXENABLE). */
HIF_REG_CONFIG_CFG = 0x80,
HIF_REG_CONFIG_SPEED100 = 0x40,
HIF_REG_CONFIG_FULLDUPLEX_ENABLE = 0x20,
@@ -94,7 +95,7 @@
HIF_REG_CONFIG_ALLMULTICAST = 0x02,
HIF_REG_CONFIG_PROMISCUOUS = 0x01,
HIF_REG_ETHERNET_ADDR = 0x0f,
- HIF_REG_22 = 0x15,
+ HIF_REG_FRAME_DROP_COUNTER = 0x15, /* 0..ff; reset: 0 */
HIF_REG_PAUSE_THRESHOLD = 0x16,
HIF_REG_PAUSE_THRESHOLD_DEFAULT = 0,
};
@@ -334,7 +335,7 @@
{
u8 dummy[2];
int ret;
- ret = mcs7830_get_reg(dev, HIF_REG_22, 2, dummy);
+ ret = mcs7830_get_reg(dev, HIF_REG_FRAME_DROP_COUNTER, 2, dummy);
if (ret > 0)
return 2; /* Rev C or later */
return 1; /* earlier revision */
--
GNU/Linux. It's not the software that's free, it's you.
^ permalink raw reply
* [PATCH 4/4] MCS7830 USB-Ether: resume _with_ working link, via .reset_resume support
From: Andreas Mohr @ 2010-01-31 12:58 UTC (permalink / raw)
To: David Miller, Arnd Bergmann, David Hollis, Phil Chang; +Cc: netdev, linux-usb
ChangeLog:
Implement .reset_resume support to retain a live network connection
during suspend despite USB power loss.
- rework operation to reference cached data in mcs7830_data and
netdev->dev_addr
- update netdev->dev_addr only in case new MAC was set successfully
. Tests done:
. ethtool -d pre-/post-suspend: register values match
. running ssh session suspend, resume: works
. ifdown device, suspend, resume: works
. ifup, suspend, unplug, resume: WORKS (eth1 is removed, re-ifup of eth1
after card replug works)
. verified identical MAC in ifconfig post-resume
(ok, should be verified on network side to be fully certain...)
Keywords: suspend resume network connection dead interface down
Signed-off-by: Andreas Mohr <andi@lisas.de>
Index: linux-2.6.33-rc4/drivers/net/usb/mcs7830.c
===================================================================
--- linux-2.6.33-rc4.orig/drivers/net/usb/mcs7830.c 2010-01-31 13:01:24.000000000 +0100
+++ linux-2.6.33-rc4/drivers/net/usb/mcs7830.c 2010-01-31 13:05:17.000000000 +0100
@@ -12,8 +12,6 @@
* Definitions gathered from MOSCHIP, Data Sheet_7830DA.pdf (thanks!).
*
* TODO:
- * - add .reset_resume support (iface is _gone_ after resume w/ power loss)
- * - verify that mcs7830_get_regs() does have same output pre-/post-suspend
* - support HIF_REG_CONFIG_SLEEPMODE/HIF_REG_CONFIG_TXENABLE (via autopm?)
* - implement ethtool_ops get_pauseparam/set_pauseparam
* via HIF_REG_PAUSE_THRESHOLD (>= revision C only!)
@@ -137,7 +135,7 @@
return ret;
}
-static int mcs7830_set_reg(struct usbnet *dev, u16 index, u16 size, void *data)
+static int mcs7830_set_reg(struct usbnet *dev, u16 index, u16 size, const void *data)
{
struct usb_device *xdev = dev->udev;
int ret;
@@ -211,13 +209,43 @@
usb_free_urb(urb);
}
-static int mcs7830_get_address(struct usbnet *dev)
+static int mcs7830_hif_get_mac_address(struct usbnet *dev, unsigned char *addr)
+{
+ int ret = mcs7830_get_reg(dev, HIF_REG_ETHERNET_ADDR, ETH_ALEN, addr);
+ if (ret < 0)
+ return ret;
+ return 0;
+}
+
+static int mcs7830_hif_set_mac_address(struct usbnet *dev, unsigned char *addr)
+{
+ int ret = mcs7830_set_reg(dev, HIF_REG_ETHERNET_ADDR, ETH_ALEN, addr);
+
+ if (ret < 0)
+ return ret;
+ return 0;
+}
+
+static int mcs7830_set_mac_address(struct net_device *netdev, void *p)
{
int ret;
- ret = mcs7830_get_reg(dev, HIF_REG_ETHERNET_ADDR, ETH_ALEN,
- dev->net->dev_addr);
+ struct usbnet *dev = netdev_priv(netdev);
+ struct sockaddr *addr = p;
+
+ if (netif_running(netdev))
+ return -EBUSY;
+
+ if (!is_valid_ether_addr(addr->sa_data))
+ return -EINVAL;
+
+ ret = mcs7830_hif_set_mac_address(dev, addr->sa_data);
+
if (ret < 0)
return ret;
+
+ /* it worked --> adopt it on netdev side */
+ memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
+
return 0;
}
@@ -359,33 +387,6 @@
}
}
-static int mcs7830_init_dev(struct usbnet *dev)
-{
- int ret;
- int retry;
-
- /* Read MAC address from EEPROM */
- ret = -EINVAL;
- for (retry = 0; retry < 5 && ret; retry++)
- ret = mcs7830_get_address(dev);
- if (ret) {
- dev_warn(&dev->udev->dev, "Cannot read MAC address\n");
- goto out;
- }
-
- /* Set up PHY */
- ret = mcs7830_set_autoneg(dev, 0);
- if (ret) {
- dev_info(&dev->udev->dev, "Cannot set autoneg\n");
- goto out;
- }
-
- mcs7830_rev_C_fixup(dev);
- ret = 0;
-out:
- return ret;
-}
-
static int mcs7830_mdio_read(struct net_device *netdev, int phy_id,
int location)
{
@@ -406,11 +407,33 @@
return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
}
-/* credits go to asix_set_multicast */
-static void mcs7830_set_multicast(struct net_device *net)
+static inline struct mcs7830_data *mcs7830_get_data(struct usbnet *dev)
+{
+ return (struct mcs7830_data *)&dev->data;
+}
+
+static void mcs7830_hif_update_multicast_hash(struct usbnet *dev)
+{
+ struct mcs7830_data *data = mcs7830_get_data(dev);
+ mcs7830_set_reg_async(dev, HIF_REG_MULTICAST_HASH,
+ sizeof data->multi_filter,
+ data->multi_filter);
+}
+
+static void mcs7830_hif_update_config(struct usbnet *dev)
+{
+ /* implementation specific to data->config
+ (argument needs to be heap-based anyway - USB DMA!) */
+ struct mcs7830_data *data = mcs7830_get_data(dev);
+ mcs7830_set_reg_async(dev, HIF_REG_CONFIG, 1, &data->config);
+}
+
+static void mcs7830_data_set_multicast(struct net_device *net)
{
struct usbnet *dev = netdev_priv(net);
- struct mcs7830_data *data = (struct mcs7830_data *)&dev->data;
+ struct mcs7830_data *data = mcs7830_get_data(dev);
+
+ memset(data->multi_filter, 0, sizeof data->multi_filter);
data->config = HIF_REG_CONFIG_TXENABLE;
@@ -433,21 +456,51 @@
u32 crc_bits;
int i;
- memset(data->multi_filter, 0, sizeof data->multi_filter);
-
/* Build the multicast hash filter. */
for (i = 0; i < net->mc_count; i++) {
crc_bits = ether_crc(ETH_ALEN, mc_list->dmi_addr) >> 26;
data->multi_filter[crc_bits >> 3] |= 1 << (crc_bits & 7);
mc_list = mc_list->next;
}
+ }
+}
- mcs7830_set_reg_async(dev, HIF_REG_MULTICAST_HASH,
- sizeof data->multi_filter,
- data->multi_filter);
+static int mcs7830_apply_base_config(struct usbnet *dev)
+{
+ int ret;
+
+ /* re-configure known MAC (suspend case etc.) */
+ ret = mcs7830_hif_set_mac_address(dev, dev->net->dev_addr);
+ if (ret) {
+ dev_info(&dev->udev->dev, "Cannot set MAC address\n");
+ goto out;
}
- mcs7830_set_reg_async(dev, HIF_REG_CONFIG, 1, &data->config);
+ /* Set up PHY */
+ ret = mcs7830_set_autoneg(dev, 0);
+ if (ret) {
+ dev_info(&dev->udev->dev, "Cannot set autoneg\n");
+ goto out;
+ }
+
+ mcs7830_hif_update_multicast_hash(dev);
+ mcs7830_hif_update_config(dev);
+
+ mcs7830_rev_C_fixup(dev);
+ ret = 0;
+out:
+ return ret;
+}
+
+/* credits go to asix_set_multicast */
+static void mcs7830_set_multicast(struct net_device *net)
+{
+ struct usbnet *dev = netdev_priv(net);
+
+ mcs7830_data_set_multicast(net);
+
+ mcs7830_hif_update_multicast_hash(dev);
+ mcs7830_hif_update_config(dev);
}
static int mcs7830_get_regs_len(struct net_device *net)
@@ -491,29 +544,6 @@
.nway_reset = usbnet_nway_reset,
};
-static int mcs7830_set_mac_address(struct net_device *netdev, void *p)
-{
- int ret;
- struct usbnet *dev = netdev_priv(netdev);
- struct sockaddr *addr = p;
-
- if (netif_running(netdev))
- return -EBUSY;
-
- if (!is_valid_ether_addr(addr->sa_data))
- return -EINVAL;
-
- memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
-
- ret = mcs7830_set_reg(dev, HIF_REG_ETHERNET_ADDR, ETH_ALEN,
- netdev->dev_addr);
-
- if (ret < 0)
- return ret;
-
- return 0;
-}
-
static const struct net_device_ops mcs7830_netdev_ops = {
.ndo_open = usbnet_open,
.ndo_stop = usbnet_stop,
@@ -530,14 +560,25 @@
{
struct net_device *net = dev->net;
int ret;
+ int retry;
- ret = mcs7830_init_dev(dev);
+ /* Initial startup: Gather MAC address setting from EEPROM */
+ ret = -EINVAL;
+ for (retry = 0; retry < 5 && ret; retry++)
+ ret = mcs7830_hif_get_mac_address(dev, net->dev_addr);
+ if (ret) {
+ dev_warn(&dev->udev->dev, "Cannot read MAC address\n");
+ goto out;
+ }
+
+ mcs7830_data_set_multicast(net);
+
+ ret = mcs7830_apply_base_config(dev);
if (ret)
goto out;
net->ethtool_ops = &mcs7830_ethtool_ops;
net->netdev_ops = &mcs7830_netdev_ops;
- mcs7830_set_multicast(net);
/* reserve space for the status byte on rx */
dev->rx_urb_size = ETH_FRAME_LEN + 1;
@@ -622,6 +663,20 @@
};
MODULE_DEVICE_TABLE(usb, products);
+static int mcs7830_reset_resume (struct usb_interface *intf)
+{
+ /* YES, this function is successful enough that ethtool -d
+ does show same output pre-/post-suspend */
+
+ struct usbnet *dev = usb_get_intfdata(intf);
+
+ mcs7830_apply_base_config(dev);
+
+ usbnet_resume(intf);
+
+ return 0;
+}
+
static struct usb_driver mcs7830_driver = {
.name = driver_name,
.id_table = products,
@@ -629,6 +684,7 @@
.disconnect = usbnet_disconnect,
.suspend = usbnet_suspend,
.resume = usbnet_resume,
+ .reset_resume = mcs7830_reset_resume,
};
static int __init mcs7830_init(void)
^ permalink raw reply
* Re: 2.6.32: padlock_sha1 and hmac broken?
From: Wolfgang Walter @ 2010-01-31 13:37 UTC (permalink / raw)
To: Herbert Xu
Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
Linux Crypto Mailing List
In-Reply-To: <20100131092222.GA22508@gondor.apana.org.au>
Am Sonntag, 31. Januar 2010 schrieb Herbert Xu:
> On Sun, Jan 31, 2010 at 03:11:22AM +0100, Wolfgang Walter wrote:
> > Not sure.
> >
> > When I do
> >
> > modprobe tcrypt mode=101
> >
> > I get a kernel oops:
>
> Sorry, this one should have a better chance at working.
>
> diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c
> index 0af8057..d3a27e0 100644
> --- a/drivers/crypto/padlock-sha.c
> +++ b/drivers/crypto/padlock-sha.c
> @@ -57,6 +57,23 @@ static int padlock_sha_update(struct shash_desc *desc,
> return crypto_shash_update(&dctx->fallback, data, length);
> }
>
> +static int padlock_sha_export(struct shash_desc *desc, void *out)
> +{
> + struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
> +
> + return crypto_shash_export(&dctx->fallback, out);
> +}
> +
> +static int padlock_sha_import(struct shash_desc *desc, const void *in)
> +{
> + struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
> + struct padlock_sha_ctx *ctx = crypto_shash_ctx(desc->tfm);
> +
> + dctx->fallback.tfm = ctx->fallback;
> + dctx->fallback.flags = desc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;
> + return crypto_shash_import(&dctx->fallback, in);
> +}
> +
> static inline void padlock_output_block(uint32_t *src,
> uint32_t *dst, size_t count)
> {
> @@ -235,7 +252,10 @@ static struct shash_alg sha1_alg = {
> .update = padlock_sha_update,
> .finup = padlock_sha1_finup,
> .final = padlock_sha1_final,
> + .export = padlock_sha_export,
> + .import = padlock_sha_import,
> .descsize = sizeof(struct padlock_sha_desc),
> + .statesize = sizeof(struct sha1_state),
> .base = {
> .cra_name = "sha1",
> .cra_driver_name = "sha1-padlock",
> @@ -256,7 +276,10 @@ static struct shash_alg sha256_alg = {
> .update = padlock_sha_update,
> .finup = padlock_sha256_finup,
> .final = padlock_sha256_final,
> + .export = padlock_sha_export,
> + .import = padlock_sha_import,
> .descsize = sizeof(struct padlock_sha_desc),
> + .statesize = sizeof(struct sha256_state),
> .base = {
> .cra_name = "sha256",
> .cra_driver_name = "sha256-padlock",
>
> Thanks,
This patch works. /proc/crypto shows
name : authenc(hmac(sha1),cbc(aes))
driver : authenc(hmac(sha1-padlock),cbc-aes-padlock)
module : kernel
priority : 4300
refcnt : 85
selftest : passed
type : aead
async : yes
blocksize : 16
ivsize : 16
maxauthsize : 20
geniv : <built-in>
....
....
and
modprobe tcrypt mode=101
logs nothing.
Thanks a lot,
--
Wolfgang Walter
Studentenwerk München
Anstalt des öffentlichen Rechts
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [net-next-2.6 PATCH 2/5] if_link: Add SR-IOV configuration methods
From: Or Gerlitz @ 2010-01-31 14:25 UTC (permalink / raw)
To: Jeff Kirsher; +Cc: davem, netdev, gospo, Mitch Williams, Or Gerlitz
In-Reply-To: <20100130103947.26633.78452.stgit@localhost.localdomain>
Jeff Kirsher wrote:
> +struct ifla_vf_vlan {
> + __u32 vf;
> + __s32 vlan; /* 0 - 4095, -1 disables VLAN filter */
> +};
Jeff,
In the same manner that vconfig does for 8021q devices, except for VID
there's a need
to let the user control on the egress qos mapping (vlan priority bits)
per VF (I don't think it
need to go per skb priority). Where for NIC HW which supports setting
the VID only, the
packets will be marked with a default priority.
Or.
^ permalink raw reply
* Re: [PATCH net-next-2.6] can: mcp251x: Move to threaded interrupts instead of workqueues.
From: christian pellegrin @ 2010-01-31 17:39 UTC (permalink / raw)
To: Wolfgang Grandegger
Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w,
netdev-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <4B648D3F.30909-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
On Sat, Jan 30, 2010 at 8:49 PM, Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org> wrote:
> Hi Christian,
>
Hi,
>
> Could you please truncate the lines to the usual 72 (or 80) characters
> per line?
>
ack, just reconfigured nano!
>> +static irqreturn_t mcp251x_can_ist(int irq, void *dev_id);
>> +static void mcp251x_restart_work_handler(struct work_struct *ws);
>> +static void mcp251x_tx_work_handler(struct work_struct *ws);
>
> Any chance to get rid of these forward declarations (by reordering them)?
>
ack, I was trying to minimize patch size so the reason for not moving
code. I fixed it.
>> + * This message is worrisome (because it points out
>> + * something wrong with locking logic) if seen when
>> + * there is no bus-off recovery going on.
>> + */
>
> Before it calls netif_carrier_on, it calls the drivers "do_set_mode"
> callback. See:
>
> http://lxr.linux.no/#linux+v2.6.32/drivers/net/can/dev.c#L383
>
> Is there a way to clear the TX logic in the "do_set_mode" callback?
>
ack, sorry saw this just now
>> + dev_info(&net->dev,
>> + "cannot allocate error skb\n");
>
> dev_err?
>
ack
>> if (priv->can.state == CAN_STATE_BUS_OFF) {
>> mcp251x_clean(net);
>> netif_wake_queue(net);
>> - return;
>> + goto restart_work_unlock;
>> }
>
> } else { ? To get rid of the label.
>
ack. I realized that netif_wake_queue here is wrong too or at least
meaningless: the carrier of the can network interface is declared down
so we shouldn't reschedule the tx queue anyway. I took it out and
retested without it.
--
Christian Pellegrin, see http://www.evolware.org/chri/
"Real Programmers don't play tennis, or any other sport which requires
you to change clothes. Mountain climbing is OK, and Real Programmers
wear their climbing boots to work in case a mountain should suddenly
spring up in the middle of the computer room."
^ permalink raw reply
* [PATCH net-next-2.6 v2] can: mcp251x: Move to threaded interrupts instead of workqueues.
From: Christian Pellegrin @ 2010-01-31 17:43 UTC (permalink / raw)
To: socketcan-core-0fE9KPoRgkgATYTw5x5z8w,
netdev-u79uwXL29TY76Z2rM5mHXA
Cc: Christian Pellegrin
In-Reply-To: <cabda6421001310939g4acd22d2ua8dab4de3322f90e-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
This patch addresses concerns about efficiency of handling incoming
packets. Handling of interrupts is done in a threaded interrupt handler
which has a smaller latency than workqueues. This change needed a rework
of the locking scheme that was much simplified. Some other (more or less
longstanding) bugs are fixed: utilization of just half of the RX
buffers, useless wait for interrupt on open, more reliable reset
sequence. The MERR interrupt is not used anymore: it overloads the CPU
in bus-off state without any additional information.
Signed-off-by: Christian Pellegrin <chripell-VaTbYqLCNhc@public.gmane.org>
---
drivers/net/can/mcp251x.c | 415 ++++++++++++++++++++++-----------------------
1 files changed, 202 insertions(+), 213 deletions(-)
diff --git a/drivers/net/can/mcp251x.c b/drivers/net/can/mcp251x.c
index bbe186b..884d309 100644
--- a/drivers/net/can/mcp251x.c
+++ b/drivers/net/can/mcp251x.c
@@ -180,6 +180,14 @@
#define RXBEID0_OFF 4
#define RXBDLC_OFF 5
#define RXBDAT_OFF 6
+#define RXFSIDH(n) ((n) * 4)
+#define RXFSIDL(n) ((n) * 4 + 1)
+#define RXFEID8(n) ((n) * 4 + 2)
+#define RXFEID0(n) ((n) * 4 + 3)
+#define RXMSIDH(n) ((n) * 4 + 0x20)
+#define RXMSIDL(n) ((n) * 4 + 0x21)
+#define RXMEID8(n) ((n) * 4 + 0x22)
+#define RXMEID0(n) ((n) * 4 + 0x23)
#define GET_BYTE(val, byte) \
(((val) >> ((byte) * 8)) & 0xff)
@@ -219,7 +227,8 @@ struct mcp251x_priv {
struct net_device *net;
struct spi_device *spi;
- struct mutex spi_lock; /* SPI buffer lock */
+ struct mutex mcp_lock; /* SPI device lock */
+
u8 *spi_tx_buf;
u8 *spi_rx_buf;
dma_addr_t spi_tx_dma;
@@ -227,11 +236,11 @@ struct mcp251x_priv {
struct sk_buff *tx_skb;
int tx_len;
+
struct workqueue_struct *wq;
struct work_struct tx_work;
- struct work_struct irq_work;
- struct completion awake;
- int wake;
+ struct work_struct restart_work;
+
int force_quit;
int after_suspend;
#define AFTER_SUSPEND_UP 1
@@ -245,7 +254,8 @@ static void mcp251x_clean(struct net_device *net)
{
struct mcp251x_priv *priv = netdev_priv(net);
- net->stats.tx_errors++;
+ if (priv->tx_skb || priv->tx_len)
+ net->stats.tx_errors++;
if (priv->tx_skb)
dev_kfree_skb(priv->tx_skb);
if (priv->tx_len)
@@ -300,16 +310,12 @@ static u8 mcp251x_read_reg(struct spi_device *spi, uint8_t reg)
struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
u8 val = 0;
- mutex_lock(&priv->spi_lock);
-
priv->spi_tx_buf[0] = INSTRUCTION_READ;
priv->spi_tx_buf[1] = reg;
mcp251x_spi_trans(spi, 3);
val = priv->spi_rx_buf[2];
- mutex_unlock(&priv->spi_lock);
-
return val;
}
@@ -317,15 +323,11 @@ static void mcp251x_write_reg(struct spi_device *spi, u8 reg, uint8_t val)
{
struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
- mutex_lock(&priv->spi_lock);
-
priv->spi_tx_buf[0] = INSTRUCTION_WRITE;
priv->spi_tx_buf[1] = reg;
priv->spi_tx_buf[2] = val;
mcp251x_spi_trans(spi, 3);
-
- mutex_unlock(&priv->spi_lock);
}
static void mcp251x_write_bits(struct spi_device *spi, u8 reg,
@@ -333,16 +335,12 @@ static void mcp251x_write_bits(struct spi_device *spi, u8 reg,
{
struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
- mutex_lock(&priv->spi_lock);
-
priv->spi_tx_buf[0] = INSTRUCTION_BIT_MODIFY;
priv->spi_tx_buf[1] = reg;
priv->spi_tx_buf[2] = mask;
priv->spi_tx_buf[3] = val;
mcp251x_spi_trans(spi, 4);
-
- mutex_unlock(&priv->spi_lock);
}
static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf,
@@ -358,10 +356,8 @@ static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf,
mcp251x_write_reg(spi, TXBCTRL(tx_buf_idx) + i,
buf[i]);
} else {
- mutex_lock(&priv->spi_lock);
memcpy(priv->spi_tx_buf, buf, TXBDAT_OFF + len);
mcp251x_spi_trans(spi, TXBDAT_OFF + len);
- mutex_unlock(&priv->spi_lock);
}
}
@@ -408,13 +404,9 @@ static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf,
for (; i < (RXBDAT_OFF + len); i++)
buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i);
} else {
- mutex_lock(&priv->spi_lock);
-
priv->spi_tx_buf[RXBCTRL_OFF] = INSTRUCTION_READ_RXB(buf_idx);
mcp251x_spi_trans(spi, SPI_TRANSFER_BUF_LEN);
memcpy(buf, priv->spi_rx_buf, SPI_TRANSFER_BUF_LEN);
-
- mutex_unlock(&priv->spi_lock);
}
}
@@ -467,21 +459,6 @@ static void mcp251x_hw_sleep(struct spi_device *spi)
mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_SLEEP);
}
-static void mcp251x_hw_wakeup(struct spi_device *spi)
-{
- struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
-
- priv->wake = 1;
-
- /* Can only wake up by generating a wake-up interrupt. */
- mcp251x_write_bits(spi, CANINTE, CANINTE_WAKIE, CANINTE_WAKIE);
- mcp251x_write_bits(spi, CANINTF, CANINTF_WAKIF, CANINTF_WAKIF);
-
- /* Wait until the device is awake */
- if (!wait_for_completion_timeout(&priv->awake, HZ))
- dev_err(&spi->dev, "MCP251x didn't wake-up\n");
-}
-
static netdev_tx_t mcp251x_hard_start_xmit(struct sk_buff *skb,
struct net_device *net)
{
@@ -490,7 +467,6 @@ static netdev_tx_t mcp251x_hard_start_xmit(struct sk_buff *skb,
if (priv->tx_skb || priv->tx_len) {
dev_warn(&spi->dev, "hard_xmit called while tx busy\n");
- netif_stop_queue(net);
return NETDEV_TX_BUSY;
}
@@ -511,12 +487,13 @@ static int mcp251x_do_set_mode(struct net_device *net, enum can_mode mode)
switch (mode) {
case CAN_MODE_START:
+ mcp251x_clean(net);
/* We have to delay work since SPI I/O may sleep */
priv->can.state = CAN_STATE_ERROR_ACTIVE;
priv->restart_tx = 1;
if (priv->can.restart_ms == 0)
priv->after_suspend = AFTER_SUSPEND_RESTART;
- queue_work(priv->wq, &priv->irq_work);
+ queue_work(priv->wq, &priv->restart_work);
break;
default:
return -EOPNOTSUPP;
@@ -525,7 +502,7 @@ static int mcp251x_do_set_mode(struct net_device *net, enum can_mode mode)
return 0;
}
-static void mcp251x_set_normal_mode(struct spi_device *spi)
+static int mcp251x_set_normal_mode(struct spi_device *spi)
{
struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
unsigned long timeout;
@@ -533,8 +510,7 @@ static void mcp251x_set_normal_mode(struct spi_device *spi)
/* Enable interrupts */
mcp251x_write_reg(spi, CANINTE,
CANINTE_ERRIE | CANINTE_TX2IE | CANINTE_TX1IE |
- CANINTE_TX0IE | CANINTE_RX1IE | CANINTE_RX0IE |
- CANINTF_MERRF);
+ CANINTE_TX0IE | CANINTE_RX1IE | CANINTE_RX0IE);
if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK) {
/* Put device into loopback mode */
@@ -555,11 +531,12 @@ static void mcp251x_set_normal_mode(struct spi_device *spi)
if (time_after(jiffies, timeout)) {
dev_err(&spi->dev, "MCP251x didn't"
" enter in normal mode\n");
- return;
+ return -EBUSY;
}
}
}
priv->can.state = CAN_STATE_ERROR_ACTIVE;
+ return 0;
}
static int mcp251x_do_set_bittiming(struct net_device *net)
@@ -590,33 +567,39 @@ static int mcp251x_setup(struct net_device *net, struct mcp251x_priv *priv,
{
mcp251x_do_set_bittiming(net);
- /* Enable RX0->RX1 buffer roll over and disable filters */
- mcp251x_write_bits(spi, RXBCTRL(0),
- RXBCTRL_BUKT | RXBCTRL_RXM0 | RXBCTRL_RXM1,
- RXBCTRL_BUKT | RXBCTRL_RXM0 | RXBCTRL_RXM1);
- mcp251x_write_bits(spi, RXBCTRL(1),
- RXBCTRL_RXM0 | RXBCTRL_RXM1,
- RXBCTRL_RXM0 | RXBCTRL_RXM1);
+ mcp251x_write_reg(spi, RXBCTRL(0),
+ RXBCTRL_BUKT | RXBCTRL_RXM0 | RXBCTRL_RXM1);
+ mcp251x_write_reg(spi, RXBCTRL(1),
+ RXBCTRL_RXM0 | RXBCTRL_RXM1);
return 0;
}
-static void mcp251x_hw_reset(struct spi_device *spi)
+static int mcp251x_hw_reset(struct spi_device *spi)
{
struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
int ret;
-
- mutex_lock(&priv->spi_lock);
+ unsigned long timeout;
priv->spi_tx_buf[0] = INSTRUCTION_RESET;
-
ret = spi_write(spi, priv->spi_tx_buf, 1);
-
- mutex_unlock(&priv->spi_lock);
-
- if (ret)
+ if (ret) {
dev_err(&spi->dev, "reset failed: ret = %d\n", ret);
+ return -EIO;
+ }
+
/* Wait for reset to finish */
+ timeout = jiffies + HZ;
mdelay(10);
+ while ((mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK)
+ != CANCTRL_REQOP_CONF) {
+ schedule();
+ if (time_after(jiffies, timeout)) {
+ dev_err(&spi->dev, "MCP251x didn't"
+ " enter in conf mode after reset\n");
+ return -EBUSY;
+ }
+ }
+ return 0;
}
static int mcp251x_hw_probe(struct spi_device *spi)
@@ -640,63 +623,17 @@ static int mcp251x_hw_probe(struct spi_device *spi)
return (st1 == 0x80 && st2 == 0x07) ? 1 : 0;
}
-static irqreturn_t mcp251x_can_isr(int irq, void *dev_id)
-{
- struct net_device *net = (struct net_device *)dev_id;
- struct mcp251x_priv *priv = netdev_priv(net);
-
- /* Schedule bottom half */
- if (!work_pending(&priv->irq_work))
- queue_work(priv->wq, &priv->irq_work);
-
- return IRQ_HANDLED;
-}
-
-static int mcp251x_open(struct net_device *net)
+static void mcp251x_open_clean(struct net_device *net)
{
struct mcp251x_priv *priv = netdev_priv(net);
struct spi_device *spi = priv->spi;
struct mcp251x_platform_data *pdata = spi->dev.platform_data;
- int ret;
-
- ret = open_candev(net);
- if (ret) {
- dev_err(&spi->dev, "unable to set initial baudrate!\n");
- return ret;
- }
+ free_irq(spi->irq, priv);
+ mcp251x_hw_sleep(spi);
if (pdata->transceiver_enable)
- pdata->transceiver_enable(1);
-
- priv->force_quit = 0;
- priv->tx_skb = NULL;
- priv->tx_len = 0;
-
- ret = request_irq(spi->irq, mcp251x_can_isr,
- IRQF_TRIGGER_FALLING, DEVICE_NAME, net);
- if (ret) {
- dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq);
- if (pdata->transceiver_enable)
- pdata->transceiver_enable(0);
- close_candev(net);
- return ret;
- }
-
- mcp251x_hw_wakeup(spi);
- mcp251x_hw_reset(spi);
- ret = mcp251x_setup(net, priv, spi);
- if (ret) {
- free_irq(spi->irq, net);
- mcp251x_hw_sleep(spi);
- if (pdata->transceiver_enable)
- pdata->transceiver_enable(0);
- close_candev(net);
- return ret;
- }
- mcp251x_set_normal_mode(spi);
- netif_wake_queue(net);
-
- return 0;
+ pdata->transceiver_enable(0);
+ close_candev(net);
}
static int mcp251x_stop(struct net_device *net)
@@ -707,17 +644,19 @@ static int mcp251x_stop(struct net_device *net)
close_candev(net);
+ priv->force_quit = 1;
+ free_irq(spi->irq, priv);
+ destroy_workqueue(priv->wq);
+ priv->wq = NULL;
+
+ mutex_lock(&priv->mcp_lock);
+
/* Disable and clear pending interrupts */
mcp251x_write_reg(spi, CANINTE, 0x00);
mcp251x_write_reg(spi, CANINTF, 0x00);
- priv->force_quit = 1;
- free_irq(spi->irq, net);
- flush_workqueue(priv->wq);
-
mcp251x_write_reg(spi, TXBCTRL(0), 0);
- if (priv->tx_skb || priv->tx_len)
- mcp251x_clean(net);
+ mcp251x_clean(net);
mcp251x_hw_sleep(spi);
@@ -726,9 +665,27 @@ static int mcp251x_stop(struct net_device *net)
priv->can.state = CAN_STATE_STOPPED;
+ mutex_unlock(&priv->mcp_lock);
+
return 0;
}
+static void mcp251x_error_skb(struct net_device *net, int can_id, int data1)
+{
+ struct sk_buff *skb;
+ struct can_frame *frame;
+
+ skb = alloc_can_err_skb(net, &frame);
+ if (skb) {
+ frame->can_id = can_id;
+ frame->data[1] = data1;
+ netif_rx(skb);
+ } else {
+ dev_err(&net->dev,
+ "cannot allocate error skb\n");
+ }
+}
+
static void mcp251x_tx_work_handler(struct work_struct *ws)
{
struct mcp251x_priv *priv = container_of(ws, struct mcp251x_priv,
@@ -737,33 +694,32 @@ static void mcp251x_tx_work_handler(struct work_struct *ws)
struct net_device *net = priv->net;
struct can_frame *frame;
+ mutex_lock(&priv->mcp_lock);
if (priv->tx_skb) {
- frame = (struct can_frame *)priv->tx_skb->data;
-
if (priv->can.state == CAN_STATE_BUS_OFF) {
mcp251x_clean(net);
- netif_wake_queue(net);
- return;
+ } else {
+ frame = (struct can_frame *)priv->tx_skb->data;
+
+ if (frame->can_dlc > CAN_FRAME_MAX_DATA_LEN)
+ frame->can_dlc = CAN_FRAME_MAX_DATA_LEN;
+ mcp251x_hw_tx(spi, frame, 0);
+ priv->tx_len = 1 + frame->can_dlc;
+ can_put_echo_skb(priv->tx_skb, net, 0);
+ priv->tx_skb = NULL;
}
- if (frame->can_dlc > CAN_FRAME_MAX_DATA_LEN)
- frame->can_dlc = CAN_FRAME_MAX_DATA_LEN;
- mcp251x_hw_tx(spi, frame, 0);
- priv->tx_len = 1 + frame->can_dlc;
- can_put_echo_skb(priv->tx_skb, net, 0);
- priv->tx_skb = NULL;
}
+ mutex_unlock(&priv->mcp_lock);
}
-static void mcp251x_irq_work_handler(struct work_struct *ws)
+static void mcp251x_restart_work_handler(struct work_struct *ws)
{
struct mcp251x_priv *priv = container_of(ws, struct mcp251x_priv,
- irq_work);
+ restart_work);
struct spi_device *spi = priv->spi;
struct net_device *net = priv->net;
- u8 txbnctrl;
- u8 intf;
- enum can_state new_state;
+ mutex_lock(&priv->mcp_lock);
if (priv->after_suspend) {
mdelay(10);
mcp251x_hw_reset(spi);
@@ -772,45 +728,54 @@ static void mcp251x_irq_work_handler(struct work_struct *ws)
mcp251x_set_normal_mode(spi);
} else if (priv->after_suspend & AFTER_SUSPEND_UP) {
netif_device_attach(net);
- /* Clean since we lost tx buffer */
- if (priv->tx_skb || priv->tx_len) {
- mcp251x_clean(net);
- netif_wake_queue(net);
- }
+ mcp251x_clean(net);
mcp251x_set_normal_mode(spi);
+ netif_wake_queue(net);
} else {
mcp251x_hw_sleep(spi);
}
priv->after_suspend = 0;
+ priv->force_quit = 0;
}
- if (priv->can.restart_ms == 0 && priv->can.state == CAN_STATE_BUS_OFF)
- return;
+ if (priv->restart_tx) {
+ priv->restart_tx = 0;
+ mcp251x_write_reg(spi, TXBCTRL(0), 0);
+ mcp251x_clean(net);
+ netif_wake_queue(net);
+ mcp251x_error_skb(net, CAN_ERR_RESTARTED, 0);
+ }
+ mutex_unlock(&priv->mcp_lock);
+}
- while (!priv->force_quit && !freezing(current)) {
- u8 eflag = mcp251x_read_reg(spi, EFLG);
- int can_id = 0, data1 = 0;
+static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
+{
+ struct mcp251x_priv *priv = dev_id;
+ struct spi_device *spi = priv->spi;
+ struct net_device *net = priv->net;
- mcp251x_write_reg(spi, EFLG, 0x00);
+ mutex_lock(&priv->mcp_lock);
+ while (!priv->force_quit) {
+ enum can_state new_state;
+ u8 intf = mcp251x_read_reg(spi, CANINTF);
+ u8 eflag;
+ int can_id = 0, data1 = 0;
- if (priv->restart_tx) {
- priv->restart_tx = 0;
- mcp251x_write_reg(spi, TXBCTRL(0), 0);
- if (priv->tx_skb || priv->tx_len)
- mcp251x_clean(net);
- netif_wake_queue(net);
- can_id |= CAN_ERR_RESTARTED;
+ if (intf & CANINTF_RX0IF) {
+ mcp251x_hw_rx(spi, 0);
+ /* Free one buffer ASAP */
+ mcp251x_write_bits(spi, CANINTF, intf & CANINTF_RX0IF,
+ 0x00);
}
- if (priv->wake) {
- /* Wait whilst the device wakes up */
- mdelay(10);
- priv->wake = 0;
- }
+ if (intf & CANINTF_RX1IF)
+ mcp251x_hw_rx(spi, 1);
- intf = mcp251x_read_reg(spi, CANINTF);
mcp251x_write_bits(spi, CANINTF, intf, 0x00);
+ eflag = mcp251x_read_reg(spi, EFLG);
+ mcp251x_write_reg(spi, EFLG, 0x00);
+
/* Update can state */
if (eflag & EFLG_TXBO) {
new_state = CAN_STATE_BUS_OFF;
@@ -851,59 +816,31 @@ static void mcp251x_irq_work_handler(struct work_struct *ws)
}
priv->can.state = new_state;
- if ((intf & CANINTF_ERRIF) || (can_id & CAN_ERR_RESTARTED)) {
- struct sk_buff *skb;
- struct can_frame *frame;
-
- /* Create error frame */
- skb = alloc_can_err_skb(net, &frame);
- if (skb) {
- /* Set error frame flags based on bus state */
- frame->can_id = can_id;
- frame->data[1] = data1;
-
- /* Update net stats for overflows */
- if (eflag & (EFLG_RX0OVR | EFLG_RX1OVR)) {
- if (eflag & EFLG_RX0OVR)
- net->stats.rx_over_errors++;
- if (eflag & EFLG_RX1OVR)
- net->stats.rx_over_errors++;
- frame->can_id |= CAN_ERR_CRTL;
- frame->data[1] |=
- CAN_ERR_CRTL_RX_OVERFLOW;
- }
-
- netif_rx(skb);
- } else {
- dev_info(&spi->dev,
- "cannot allocate error skb\n");
+ if (intf & CANINTF_ERRIF) {
+ /* Handle overflow counters */
+ if (eflag & (EFLG_RX0OVR | EFLG_RX1OVR)) {
+ if (eflag & EFLG_RX0OVR)
+ net->stats.rx_over_errors++;
+ if (eflag & EFLG_RX1OVR)
+ net->stats.rx_over_errors++;
+ can_id |= CAN_ERR_CRTL;
+ data1 |= CAN_ERR_CRTL_RX_OVERFLOW;
}
+ mcp251x_error_skb(net, can_id, data1);
}
if (priv->can.state == CAN_STATE_BUS_OFF) {
if (priv->can.restart_ms == 0) {
+ priv->force_quit = 1;
can_bus_off(net);
mcp251x_hw_sleep(spi);
- return;
+ break;
}
}
if (intf == 0)
break;
- if (intf & CANINTF_WAKIF)
- complete(&priv->awake);
-
- if (intf & CANINTF_MERRF) {
- /* If there are pending Tx buffers, restart queue */
- txbnctrl = mcp251x_read_reg(spi, TXBCTRL(0));
- if (!(txbnctrl & TXBCTRL_TXREQ)) {
- if (priv->tx_skb || priv->tx_len)
- mcp251x_clean(net);
- netif_wake_queue(net);
- }
- }
-
if (intf & (CANINTF_TX2IF | CANINTF_TX1IF | CANINTF_TX0IF)) {
net->stats.tx_packets++;
net->stats.tx_bytes += priv->tx_len - 1;
@@ -914,12 +851,66 @@ static void mcp251x_irq_work_handler(struct work_struct *ws)
netif_wake_queue(net);
}
- if (intf & CANINTF_RX0IF)
- mcp251x_hw_rx(spi, 0);
+ }
+ mutex_unlock(&priv->mcp_lock);
+ return IRQ_HANDLED;
+}
- if (intf & CANINTF_RX1IF)
- mcp251x_hw_rx(spi, 1);
+static int mcp251x_open(struct net_device *net)
+{
+ struct mcp251x_priv *priv = netdev_priv(net);
+ struct spi_device *spi = priv->spi;
+ struct mcp251x_platform_data *pdata = spi->dev.platform_data;
+ int ret;
+
+ ret = open_candev(net);
+ if (ret) {
+ dev_err(&spi->dev, "unable to set initial baudrate!\n");
+ return ret;
+ }
+
+ mutex_lock(&priv->mcp_lock);
+ if (pdata->transceiver_enable)
+ pdata->transceiver_enable(1);
+
+ priv->force_quit = 0;
+ priv->tx_skb = NULL;
+ priv->tx_len = 0;
+
+ ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist,
+ IRQF_TRIGGER_FALLING, DEVICE_NAME, priv);
+ if (ret) {
+ dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq);
+ if (pdata->transceiver_enable)
+ pdata->transceiver_enable(0);
+ close_candev(net);
+ goto open_unlock;
+ }
+
+ priv->wq = create_freezeable_workqueue("mcp251x_wq");
+ INIT_WORK(&priv->tx_work, mcp251x_tx_work_handler);
+ INIT_WORK(&priv->restart_work, mcp251x_restart_work_handler);
+
+ ret = mcp251x_hw_reset(spi);
+ if (ret) {
+ mcp251x_open_clean(net);
+ goto open_unlock;
+ }
+ ret = mcp251x_setup(net, priv, spi);
+ if (ret) {
+ mcp251x_open_clean(net);
+ goto open_unlock;
}
+ ret = mcp251x_set_normal_mode(spi);
+ if (ret) {
+ mcp251x_open_clean(net);
+ goto open_unlock;
+ }
+ netif_wake_queue(net);
+
+open_unlock:
+ mutex_unlock(&priv->mcp_lock);
+ return ret;
}
static const struct net_device_ops mcp251x_netdev_ops = {
@@ -961,7 +952,7 @@ static int __devinit mcp251x_can_probe(struct spi_device *spi)
dev_set_drvdata(&spi->dev, priv);
priv->spi = spi;
- mutex_init(&priv->spi_lock);
+ mutex_init(&priv->mcp_lock);
/* If requested, allocate DMA buffers */
if (mcp251x_enable_dma) {
@@ -1010,18 +1001,12 @@ static int __devinit mcp251x_can_probe(struct spi_device *spi)
SET_NETDEV_DEV(net, &spi->dev);
- priv->wq = create_freezeable_workqueue("mcp251x_wq");
-
- INIT_WORK(&priv->tx_work, mcp251x_tx_work_handler);
- INIT_WORK(&priv->irq_work, mcp251x_irq_work_handler);
-
- init_completion(&priv->awake);
-
/* Configure the SPI bus */
spi->mode = SPI_MODE_0;
spi->bits_per_word = 8;
spi_setup(spi);
+ /* Here is OK to not lock the MCP, no one knows about it yet */
if (!mcp251x_hw_probe(spi)) {
dev_info(&spi->dev, "Probe failed\n");
goto error_probe;
@@ -1064,10 +1049,6 @@ static int __devexit mcp251x_can_remove(struct spi_device *spi)
unregister_candev(net);
free_candev(net);
- priv->force_quit = 1;
- flush_workqueue(priv->wq);
- destroy_workqueue(priv->wq);
-
if (mcp251x_enable_dma) {
dma_free_coherent(&spi->dev, PAGE_SIZE,
priv->spi_tx_buf, priv->spi_tx_dma);
@@ -1089,6 +1070,12 @@ static int mcp251x_can_suspend(struct spi_device *spi, pm_message_t state)
struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
struct net_device *net = priv->net;
+ priv->force_quit = 1;
+ disable_irq(spi->irq);
+ /*
+ * Note: at this point neither IST nor workqueues are running.
+ * open/stop cannot be called anyway so locking is not needed
+ */
if (netif_running(net)) {
netif_device_detach(net);
@@ -1115,16 +1102,18 @@ static int mcp251x_can_resume(struct spi_device *spi)
if (priv->after_suspend & AFTER_SUSPEND_POWER) {
pdata->power_enable(1);
- queue_work(priv->wq, &priv->irq_work);
+ queue_work(priv->wq, &priv->restart_work);
} else {
if (priv->after_suspend & AFTER_SUSPEND_UP) {
if (pdata->transceiver_enable)
pdata->transceiver_enable(1);
- queue_work(priv->wq, &priv->irq_work);
+ queue_work(priv->wq, &priv->restart_work);
} else {
priv->after_suspend = 0;
}
}
+ priv->force_quit = 0;
+ enable_irq(spi->irq);
return 0;
}
#else
--
1.5.6.5
^ permalink raw reply related
* Re: [PATCH] sky2: receive dma mapping error handling
From: Michael Breuer @ 2010-01-31 18:50 UTC (permalink / raw)
To: Jarek Poplawski
Cc: Stephen Hemminger, David Miller, akpm, flyboy, linux-kernel,
netdev, Michael Chan, Don Fry, Francois Romieu, Matt Carlson
In-Reply-To: <4B650D53.2010607@majjas.com>
On 1/30/2010 11:55 PM, Michael Breuer wrote:
> On 01/30/2010 07:34 PM, Jarek Poplawski wrote:
>>
>> Could you try the patch below to show maybe some other users of
>> dma-debug entries?
>>
>> Jarek P.
>> ---
>>
> With the default # entries & dma_debug_driver=sky2:
>
> 6:00 is eth0 & 4:00 is eth1.
>
> Jan 30 23:53:14 mail kernel: DMA-API: 0000:06:00.0: entries: 31961
> ...
>
I put a printk as a third else case in sky2_tx_unmap. Looks like the
issue is that a large number (perhaps all) calls to sky2_tx_unmap have
re->flags set to neither TX_MAP_SINGLE or TX_MAP_PAGE. Thus the elements
are never being unmapped.
I suspect that the system collapses when using DMAR sooner than if not
using DMAR. Probably some hardware limitation on the number of mapped
elements that is less than the software limitation. I don't see at
present how a ring element can ever get to this code without re->flags
being set to one or the other.
^ permalink raw reply
* [PATCH 00/10] treewide: Fix format strings that misuse continuations
From: Joe Perches @ 2010-01-31 20:02 UTC (permalink / raw)
To: linux-kernel
Cc: Mike Frysinger, Benjamin Herrenschmidt, Paul Mackerras,
David S. Miller, James E.J. Bottomley, Sonic Zhang,
Greg Kroah-Hartman, Christoph Lameter, Pekka Enberg, Matt Mackall,
Liam Girdwood, Mark Brown, Jaroslav Kysela, Takashi Iwai,
uclinux-dist-devel, linuxppc-dev, linux-ide, netdev, linux-scsi,
devel, linux-mm, alsa-devel
Format strings that are continued with \ are frequently misused.
Change them to use mostly single line formats, some longer than 80 chars.
Fix a few miscellaneous typos at the same time.
Joe Perches (10):
arch/powerpc: Fix continuation line formats
arch/blackfin: Fix continuation line formats
drivers/ide: Fix continuation line formats
drivers/serial/bfin_5xx.c: Fix continuation line formats
drivers/scsi/arcmsr: Fix continuation line formats
drivers/staging: Fix continuation line formats
drivers/net/amd8111e.c: Fix continuation line formats
fs/proc/array.c: Fix continuation line formats
mm/slab.c: Fix continuation line formats
sound/soc/blackfin: Fix continuation line formats
arch/blackfin/mach-common/smp.c | 4 +-
arch/powerpc/kernel/nvram_64.c | 6 +-
arch/powerpc/platforms/pseries/hotplug-cpu.c | 8 ++--
arch/powerpc/platforms/pseries/smp.c | 4 +-
drivers/ide/au1xxx-ide.c | 4 +-
drivers/ide/pmac.c | 4 +-
drivers/net/amd8111e.c | 3 +-
drivers/scsi/arcmsr/arcmsr_hba.c | 49 +++++++++----------
drivers/serial/bfin_5xx.c | 6 +--
drivers/staging/dream/qdsp5/audio_mp3.c | 3 +-
.../rtl8187se/ieee80211/ieee80211_softmac_wx.c | 3 +-
drivers/staging/rtl8187se/r8180_core.c | 3 +-
drivers/staging/sep/sep_driver.c | 3 +-
fs/proc/array.c | 7 ++-
mm/slab.c | 4 +-
sound/soc/blackfin/bf5xx-ac97-pcm.c | 8 +--
sound/soc/blackfin/bf5xx-i2s-pcm.c | 3 +-
sound/soc/blackfin/bf5xx-tdm-pcm.c | 3 +-
18 files changed, 55 insertions(+), 70 deletions(-)
^ permalink raw reply
* [PATCH 07/10] drivers/net/amd8111e.c: Fix continuation line formats
From: Joe Perches @ 2010-01-31 20:02 UTC (permalink / raw)
To: linux-kernel; +Cc: netdev
In-Reply-To: <cover.1264967493.git.joe@perches.com>
String constants that are continued on subsequent lines with \
are not good.
Signed-off-by: Joe Perches <joe@perches.com>
---
drivers/net/amd8111e.c | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
diff --git a/drivers/net/amd8111e.c b/drivers/net/amd8111e.c
index 766aabf..c315480 100644
--- a/drivers/net/amd8111e.c
+++ b/drivers/net/amd8111e.c
@@ -1176,8 +1176,7 @@ static irqreturn_t amd8111e_interrupt(int irq, void *dev_id)
/* Schedule a polling routine */
__napi_schedule(&lp->napi);
} else if (intren0 & RINTEN0) {
- printk("************Driver bug! \
- interrupt while in poll\n");
+ printk("************Driver bug! interrupt while in poll\n");
/* Fix by disable receive interrupts */
writel(RINTEN0, mmio + INTEN0);
}
--
1.6.6.rc0.57.gad7a
^ permalink raw reply related
* Re: [PATCH] sky2: receive dma mapping error handling
From: Michael Breuer @ 2010-01-31 21:58 UTC (permalink / raw)
To: Jarek Poplawski
Cc: Stephen Hemminger, David Miller, akpm, flyboy, linux-kernel,
netdev, Michael Chan, Don Fry, Francois Romieu, Matt Carlson
In-Reply-To: <4B65D0F9.2020602@majjas.com>
On 1/31/2010 1:50 PM, Michael Breuer wrote:
> On 1/30/2010 11:55 PM, Michael Breuer wrote:
>> On 01/30/2010 07:34 PM, Jarek Poplawski wrote:
>>>
>>> Could you try the patch below to show maybe some other users of
>>> dma-debug entries?
>>>
>>> Jarek P.
>>> ---
>>>
>> With the default # entries & dma_debug_driver=sky2:
>>
>> 6:00 is eth0 & 4:00 is eth1.
>>
>> Jan 30 23:53:14 mail kernel: DMA-API: 0000:06:00.0: entries: 31961
>> ...
>>
> I put a printk as a third else case in sky2_tx_unmap. Looks like the
> issue is that a large number (perhaps all) calls to sky2_tx_unmap have
> re->flags set to neither TX_MAP_SINGLE or TX_MAP_PAGE. Thus the
> elements are never being unmapped.
>
> I suspect that the system collapses when using DMAR sooner than if not
> using DMAR. Probably some hardware limitation on the number of mapped
> elements that is less than the software limitation. I don't see at
> present how a ring element can ever get to this code without re->flags
> being set to one or the other.
>
>
Put some more debugging code in... re->flags is always NULL upon entry
to sky2_tx_unmap.
^ permalink raw reply
* Re: [PATCH] sky2: receive dma mapping error handling
From: Jarek Poplawski @ 2010-01-31 22:18 UTC (permalink / raw)
To: Michael Breuer
Cc: Stephen Hemminger, David Miller, akpm, flyboy, linux-kernel,
netdev, Michael Chan, Don Fry, Francois Romieu, Matt Carlson
In-Reply-To: <4B65FD12.7090101@majjas.com>
On Sun, Jan 31, 2010 at 04:58:42PM -0500, Michael Breuer wrote:
> On 1/31/2010 1:50 PM, Michael Breuer wrote:
> >On 1/30/2010 11:55 PM, Michael Breuer wrote:
> >>On 01/30/2010 07:34 PM, Jarek Poplawski wrote:
> >>>
> >>>Could you try the patch below to show maybe some other users of
> >>>dma-debug entries?
> >>>
> >>>Jarek P.
> >>>---
> >>>
> >>With the default # entries & dma_debug_driver=sky2:
> >>
> >>6:00 is eth0 & 4:00 is eth1.
> >>
> >>Jan 30 23:53:14 mail kernel: DMA-API: 0000:06:00.0: entries: 31961
> >>...
> >>
> >I put a printk as a third else case in sky2_tx_unmap. Looks like
> >the issue is that a large number (perhaps all) calls to
> >sky2_tx_unmap have re->flags set to neither TX_MAP_SINGLE or
> >TX_MAP_PAGE. Thus the elements are never being unmapped.
> >
> >I suspect that the system collapses when using DMAR sooner than if
> >not using DMAR. Probably some hardware limitation on the number of
> >mapped elements that is less than the software limitation. I don't
> >see at present how a ring element can ever get to this code
> >without re->flags being set to one or the other.
> >
> >
> Put some more debugging code in... re->flags is always NULL upon
> entry to sky2_tx_unmap.
>
Yes, good point! Could you try if this patch can fix it. (not compiled)
Thanks,
Jarek P.
---
drivers/net/sky2.c | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index d760650..3437917 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -1025,9 +1025,10 @@ static void sky2_prefetch_init(struct sky2_hw *hw, u32 qaddr,
static inline struct sky2_tx_le *get_tx_le(struct sky2_port *sky2, u16 *slot)
{
struct sky2_tx_le *le = sky2->tx_le + *slot;
- struct tx_ring_info *re = sky2->tx_ring + *slot;
+ struct tx_ring_info *re;
*slot = RING_NEXT(*slot, sky2->tx_ring_size);
+ re = sky2->tx_ring + *slot;
re->flags = 0;
re->skb = NULL;
le->ctrl = 0;
@@ -1036,13 +1037,16 @@ static inline struct sky2_tx_le *get_tx_le(struct sky2_port *sky2, u16 *slot)
static void tx_init(struct sky2_port *sky2)
{
- struct sky2_tx_le *le;
+ struct sky2_tx_le *le = sky2->tx_le;
+ struct tx_ring_info *re = sky2->tx_ring;
sky2->tx_prod = sky2->tx_cons = 0;
sky2->tx_tcpsum = 0;
sky2->tx_last_mss = 0;
- le = get_tx_le(sky2, &sky2->tx_prod);
+ re->flags = 0;
+ re->skb = NULL;
+ le->ctrl = 0;
le->addr = 0;
le->opcode = OP_ADDR64 | HW_OWNER;
sky2->tx_last_upper = 0;
^ permalink raw reply related
* Re: [PATCH] sky2: receive dma mapping error handling
From: Jarek Poplawski @ 2010-01-31 22:25 UTC (permalink / raw)
To: Michael Breuer
Cc: Stephen Hemminger, David Miller, akpm, flyboy, linux-kernel,
netdev, Michael Chan, Don Fry, Francois Romieu, Matt Carlson
In-Reply-To: <4B650465.7010503@majjas.com>
On Sat, Jan 30, 2010 at 11:17:41PM -0500, Michael Breuer wrote:
> On 01/30/2010 07:34 PM, Jarek Poplawski wrote:
> >On Sat, Jan 30, 2010 at 11:31:48AM -0500, Michael Breuer wrote:
> >>Jan 29 17:13:11 mail kernel: sky2 eth0: rx error, status 0x6230010
> >>length 1518
> >>Jan 29 17:13:11 mail kernel: sky2 eth0: rx error, status 0x7f40010
> >>length 1518
> >These are length errors, but status shows more than 1518, e.g. 2036
> >here, unless I miss something. Please, don't use jumbo frames in your
> >network until we fully debug it for regular frames (Stephen admitted
> >sky2 jumbo might be broken).
> MTU was 1500 - not using jumbo frames as they don't work.
Do you mean no NIC in your network could have sent such frames?
Jarek P.
^ permalink raw reply
* Re: 2.6.32: padlock_sha1 and hmac broken?
From: Herbert Xu @ 2010-01-31 23:18 UTC (permalink / raw)
To: Wolfgang Walter
Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
Linux Crypto Mailing List
In-Reply-To: <201001311437.55534.wolfgang.walter@stwm.de>
On Sun, Jan 31, 2010 at 02:37:55PM +0100, Wolfgang Walter wrote:
>
> This patch works. /proc/crypto shows
>
> name : authenc(hmac(sha1),cbc(aes))
> driver : authenc(hmac(sha1-padlock),cbc-aes-padlock)
> module : kernel
> priority : 4300
> refcnt : 85
> selftest : passed
> type : aead
> async : yes
> blocksize : 16
> ivsize : 16
> maxauthsize : 20
> geniv : <built-in>
Thank you for checking!
I've added this patch into crypto-2.6 and will push to stable
when it is merged upstream.
commit 137bb21e8f03758eeffb464a5033338f34446b4e
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date: Mon Feb 1 09:17:56 2010 +1100
crypto: padlock-sha - Add import/export support
As the padlock driver for SHA uses a software fallback to perform
partial hashing, it must implement custom import/export functions.
Otherwise hmac which depends on import/export for prehashing will
not work with padlock-sha.
Reported-by: Wolfgang Walter <wolfgang.walter@stwm.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
diff --git a/drivers/crypto/padlock-sha.c b/drivers/crypto/padlock-sha.c
index 0af8057..d3a27e0 100644
--- a/drivers/crypto/padlock-sha.c
+++ b/drivers/crypto/padlock-sha.c
@@ -57,6 +57,23 @@ static int padlock_sha_update(struct shash_desc *desc,
return crypto_shash_update(&dctx->fallback, data, length);
}
+static int padlock_sha_export(struct shash_desc *desc, void *out)
+{
+ struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
+
+ return crypto_shash_export(&dctx->fallback, out);
+}
+
+static int padlock_sha_import(struct shash_desc *desc, const void *in)
+{
+ struct padlock_sha_desc *dctx = shash_desc_ctx(desc);
+ struct padlock_sha_ctx *ctx = crypto_shash_ctx(desc->tfm);
+
+ dctx->fallback.tfm = ctx->fallback;
+ dctx->fallback.flags = desc->flags & CRYPTO_TFM_REQ_MAY_SLEEP;
+ return crypto_shash_import(&dctx->fallback, in);
+}
+
static inline void padlock_output_block(uint32_t *src,
uint32_t *dst, size_t count)
{
@@ -235,7 +252,10 @@ static struct shash_alg sha1_alg = {
.update = padlock_sha_update,
.finup = padlock_sha1_finup,
.final = padlock_sha1_final,
+ .export = padlock_sha_export,
+ .import = padlock_sha_import,
.descsize = sizeof(struct padlock_sha_desc),
+ .statesize = sizeof(struct sha1_state),
.base = {
.cra_name = "sha1",
.cra_driver_name = "sha1-padlock",
@@ -256,7 +276,10 @@ static struct shash_alg sha256_alg = {
.update = padlock_sha_update,
.finup = padlock_sha256_finup,
.final = padlock_sha256_final,
+ .export = padlock_sha_export,
+ .import = padlock_sha_import,
.descsize = sizeof(struct padlock_sha_desc),
+ .statesize = sizeof(struct sha256_state),
.base = {
.cra_name = "sha256",
.cra_driver_name = "sha256-padlock",
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply related
* Re: macvlan on top mlx4 fails
From: Daniel Lezcano @ 2010-01-31 23:33 UTC (permalink / raw)
To: Patrick McHardy; +Cc: Linux Netdev List
In-Reply-To: <4B62F8AA.5080400@trash.net>
Patrick McHardy wrote:
> Daniel Lezcano wrote:
>> Patrick McHardy wrote:
>>> Daniel Lezcano wrote:
>>>> Hi all,
>>>>
>>>> I am trying to have a macvlan on top of an ethernet driver infiniband
>>>> emulation communicating with the macvlan on anoher host with the same
>>>> configuration. But I am not able to ping them through the ip address
>>>> assigned to each macvlan.
>>>>
>>>> On the host1 (s1):
>>>>
>>>> ...
>>>> s2:~ # ping 1.2.3.5
>>>> PING 1.2.3.5 (1.2.3.5) 56(84) bytes of data.
>>>> From 1.2.3.4: icmp_seq=2 Destination Host Unreachable
>>>> From 1.2.3.4 icmp_seq=2 Destination Host Unreachable
>>>> From 1.2.3.4 icmp_seq=3 Destination Host Unreachable
>>>> From 1.2.3.4 icmp_seq=4 Destination Host Unreachable
>>>> ^C
>>>> --- 1.2.3.5 ping statistics ---
>>>> 5 packets transmitted, 0 received, +4 errors, 100% packet loss, time
>>>> 4010ms
>>>> , pipe 3
>>>>
>>>> The arp cache:
>>>>
>>>> Address HWtype HWaddress Flags Mask Iface
>>>> 1.2.3.5 (incomplete) mc1
>>>>
>>>>
>>>> When doing a tcpdump on s2 host, I have arp who-as request:
>>>>
>>>>
>>>> 09:14:20.764389 arp who-has 1.2.3.5 tell 1.2.3.4
>>>> 09:14:20.764394 arp who-has 1.2.3.5 tell 1.2.3.4
>>>> 09:14:20.764427 arp who-has 1.2.3.5 tell 1.2.3.4
>>>>
>>>>
>>>> But doing the same tcpdump on the s1 host I don't see there arp request.
>>>>
>>>> The output of lscpi:
>>>>
>>>> s2:~ # lspci
>>>> 0000:00:01.0 RAID bus controller: IBM Obsidian chipset SCSI controller
>>>> (rev 02)
>>>> 0001:00:01.0 USB Controller: NEC Corporation USB (rev 43)
>>>> 0001:00:01.1 USB Controller: NEC Corporation USB (rev 43)
>>>> 0001:00:01.2 USB Controller: NEC Corporation USB 2.0 (rev 04)
>>>> 0002:00:01.0 VGA compatible controller: ATI Technologies Inc ES1000 (rev
>>>> 02)
>>>> 0003:01:00.0 InfiniBand: Mellanox Technologies MT25418 [ConnectX IB DDR,
>>>> PCIe 2.0 2.5GT/s] (rev a0)
>>>>
>>>>
>>>> I am a newbie on infiniband so I was wondering if I did something wrong
>>>> or if this is unsupported.
>>> Well, I don't know much about infiniband myself. On which device
>>> are you running tcpdump?
>> I did:
>>
>> tcpdump -i any arp dst or src 1.2.3.5
>>
>> In case its the eth-device, does running
>>> tcpdump directly on top of the ib-devices make any difference?
>> Yes, right. The arp request are seen on eth1 but not on the ib.
>
> That would be fine unless I'm misunderstanding your setup - with
> macvlan bound to eth1 they should be visible on both eth1 any the
> macvlan device.
>
> I'm guessing that you have a filter misconfiguration. You need
> arp_ignore=1 and possibly rp_filter=0.
>
>>> Perhaps its not properly propagating the promiscous mode flag or
>>> the secondary unicast addresses.
>> Is it possible to check that ?
>
> If the devices are not already in promiscous mode, you should see
> "device XXX entered promiscuous mode" for both devices in the
> ring buffer.
Hi patrick,
finally I was puzzled with the nic on the machines, they are not
inifinband emulated ethernet but powerpc lpar virtual ethernet card.
It seems they drop the packets when the mac address is not the one
assigned to the virtual ethernet :(
I am afraid macvlan neither veth or any virtual interface with its own
mac address will be able to communicate between lpars. In other words,
the lpar seems to be incompatible with the container technology today.
Thanks for your help.
-- Daniel
^ permalink raw reply
* Re: [PATCH] sky2: receive dma mapping error handling
From: Michael Breuer @ 2010-01-31 23:58 UTC (permalink / raw)
To: Jarek Poplawski
Cc: Stephen Hemminger, David Miller, akpm, flyboy, linux-kernel,
netdev, Michael Chan, Don Fry, Francois Romieu, Matt Carlson
In-Reply-To: <20100131222504.GB3317@del.dom.local>
On 1/31/2010 5:25 PM, Jarek Poplawski wrote:
> On Sat, Jan 30, 2010 at 11:17:41PM -0500, Michael Breuer wrote:
>
>> On 01/30/2010 07:34 PM, Jarek Poplawski wrote:
>>
>>> On Sat, Jan 30, 2010 at 11:31:48AM -0500, Michael Breuer wrote:
>>>
>>>> Jan 29 17:13:11 mail kernel: sky2 eth0: rx error, status 0x6230010
>>>> length 1518
>>>> Jan 29 17:13:11 mail kernel: sky2 eth0: rx error, status 0x7f40010
>>>> length 1518
>>>>
>>> These are length errors, but status shows more than 1518, e.g. 2036
>>> here, unless I miss something. Please, don't use jumbo frames in your
>>> network until we fully debug it for regular frames (Stephen admitted
>>> sky2 jumbo might be broken).
>>>
>> MTU was 1500 - not using jumbo frames as they don't work.
>>
> Do you mean no NIC in your network could have sent such frames?
>
> Jarek P.
>
Well... There's only one possible source... and if there were it would
have been a Win7 bug :) Regardless, sky2 shouldn't be sensitive to rogue
external network stuff.
^ permalink raw reply
* 2.6.33-rc6: Reported regressions from 2.6.32
From: Rafael J. Wysocki @ 2010-02-01 0:18 UTC (permalink / raw)
To: Linux Kernel Mailing List
Cc: Adrian Bunk, Andrew Morton, Linus Torvalds, Natalie Protasevich,
Kernel Testers List, Network Development, Linux ACPI,
Linux PM List, Linux SCSI List, Linux Wireless List, DRI
This message contains a list of some regressions from 2.6.32, for which there
are no fixes in the mainline I know of. If any of them have been fixed already,
please let me know.
If you know of any other unresolved regressions from 2.6.32, please let me know
either and I'll add them to the list. Also, please let me know if any of the
entries below are invalid.
Each entry from the list will be sent additionally in an automatic reply to
this message with CCs to the people involved in reporting and handling the
issue.
Listed regressions statistics:
Date Total Pending Unresolved
----------------------------------------
2010-02-01 85 26 21
2010-01-24 75 29 23
2010-01-10 55 33 21
2009-12-29 36 34 27
Unresolved regressions
----------------------
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15202
Subject : lockdep warning during elevator_switch
Submitter : Hugh Dickins <hugh.dickins-IWqWACnzNjwqdlJmJB21zg@public.gmane.org>
Date : 2010-01-31 23:55 (1 days old)
References : http://marc.info/?l=linux-kernel&m=126498212613051&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15200
Subject : NFS problems in 2.6.33-rc6: Unknown error 526
Submitter : J.A. Magallón <jamagallon-sh/6fXdz2Rs@public.gmane.org>
Date : 2010-01-31 22:46 (1 days old)
References : http://marc.info/?l=linux-kernel&m=126497800408928&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15199
Subject : sata_nv and no /dev files
Submitter : Bartłomiej Zimoń <uzi18-h7QdYz1kt/Q@public.gmane.org>
Date : 2010-01-31 23:45 (1 days old)
References : http://marc.info/?l=linux-kernel&m=126498153112488&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15196
Subject : kmem_cache_create: duplicate cache ccid2_h
Submitter : Heinz Diehl <htd-HjJ2MNWy62to6+H+lsi3Gti2O/JbrIOy@public.gmane.org>
Date : 2010-01-30 18:33 (2 days old)
References : http://marc.info/?l=linux-kernel&m=126487640324942&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15192
Subject : netperf ~50% regression with 2.6.33-rc1, bisect to 1b9508f
Submitter : Lin Ming <ming.m.lin-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Date : 2010-01-25 10:03 (7 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1b9508f6831e10d53256825de8904caa22d1ca2c
References : http://marc.info/?l=linux-kernel&m=126441481427331&w=4
Handled-By : Mike Galbraith <efault-Mmb7MZpHnFY@public.gmane.org>
Peter Zijlstra <peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15144
Subject : HDA Intel Audio hang on boot
Submitter : Sid Boyce <sboyce-QgLWrMLu8clzjhtm8Ag3mw@public.gmane.org>
Date : 2010-01-15 1:24 (17 days old)
References : http://marc.info/?l=linux-kernel&m=126351866722507&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15142
Subject : "INFO: possible circular locking dependency detected"
Submitter : Matti Aarnio <matti.aarnio--kernel-bugzilla-VYF+RMHuKCpAfugRpC6u6w@public.gmane.org>
Date : 2010-01-25 13:38 (7 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15139
Subject : e1000: transmit queue 0 timed out
Submitter : Alexander Beregalov <a.beregalov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date : 2010-01-23 15:37 (9 days old)
References : http://marc.info/?l=linux-netdev&m=126426149306083&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15138
Subject : evdev regression on macbook
Submitter : Guillaume Chazarain <guichaz-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date : 2010-01-23 18:53 (9 days old)
References : http://marc.info/?l=linux-kernel&m=126427286219235&w=4
Handled-By : Dmitry Torokhov <dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15125
Subject : hung task - jbd2/dm-1-8 (during raid rebuild)
Submitter : Michael Breuer <mbreuer-P//MSfjsEjDQT0dZR+AlfA@public.gmane.org>
Date : 2010-01-10 21:47 (22 days old)
References : http://marc.info/?l=linux-kernel&m=126316012025978&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15124
Subject : PCI host bridge windows ignored (works with pci=use_crs)
Submitter : Jeff Garrett <jeff-184d8XiO+QJg9hUCZPvPmw@public.gmane.org>
Date : 2010-01-13 5:37 (19 days old)
References : http://marc.info/?l=linux-kernel&m=126336296600307&w=4
Handled-By : Yinghai Lu <yinghai-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Bjorn Helgaas <bjorn.helgaas-VXdhtT5mjnY@public.gmane.org>
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15119
Subject : iwl_bg_scan_completed: WARN on scan complete
Submitter : Alex Zhavnerchik <alex.vizor-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date : 2010-01-24 12:27 (8 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15114
Subject : X.org hang with [drm:i915_gem_do_execbuffer] *ERROR* in dmesg
Submitter : Matej Laitl <strohel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date : 2010-01-23 19:54 (9 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15076
Subject : System panic under load with clockevents_program_event
Submitter : okias <d.okias-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date : 2010-01-17 13:03 (15 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15043
Subject : Display goes off with i915.powersave=1 after suspend-resume
Submitter : Soeren Sonnenburg <sonne-8fiUuRrzOP0dnm+yROfE0A@public.gmane.org>
Date : 2010-01-10 20:09 (22 days old)
References : http://marc.info/?l=linux-kernel&m=126315457519505&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15036
Subject : soft lockup in dmesg after suspend/resume
Submitter : ykzhao <yakui.zhao-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Date : 2010-01-04 5:36 (28 days old)
References : http://marc.info/?l=linux-kernel&m=126258356202722&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15025
Subject : Oops in ext4 driver
Submitter : Steinar H. Gunderson <sgunderson-jG/AHqQBv7lBDgjK7y7TUQ@public.gmane.org>
Date : 2010-01-10 13:09 (22 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14999
Subject : possible circular locking dependency detected in rfkill at suspend
Submitter : Christian Casteyde <casteyde.christian-GANU6spQydw@public.gmane.org>
Date : 2010-01-06 21:52 (26 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14950
Subject : tbench regression with 2.6.33-rc1
Submitter : Lin Ming <ming.m.lin-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Date : 2009-12-25 11:11 (38 days old)
References : http://marc.info/?l=linux-kernel&m=126174044213172&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14937
Subject : WARNING: at kernel/lockdep.c:2830
Submitter : Grant Wilson <grant.wilson-1HOZaDBbGgxaa/9Udqfwiw@public.gmane.org>
Date : 2009-12-27 13:35 (36 days old)
References : http://marc.info/?l=linux-kernel&m=126192220404829&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14792
Subject : Misdetection of the TV output
Submitter : Santi <santi-wpr36wD7VxHR7s880joybQ@public.gmane.org>
Date : 2009-12-12 13:28 (51 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=27dfaf4f5825a119305db1bc63bef30ed400e376
Handled-By : Zhao Yakui <yakui.zhao-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Regressions with patches
------------------------
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15198
Subject : Radeon KMS regression
Submitter : Kevin Winchester <kjwinchester-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date : 2010-01-30 17:18 (2 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=42590a75019a50012f25a962246498dead428433
References : http://marc.info/?l=linux-kernel&m=126487191019612&w=4
Handled-By : FUJITA Tomonori <fujita.tomonori-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
Patch : http://patchwork.kernel.org/patch/75023/
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15195
Subject : kernel BUG at include/net/netns/generic.h:41, pfkey_create+0x36/0x18b [af_key]
Submitter : Luca Tettamanti <kronos.it-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Date : 2010-01-30 13:23 (2 days old)
References : http://marc.info/?l=linux-netdev&m=126485785004775&w=4
Handled-By : Alexey Dobriyan <adobriyan-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Patch : http://patchwork.kernel.org/patch/75891/
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15039
Subject : leds_alix2: can't allocate I/O for GPIO
Submitter : Arnd Hannemann <hannemann-JasiFyN5vQG662+jY7v6MhvVK+yQ3ZXh@public.gmane.org>
Date : 2010-01-07 10:26 (25 days old)
References : http://marc.info/?l=linux-kernel&m=126286001106257&w=4
Handled-By : Daniel Mack <daniel-rDUAYElUppE@public.gmane.org>
Patch : http://patchwork.kernel.org/patch/72006/
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14949
Subject : drm_vm.c:drm_mmap: possible circular locking dependency detected
Submitter : Borislav Petkov <petkovbb-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
Date : 2009-12-26 9:45 (37 days old)
References : http://marc.info/?l=linux-kernel&m=126182073616279&w=4
Handled-By : Eric W. Biederman <ebiederm-BGArkANP9klv6pq1l3V1OdBPR1lH4CV8@public.gmane.org>
Patch : http://patchwork.kernel.org/patch/70461/
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14791
Subject : Something has been broken in the network stack this week
Submitter : Delete This Account <speedyboyinovator-PkbjNfxxIARBDgjK7y7TUQ@public.gmane.org>
Date : 2009-12-12 13:06 (51 days old)
Handled-By : Ben Hutchings <ben-/+tVBieCtBitmTQ+vhA3Yw@public.gmane.org>
Patch : http://patchwork.kernel.org/patch/72073/
For details, please visit the bug entries and follow the links given in
references.
As you can see, there is a Bugzilla entry for each of the listed regressions.
There also is a Bugzilla entry used for tracking the regressions from 2.6.32,
unresolved as well as resolved, at:
http://bugzilla.kernel.org/show_bug.cgi?id=14885
Please let me know if there are any Bugzilla entries that should be added to
the list in there.
Thanks,
Rafael
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [PATCH] sky2: receive dma mapping error handling
From: Michael Breuer @ 2010-02-01 0:19 UTC (permalink / raw)
To: Jarek Poplawski
Cc: Stephen Hemminger, David Miller, akpm, flyboy, linux-kernel,
netdev, Michael Chan, Don Fry, Francois Romieu, Matt Carlson
In-Reply-To: <20100131221835.GA3317@del.dom.local>
On 1/31/2010 5:18 PM, Jarek Poplawski wrote:
> On Sun, Jan 31, 2010 at 04:58:42PM -0500, Michael Breuer wrote:
>
>> On 1/31/2010 1:50 PM, Michael Breuer wrote:
>>
>>> On 1/30/2010 11:55 PM, Michael Breuer wrote:
>>>
>>>> On 01/30/2010 07:34 PM, Jarek Poplawski wrote:
>>>>
>>>>> Could you try the patch below to show maybe some other users of
>>>>> dma-debug entries?
>>>>>
>>>>> Jarek P.
>>>>> ---
>>>>>
>>>>>
>>>> With the default # entries& dma_debug_driver=sky2:
>>>>
>>>> 6:00 is eth0& 4:00 is eth1.
>>>>
>>>> Jan 30 23:53:14 mail kernel: DMA-API: 0000:06:00.0: entries: 31961
>>>> ...
>>>>
>>>>
>>> I put a printk as a third else case in sky2_tx_unmap. Looks like
>>> the issue is that a large number (perhaps all) calls to
>>> sky2_tx_unmap have re->flags set to neither TX_MAP_SINGLE or
>>> TX_MAP_PAGE. Thus the elements are never being unmapped.
>>>
>>> I suspect that the system collapses when using DMAR sooner than if
>>> not using DMAR. Probably some hardware limitation on the number of
>>> mapped elements that is less than the software limitation. I don't
>>> see at present how a ring element can ever get to this code
>>> without re->flags being set to one or the other.
>>>
>>>
>>>
>> Put some more debugging code in... re->flags is always NULL upon
>> entry to sky2_tx_unmap.
>>
>>
> Yes, good point! Could you try if this patch can fix it. (not compiled)
>
> Thanks,
> Jarek P.
> ---
>
> drivers/net/sky2.c | 10 +++++++---
> 1 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
> index d760650..3437917 100644
> --- a/drivers/net/sky2.c
> +++ b/drivers/net/sky2.c
> @@ -1025,9 +1025,10 @@ static void sky2_prefetch_init(struct sky2_hw *hw, u32 qaddr,
> static inline struct sky2_tx_le *get_tx_le(struct sky2_port *sky2, u16 *slot)
> {
> struct sky2_tx_le *le = sky2->tx_le + *slot;
> - struct tx_ring_info *re = sky2->tx_ring + *slot;
> + struct tx_ring_info *re;
>
> *slot = RING_NEXT(*slot, sky2->tx_ring_size);
> + re = sky2->tx_ring + *slot;
> re->flags = 0;
> re->skb = NULL;
> le->ctrl = 0;
> @@ -1036,13 +1037,16 @@ static inline struct sky2_tx_le *get_tx_le(struct sky2_port *sky2, u16 *slot)
>
> static void tx_init(struct sky2_port *sky2)
> {
> - struct sky2_tx_le *le;
> + struct sky2_tx_le *le = sky2->tx_le;
> + struct tx_ring_info *re = sky2->tx_ring;
>
> sky2->tx_prod = sky2->tx_cons = 0;
> sky2->tx_tcpsum = 0;
> sky2->tx_last_mss = 0;
>
> - le = get_tx_le(sky2,&sky2->tx_prod);
> + re->flags = 0;
> + re->skb = NULL;
> + le->ctrl = 0;
> le->addr = 0;
> le->opcode = OP_ADDR64 | HW_OWNER;
> sky2->tx_last_upper = 0;
>
Ok- solves the dma-debug issue - i.e., elements are now being unmapped.
Will leave up and hit with traffic unless a crash occurs. If I hit
something unrelated I'll backport to 2.6.32.7 and try that for a while.
I do think it's plausible that the dma errors after (during) load were
due to hardware limitations on the number of mapped entries (haven't
researched what that limit was). I would also assume that the sw map
would also have failed eventually.
I'd suggest that regardless of whether this patch solves my crash that
it ought to be backported as it seems unlikely that any machine would be
able to survive for long without the tx entries being unmapped.
^ permalink raw reply
* 2.6.33-rc6: Reported regressions 2.6.31 -> 2.6.32
From: Rafael J. Wysocki @ 2010-02-01 0:38 UTC (permalink / raw)
To: Linux Kernel Mailing List
Cc: Andrew Morton, Linus Torvalds, Natalie Protasevich,
Kernel Testers List, Network Development, Linux ACPI,
Linux PM List, Linux SCSI List, Linux Wireless List, DRI
[NOTE:
* Still growing faster than we're fixing them.]
This message contains a list of some regressions introduced between 2.6.31 and
2.6.32, for which there are no fixes in the mainline I know of. If any of them
have been fixed already, please let me know.
If you know of any other unresolved regressions introduced between 2.6.31
and 2.6.32, please let me know either and I'll add them to the list.
Also, please let me know if any of the entries below are invalid.
Each entry from the list will be sent additionally in an automatic reply to
this message with CCs to the people involved in reporting and handling the
issue.
Listed regressions statistics:
Date Total Pending Unresolved
----------------------------------------
2010-02-01 149 50 45
2010-01-24 140 45 43
2010-01-10 130 44 40
2009-12-29 124 60 57
2009-11-21 86 29 25
2009-11-16 84 46 41
2009-10-26 66 42 37
2009-10-12 48 31 27
2009-10-02 22 15 9
Unresolved regressions
----------------------
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15193
Subject : kswapd continuously active
Submitter : Jan Engelhardt <jengelh@medozas.de>
Date : 2010-01-22 23 (10 days old)
References : http://marc.info/?l=linux-kernel&m=126420434519039&w=4
Handled-By : Jens Axboe <jens.axboe@oracle.com>
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15158
Subject : oops related to i915_gem_object_save_bit_17_swizzle
Submitter : Werner Lemberg <wl@gnu.org>
Date : 2010-01-28 08:26 (4 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15156
Subject : 2.6.32.6 hang at boot with ati x1600
Submitter : Alexey Kuznetsov <ak@axet.ru>
Date : 2010-01-28 05:02 (4 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15127
Subject : Bluetooth: sleeping function called from invalid context
Submitter : David John <davidjon@xenontk.org>
Date : 2010-01-12 9:19 (20 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9e726b17422bade75fba94e625cd35fd1353e682
References : http://marc.info/?l=linux-kernel&m=126328727021949&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15108
Subject : Blank screen with KMS enabled (on clevo M5xN laptop)
Submitter : Jérémy Lal <kapouer@melix.org>
Date : 2010-01-22 20:30 (10 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15100
Subject : X11 is black after resume from s2ram if my T400 was previous in docking station before
Submitter : Toralf Förster <toralf.foerster@gmx.de>
Date : 2010-01-21 08:56 (11 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c1c7af60892070e4b82ad63bbfb95ae745056de0
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15096
Subject : Resume lock up -- bisected, commit 3a1151e3f124fd1a2c54b8153f510f1a7c715369
Submitter : Rafał Miłecki <zajec5@gmail.com>
Date : 2010-01-20 23:15 (12 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3a1151e3f124fd1a2c54b8153f510f1a7c715369
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15071
Subject : IBM/Lenovo Trackpoint speed, sensitivity reset after suspend
Submitter : Marten Vance <kernel@mv.so36.net>
Date : 2010-01-16 16:19 (16 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15042
Subject : socket(PF_INET6 hangs when ipv6 not yet initialized
Submitter : Marc Haber <mh+linux-kernel@zugschlus.de>
Date : 2010-01-10 14:28 (22 days old)
References : http://marc.info/?l=linux-kernel&m=126313553029280&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15021
Subject : agpgart sometimes fails to initialize sometimes
Submitter : Maciej Piechotka <uzytkownik2@gmail.com>
Date : 2010-01-09 23:31 (23 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15015
Subject : blank screen at random times in laptop when sitting idle
Submitter : Jithin Emmanuel <jithin1987@gmail.com>
Date : 2010-01-09 16:48 (23 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15004
Subject : i915: *ERROR* Execbuf while wedged
Submitter : tomas m <tmezzadra@gmail.com>
Date : 2010-01-07 18:53 (25 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15000
Subject : Thinkpad dock button no longer works
Submitter : Paul Martin <pm@debian.org>
Date : 2010-01-07 02:11 (25 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14998
Subject : Caught 32-bit read from uninitialized memory in acpi_system_read_event -- 2.6.31 regression
Submitter : Christian Casteyde <casteyde.christian@free.fr>
Date : 2010-01-06 21:40 (26 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=eca6f534e61919b28fb21aafbd1c2983deae75be
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14997
Subject : Closing and re-opening the lid does not reactivate the backlight
Submitter : o. meijer <meijer.o@gmail.com>
Date : 2010-01-06 15:38 (26 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14943
Subject : nfs regression?
Submitter : Nikola Ciprich <extmaillist@linuxbox.cz>
Date : 2009-12-28 12:10 (35 days old)
References : http://marc.info/?l=linux-kernel&m=126200276223524&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14939
Subject : drm: random hang with i915
Submitter : Arnd Bergmann <arnd@arndb.de>
Date : 2009-12-07 17:30 (56 days old)
References : http://marc.info/?l=linux-kernel&m=126020704125723&w=4
Handled-By : Jesse Barnes <jbarnes@virtuousgeek.org>
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14922
Subject : 2.6.32 seemed to have broken nVidia MCP7A sata controller
Submitter : Mike Cui <cuicui@gmail.com>
Date : 2009-12-19 6:13 (44 days old)
References : http://marc.info/?l=linux-ide&m=126120323407742&w=4
Handled-By : Jeff Garzik <jeff@garzik.org>
Robert Hancock <hancockrwd@gmail.com>
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14898
Subject : ksoftirqd problem
Submitter : Nico <segfault2@hotmail.com>
Date : 2009-12-13 19:05 (50 days old)
References : http://marc.info/?l=linux-kernel&m=126073114325690&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14895
Subject : BUG in kernel 2.6.32 when using luks encrypted root and RAID0..
Submitter : r4 <mk_4@centrum.cz>
Date : 2009-12-03 18:24 (60 days old)
References : http://marc.info/?l=linux-kernel&m=125986664904751&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14894
Subject : pohmelfs: NULL pointer dereference
Submitter : Alexander Beregalov <a.beregalov@gmail.com>
Date : 2009-12-02 1:11 (61 days old)
References : http://marc.info/?l=linux-kernel&m=125971633107940&w=4
Handled-By : Evgeniy Polyakov <zbr@ioremap.net>
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14891
Subject : Deadlock regression related to NFS root
Submitter : Stephen R. van den Berg <srb@cuci.nl>
Date : 2009-11-24 0:24 (69 days old)
References : http://marc.info/?l=linux-kernel&m=125902279909452&w=4
Handled-By : Trond Myklebust <Trond.Myklebust@netapp.com>
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14886
Subject : Asus P2B-DS not detected as SMP moterboard
Submitter : Lorenzo Buzzi <flinco@libero.it>
Date : 2009-12-27 17:20 (36 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e5b8fc6ac158f65598f58dba2c0d52ba3b412f52
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14868
Subject : flood of "don't try to register things with the same name in the same directory." on upgrade to 2.6.32
Submitter : Rich Ercolani <rercola@acm.jhu.edu>
Date : 2009-12-24 02:44 (39 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14817
Subject : When is system under load, then freeze/HD fail
Submitter : okias <d.okias@gmail.com>
Date : 2009-12-15 11:12 (48 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14783
Subject : Unhandled IRQ on Thinkpad R61i: "irq 16: nobody cared"
Submitter : Stefan Zegenhagen <sz@emlix.com>
Date : 2009-12-10 19:14 (53 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14782
Subject : Suspend hangs Lenovo SL300 after gdm login
Submitter : Gary Trakhman <gary.trakhman@gmail.com>
Date : 2009-12-10 18:53 (53 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=03ba3782e8dcc5b0e1efe440d33084f066e38cae
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14748
Subject : e1000e NIC not working after reboot
Submitter : Maciek Sitarz <macieks@freesco.pl>
Date : 2009-12-06 13:04 (57 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14742
Subject : 2.6.32 new menu idle governor causes very high CPU temp
Submitter : <akwatts@ymail.com>
Date : 2009-12-05 17:24 (58 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14695
Subject : regression in karmic thermal control
Submitter : Bugie <public@bugie.de>
Date : 2009-11-26 08:45 (67 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14670
Subject : i915: playing video via XVideo extension makes the screen flicker
Submitter : Thomas Meyer <thomas@m3y3r.de>
Date : 2009-11-23 13:15 (70 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b42d4c5c6a872815d711e5d51a600f5122c38eee
References : http://lkml.org/lkml/2010/1/11/150
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14668
Subject : Resume from disk hangs in acpi_ex_acquire_global_lock
Submitter : Maxim Levitsky <maximlevitsky@gmail.com>
Date : 2009-11-22 21:25 (71 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14667
Subject : bisected 2.6.32 EC regression - Temperatures not correctly detected after suspend - Dell Studio XPS 16 laptop
Submitter : Federico Chiacchiaretta <federico.chia@gmail.com>
Date : 2009-11-22 20:42 (71 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6a63b06f3c494cc87eade97f081300bda60acec7
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14657
Subject : perf subsystem breakage in 2.6.32-rc7
Submitter : Arjan van de Ven <arjan@infradead.org>
Date : 2009-11-19 19:50 (74 days old)
References : http://marc.info/?l=linux-kernel&m=125866013419738&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14656
Subject : Oops at __rmqueue+0x98 with 2.6.32-rc6
Submitter : Lucas C. Villa Real <lucasvr@gobolinux.org>
Date : 2009-11-19 3:48 (74 days old)
References : http://marc.info/?l=linux-kernel&m=125860255229092&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14624
Subject : ath9k: BUG kmalloc-8192: Poison overwritten
Submitter : Miles Lane <miles.lane@gmail.com>
Date : 2009-11-12 4:58 (81 days old)
References : http://marc.info/?l=linux-kernel&m=125800196520396&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14621
Subject : specjbb2005 and aim7 regression with 2.6.32-rc kernels
Submitter : Zhang, Yanmin <yanmin_zhang@linux.intel.com>
Date : 2009-11-06 7:38 (87 days old)
References : http://marc.info/?l=linux-kernel&m=125749310413174&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14504
Subject : intermittent hibernation problem again
Submitter : Ferenc Wágner <wferi@niif.hu>
Date : 2009-10-28 23:49 (96 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14487
Subject : PANIC: early exception 08 rip 246:10 error ffffffff810251b5 cr2 0
Submitter : Justin P. Mattock <justinmattock@gmail.com>
Date : 2009-10-23 16:45 (101 days old)
References : http://lkml.org/lkml/2009/10/23/252
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14482
Subject : kernel BUG at fs/dcache.c:670 +lvm +md +ext3
Submitter : Alexander Clouter <alex@digriz.org.uk>
Date : 2009-10-23 10:30 (101 days old)
References : http://lkml.org/lkml/2009/10/23/50
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14442
Subject : resume after hibernate: /dev/sdb drops and returns as /dev/sde
Submitter : Duncan <1i5t5.duncan@cox.net>
Date : 2009-10-20 01:52 (104 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14426
Subject : CE: hpet increasing min_delta_ns flood
Submitter : Thibault Mondary <thibm@free.fr>
Date : 2009-10-17 09:29 (107 days old)
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14376
Subject : Kernel NULL pointer dereference/ kvm subsystem
Submitter : Don Dupuis <dondster@gmail.com>
Date : 2009-10-06 14:38 (118 days old)
References : http://marc.info/?l=linux-kernel&m=125484025021737&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14298
Subject : warning at manage.c:361 (set_irq_wake), matrix-keypad related?
Submitter : Pavel Machek <pavel@ucw.cz>
Date : 2009-09-30 20:07 (124 days old)
References : http://marc.info/?l=linux-kernel&m=125434130703538&w=4
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14297
Subject : console resume broken since ba15ab0e8d
Submitter : Sascha Hauer <s.hauer@pengutronix.de>
Date : 2009-09-30 15:11 (124 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ba15ab0e8de0d4439a91342ad52d55ca9e313f3d
References : http://marc.info/?l=linux-kernel&m=125432349404060&w=4
Regressions with patches
------------------------
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15197
Subject : padlock_sha1 and hmac broken?
Submitter : Wolfgang Walter <wolfgang.walter@stwm.de>
Date : 2010-01-29 23:44 (3 days old)
References : http://marc.info/?l=linux-kernel&m=126480912924283&w=4
Handled-By : Herbert Xu <herbert@gondor.apana.org.au>
Patch : http://patchwork.kernel.org/patch/75959/
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15135
Subject : Kernel 2.6.32.x hangs during boot process
Submitter : François Figarola <francois.figarola@i-consult.fr>
Date : 2010-01-16 9:58 (16 days old)
References : http://marc.info/?l=linux-kernel&m=126363593817261&w=4
Handled-By : Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
Patch : http://patchwork.kernel.org/patch/75560/
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15134
Subject : gobi_loader hangs after commit 8e8dce065088
Submitter : Matthew Garrett <mjg59@srcf.ucam.org>
Date : 2010-01-17 2:55 (15 days old)
References : http://marc.info/?l=linux-kernel&m=126369696509502&w=4
Handled-By : Oliver Neukum <oliver@neukum.org>
Alan Cox <alan@lxorguk.ukuu.org.uk>
Patch : http://patchwork.kernel.org/patch/73878/
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=15040
Subject : High cpu temperature with 2.6.32 - bisected to cpuidle menu update
Submitter : Dimitrios Apostolou <jimis@gmx.net>
Date : 2010-01-06 17:39 (26 days old)
References : http://marc.info/?l=linux-kernel&m=126279952723036&w=4
Handled-By : Arjan van de Ven <arjan@infradead.org>
Patch : http://patchwork.kernel.org/patch/71962/
Bug-Entry : http://bugzilla.kernel.org/show_bug.cgi?id=14897
Subject : i915: Commit 0e442c60 causes flickering
Submitter : David John <davidjon@xenontk.org>
Date : 2009-12-09 17:26 (54 days old)
First-Bad-Commit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0e442c60dd39ac6924b11a20497734bd2303744c
References : http://marc.info/?l=linux-kernel&m=126037889600769&w=4
Handled-By : David John <davidjon@xenontk.org>
Patch : http://patchwork.kernel.org/patch/75423/
For details, please visit the bug entries and follow the links given in
references.
As you can see, there is a Bugzilla entry for each of the listed regressions.
There also is a Bugzilla entry used for tracking the regressions introduced
between 2.6.31 and 2.6.32, unresolved as well as resolved, at:
http://bugzilla.kernel.org/show_bug.cgi?id=14230
Please let me know if there are any Bugzilla entries that should be added to
the list in there.
Thanks,
Rafael
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox