From: Kulikov Vasiliy <segooon@gmail.com>
To: Dan Carpenter <error27@gmail.com>
Cc: kernel-janitors@vger.kernel.org,
"David S. Miller" <davem@davemloft.net>,
Jiri Pirko <jpirko@redhat.com>, Joe Perches <joe@perches.com>,
Stephen Hemminger <shemminger@vyatta.com>,
Eric Dumazet <eric.dumazet@gmail.com>,
netdev@vger.kernel.org
Subject: Re: [PATCH] at1700: fix double free_irq
Date: Fri, 09 Jul 2010 17:48:09 +0000 [thread overview]
Message-ID: <20100709174809.GA5228@albatros> (raw)
In-Reply-To: <20100709165817.GN19184@bicker>
On Fri, Jul 09, 2010 at 18:58 +0200, Dan Carpenter wrote:
> On Fri, Jul 09, 2010 at 04:31:26PM +0400, Kulikov Vasiliy wrote:
> > free_irq() is called both in net_close() and cleanup_card(). Since it
> > is requested in at1700_probe1(), leave free_irq() only in cleanup_card()
> > for balance.
> >
>
> Are you sure? I would think that we should make the free_irq() in
> cleanup_card() conditional instead.
See balanced functions: net_open() & net_close(), at1700_probe1() &
cleanup_card(). request_irq() is in probe, so it must not be
freed on 'ifconfig down'. E.g.
modprobe at1700 <= request_irq()
ifconfig eth0 up
ifconfig eth0 down <= first free_irq()
ifconfig eth0 up <= no request_irq() here!
ifconfig eth0 down <= second free_irq()
rmmod at1700 <= third free_irq()
>
> > Signed-off-by: Kulikov Vasiliy <segooon@gmail.com>
> > ---
> > drivers/net/at1700.c | 4 +---
> > 1 files changed, 1 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/net/at1700.c b/drivers/net/at1700.c
> > index 93185f5..8987689 100644
> > --- a/drivers/net/at1700.c
> > +++ b/drivers/net/at1700.c
> > @@ -811,10 +811,8 @@ static int net_close(struct net_device *dev)
> > /* No statistic counters on the chip to update. */
> >
> > /* Disable the IRQ on boards of fmv18x where it is feasible. */
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> It seems like this comment should be updated?
Maybe yes, but I don't know what these damn IO requests mean.
Sure, it's better to request IRQ in xxx_open(), but as it is already
done in probe() I leave it here.
If it is a bug then I do nothing with it, but if it is not then I'll
create a bug.
>
> > - if (lp->jumpered) {
> > + if (lp->jumpered)
> > outb(0x00, ioaddr + IOCONFIG1);
> > - free_irq(dev->irq, dev);
> > - }
>
> regards,
> dan carpenter
WARNING: multiple messages have this Message-ID (diff)
From: Kulikov Vasiliy <segooon@gmail.com>
To: Dan Carpenter <error27@gmail.com>
Cc: kernel-janitors@vger.kernel.org,
"David S. Miller" <davem@davemloft.net>,
Jiri Pirko <jpirko@redhat.com>, Joe Perches <joe@perches.com>,
Stephen Hemminger <shemminger@vyatta.com>,
Eric Dumazet <eric.dumazet@gmail.com>,
netdev@vger.kernel.org
Subject: Re: [PATCH] at1700: fix double free_irq
Date: Fri, 9 Jul 2010 21:48:09 +0400 [thread overview]
Message-ID: <20100709174809.GA5228@albatros> (raw)
In-Reply-To: <20100709165817.GN19184@bicker>
On Fri, Jul 09, 2010 at 18:58 +0200, Dan Carpenter wrote:
> On Fri, Jul 09, 2010 at 04:31:26PM +0400, Kulikov Vasiliy wrote:
> > free_irq() is called both in net_close() and cleanup_card(). Since it
> > is requested in at1700_probe1(), leave free_irq() only in cleanup_card()
> > for balance.
> >
>
> Are you sure? I would think that we should make the free_irq() in
> cleanup_card() conditional instead.
See balanced functions: net_open() & net_close(), at1700_probe1() &
cleanup_card(). request_irq() is in probe, so it must not be
freed on 'ifconfig down'. E.g.
modprobe at1700 <== request_irq()
ifconfig eth0 up
ifconfig eth0 down <== first free_irq()
ifconfig eth0 up <== no request_irq() here!
ifconfig eth0 down <== second free_irq()
rmmod at1700 <== third free_irq()
>
> > Signed-off-by: Kulikov Vasiliy <segooon@gmail.com>
> > ---
> > drivers/net/at1700.c | 4 +---
> > 1 files changed, 1 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/net/at1700.c b/drivers/net/at1700.c
> > index 93185f5..8987689 100644
> > --- a/drivers/net/at1700.c
> > +++ b/drivers/net/at1700.c
> > @@ -811,10 +811,8 @@ static int net_close(struct net_device *dev)
> > /* No statistic counters on the chip to update. */
> >
> > /* Disable the IRQ on boards of fmv18x where it is feasible. */
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> It seems like this comment should be updated?
Maybe yes, but I don't know what these damn IO requests mean.
Sure, it's better to request IRQ in xxx_open(), but as it is already
done in probe() I leave it here.
If it is a bug then I do nothing with it, but if it is not then I'll
create a bug.
>
> > - if (lp->jumpered) {
> > + if (lp->jumpered)
> > outb(0x00, ioaddr + IOCONFIG1);
> > - free_irq(dev->irq, dev);
> > - }
>
> regards,
> dan carpenter
next prev parent reply other threads:[~2010-07-09 17:48 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-09 12:31 [PATCH] at1700: fix double free_irq Kulikov Vasiliy
2010-07-09 12:31 ` Kulikov Vasiliy
2010-07-09 16:58 ` Dan Carpenter
2010-07-09 16:58 ` Dan Carpenter
2010-07-09 17:48 ` Kulikov Vasiliy [this message]
2010-07-09 17:48 ` Kulikov Vasiliy
2010-07-09 18:56 ` Dan Carpenter
2010-07-09 18:56 ` Dan Carpenter
2010-07-12 1:15 ` David Miller
2010-07-12 1:15 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100709174809.GA5228@albatros \
--to=segooon@gmail.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=error27@gmail.com \
--cc=joe@perches.com \
--cc=jpirko@redhat.com \
--cc=kernel-janitors@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=shemminger@vyatta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.