netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Oliver Hartkopp <socketcan-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
To: Michael Buesch <mb-fseUSCV1ubazQB+pC5nmwQ@public.gmane.org>
Cc: Kalle Valo <kalle.valo-X3B1VOXEql0@public.gmane.org>,
	linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Johannes Berg <johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>,
	"John W. Linville"
	<linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
Subject: Re: mac80211: NOHZ: local_softirq_pending 08
Date: Sat, 12 Sep 2009 20:07:09 +0200	[thread overview]
Message-ID: <4AABE34D.30401@hartkopp.net> (raw)
In-Reply-To: <200909121851.46002.mb-fseUSCV1ubazQB+pC5nmwQ@public.gmane.org>

Michael Buesch wrote:
> On Saturday 12 September 2009 18:41:12 Oliver Hartkopp wrote:
>> Michael Buesch wrote:
>>
>>>> As there are several users in the kernel do exact this test and call the
>>>> appropriate netif_rx() function, i would suggest to create a static inline
>>>> function:
>>>>
>>>> static inline int netif_rx_ti(struct sk_buff *skb)
>>>> {
>>>> 	if (in_interrupt())
>>>> 		return netif_rx(skb);
>>>> 	return netif_rx_ni(skb);
>>>> }
>>>>
>>>> ('ti' for test in_interrupt())
>>>>
>>>> in include/linux/netdevice.h
>>>>
>>>> What do you think about that?
>>> Yeah, I'm fine with that.
>>>
>> Hi Michael,
>>
>> i cooked a patch that introduces netif_rx_ti() and fixes up the problems in
>> mac80211 and the CAN subsystem.
>>
>> Currently i'm pondering whether netif_rx_ti() is needed in all cases or if
>> there are code sections that'll never be executed from irq-context.
>>
>> In theses cases netif_rx_ni() should be prefered to netif_rx_ti() to prevent
>> the obsolete check ...
>>
>> Is there any of your changes that should better use netif_rx_ni() ?
>>
>> Regards,
>> Oliver
>>
> 
> Well, I'd say this check does not cost much at all.
> If I were the net maintainer, I'd get rid of netif_rx_ni() _and_ netif_rx_ti() and
> do the check internally in netif_rx().
> But as I don't have to decide that, I just want the mac80211 issue fixed.
> 

Like this?

int netif_rx(struct sk_buff *skb)
{
	int err;

	if (likely(in_interrupt()))
		err = __netif_rx(skb);
	else {
		preempt_disable();
		err = __netif_rx(skb);
		if (local_softirq_pending())
			do_softirq();
		preempt_enable();
	}

	return err;
}

I don't know how expensive in_interrupt() is ... checking the code does not
give any answers to *me* ;-)

But i found

356 netif_rx()

but only

18 netif_rx_ni()

in the kernel tree.

And three of them check for in_interrupt() before using netif_rx() or
netif_rx_ni() ...


Finally i would tend to introduce netif_rx_ti() in include/linux/netdevice.h
as described above, for the rare code that can be used inside and outside the
irq context.

I assume the affected code in the CAN stuff has to use netif_rx_ni() - but i
will doublecheck that (and prepare a separate CAN patch).

For the mac80211 i would suggest to check whether you really need
netif_rx()/netif_rx_ni()/netif_rx_ti() in all the regarded cases.

I assume always using netif_rx_ti() (as you proposed in the original patch) is
not the most efficient approach.

Best regards,
Oliver

--
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

  parent reply	other threads:[~2009-09-12 18:07 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-11 14:48 mac80211: NOHZ: local_softirq_pending 08 Michael Buesch
2009-09-11 14:57 ` Kalle Valo
2009-09-11 15:07   ` Michael Buesch
     [not found]     ` <200909111707.23971.mb-fseUSCV1ubazQB+pC5nmwQ@public.gmane.org>
2009-09-11 16:07       ` Kalle Valo
2009-09-11 16:07       ` Oliver Hartkopp
     [not found]         ` <4AAA75CB.6040803-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
2009-09-11 16:13           ` Michael Buesch
2009-09-12 16:41             ` Oliver Hartkopp
     [not found]               ` <4AABCF28.6090505-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
2009-09-12 16:51                 ` Michael Buesch
     [not found]                   ` <200909121851.46002.mb-fseUSCV1ubazQB+pC5nmwQ@public.gmane.org>
2009-09-12 18:07                     ` Oliver Hartkopp [this message]
2009-09-29 19:29               ` John W. Linville
     [not found]                 ` <20090929192928.GF2678-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2009-09-30 11:56                   ` Oliver Hartkopp
2009-09-30 14:33                     ` Michael Buesch
     [not found]                       ` <200909301633.04376.mb-fseUSCV1ubazQB+pC5nmwQ@public.gmane.org>
2009-09-30 14:47                         ` Kalle Valo
2009-09-30 14:54                           ` Johannes Berg
     [not found]                             ` <1254322466.3959.5.camel-YfaajirXv2244ywRPIzf9A@public.gmane.org>
2009-09-30 15:10                               ` Michael Buesch
2009-09-30 15:21                                 ` Johannes Berg
     [not found]                                   ` <1254324077.3959.7.camel-YfaajirXv2244ywRPIzf9A@public.gmane.org>
2009-09-30 17:51                                     ` Oliver Hartkopp
     [not found]                                       ` <4AC39A90.6060602-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
2009-09-30 18:18                                         ` [PATCH] net: fix " Oliver Hartkopp
     [not found]                                           ` <4AC3A0F1.3060306-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
2009-09-30 18:47                                             ` John W. Linville
2009-09-30 23:33                                             ` David Miller
2009-10-01  7:08                                               ` Oliver Hartkopp
2009-10-01 14:04                                               ` Michael Buesch
     [not found]                                                 ` <200910011604.42916.mb-fseUSCV1ubazQB+pC5nmwQ@public.gmane.org>
2009-10-01 14:24                                                   ` Kalle Valo
2009-10-01 18:42                                                   ` Johannes Berg
     [not found]                                                     ` <1254422548.3959.24.camel-YfaajirXv2244ywRPIzf9A@public.gmane.org>
2009-10-01 19:10                                                       ` Michael Buesch
     [not found]                                                         ` <200910012110.34216.mb-fseUSCV1ubazQB+pC5nmwQ@public.gmane.org>
2009-10-01 19:26                                                           ` Johannes Berg
2009-10-01 19:32                                                         ` 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=4AABE34D.30401@hartkopp.net \
    --to=socketcan-fj+pqtutwrtk1umjsbkqmq@public.gmane.org \
    --cc=johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org \
    --cc=kalle.valo-X3B1VOXEql0@public.gmane.org \
    --cc=linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org \
    --cc=mb-fseUSCV1ubazQB+pC5nmwQ@public.gmane.org \
    --cc=netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).