From patchwork Sun Jun 12 19:40:49 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ondrej Zary X-Patchwork-Id: 100112 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id E9F6FB6FEA for ; Mon, 13 Jun 2011 05:47:54 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752618Ab1FLTrl (ORCPT ); Sun, 12 Jun 2011 15:47:41 -0400 Received: from mail1-out1.atlantis.sk ([80.94.52.55]:50857 "EHLO mail.atlantis.sk" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751415Ab1FLTrk (ORCPT ); Sun, 12 Jun 2011 15:47:40 -0400 X-Greylist: delayed 399 seconds by postgrey-1.27 at vger.kernel.org; Sun, 12 Jun 2011 15:47:40 EDT Received: (qmail 11838 invoked from network); 12 Jun 2011 19:41:02 -0000 Received: from unknown (HELO pentium) (rainbow@rainbow-software.org@89.173.145.150) by mail.atlantis.sk with AES256-SHA encrypted SMTP; 12 Jun 2011 19:41:02 -0000 From: Ondrej Zary To: netdev@vger.kernel.org Subject: 3c503: fix broken IRQ autoprobing Date: Sun, 12 Jun 2011 21:40:49 +0200 User-Agent: KMail/1.9.10 Cc: Kernel development list MIME-Version: 1.0 Content-Disposition: inline Message-Id: <201106122140.51776.linux@rainbow-software.org> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Fix broken IRQ autoprobing in 3c503 driver: - improper IRQ freeing (does not free IRQs causes WARN) - missing break when an working IRQ is found The driver works with this patch. Signed-off-by: Ondrej Zary Reviewed-by: Ben Hutchings --- linux-2.6.39-rc2-orig/drivers/net/3c503.c 2011-04-06 03:30:43.000000000 +0200 +++ linux-2.6.39-rc2/drivers/net/3c503.c 2011-06-12 21:29:47.000000000 +0200 @@ -412,7 +412,7 @@ el2_open(struct net_device *dev) outb_p(0x04 << ((*irqp == 9) ? 2 : *irqp), E33G_IDCFR); outb_p(0x00, E33G_IDCFR); msleep(1); - free_irq(*irqp, el2_probe_interrupt); + free_irq(*irqp, &seen); if (!seen) continue; @@ -422,6 +422,7 @@ el2_open(struct net_device *dev) continue; if (retval < 0) goto err_disable; + break; } while (*++irqp); if (*irqp == 0) {