* [PATCH] virtio_net: Fix open <-> interrupt race
From: Christian Borntraeger @ 2008-02-06 7:50 UTC (permalink / raw)
To: Jeff Garzik; +Cc: Rusty Russell, netdev, virtualization
In-Reply-To: <200802061500.04138.rusty@rustcorp.com.au>
Jeff,
Rusty is (supposed to be) on vacation. Can you send this fix against
virtio_net with your next network driver fixes for 2.6.25?
Thank you
-
I got the following oops during interface ifup. Unfortunately its not
easily reproducable so I cant say for sure that my fix fixes this
problem, but I am confident and I think its correct anyway:
<2>kernel BUG at /space/kvm/drivers/virtio/virtio_ring.c:234!
<4>illegal operation: 0001 [#1] PREEMPT SMP
<4>Modules linked in:
<4>CPU: 0 Not tainted 2.6.24zlive-guest-07293-gf1ca151-dirty #91
<4>Process swapper (pid: 0, task: 0000000000800938, ksp: 000000000084ddb8)
<4>Krnl PSW : 0404300180000000 0000000000466374 (vring_disable_cb+0x30/0x34)
<4> R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:0 CC:3 PM:0 EA:3
<4>Krnl GPRS: 0000000000000001 0000000000000001 0000000010003800 0000000000466344
<4> 000000000e980900 00000000008848b0 000000000084e748 0000000000000000
<4> 000000000087b300 0000000000001237 0000000000001237 000000000f85bdd8
<4> 000000000e980920 00000000001137c0 0000000000464754 000000000f85bdd8
<4>Krnl Code: 0000000000466368: e3b0b0700004 lg %r11,112(%r11)
<4> 000000000046636e: 07fe bcr 15,%r14
<4> 0000000000466370: a7f40001 brc 15,466372
<4> >0000000000466374: a7f4fff6 brc 15,466360
<4> 0000000000466378: eb7ff0500024 stmg %r7,%r15,80(%r15)
<4> 000000000046637e: a7f13e00 tmll %r15,15872
<4> 0000000000466382: b90400ef lgr %r14,%r15
<4> 0000000000466386: a7840001 brc 8,466388
<4>Call Trace:
<4>([<000201500f85c000>] 0x201500f85c000)
<4> [<0000000000466556>] vring_interrupt+0x72/0x88
<4> [<00000000004801a0>] kvm_extint_handler+0x34/0x44
<4> [<000000000010d22c>] do_extint+0xbc/0xf8
<4> [<0000000000113f98>] ext_no_vtime+0x16/0x1a
<4> [<000000000010a182>] cpu_idle+0x216/0x238
<4>([<000000000010a162>] cpu_idle+0x1f6/0x238)
<4> [<0000000000568656>] rest_init+0xaa/0xb8
<4> [<000000000084ee2c>] start_kernel+0x3fc/0x490
<4> [<0000000000100020>] _stext+0x20/0x80
<4>
<4> <0>Kernel panic - not syncing: Fatal exception in interrupt
<4>
After looking at the code and the dump I think the following scenario
happened: Ifup was running on cpu2 and the interrupt arrived on cpu0.
Now virtnet_open on cpu 2 managed to execute napi_enable and disable_cb
but did not execute rx_schedule. Meanwhile on cpu 0 skb_recv_done was
called by vring_interrupt, executed netif_rx_schedule_prep, which
succeeded and therefore called disable_cb. This triggered the BUG_ON,
as interrupts were already disabled by cpu 2.
I think the proper solution is to make the call to disable_cb depend on
the atomic update of NAPI_STATE_SCHED by using netif_rx_schedule_prep
in the same way as skb_recv_done.
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
---
drivers/net/virtio_net.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
Index: kvm/drivers/net/virtio_net.c
===================================================================
--- kvm.orig/drivers/net/virtio_net.c
+++ kvm/drivers/net/virtio_net.c
@@ -321,10 +321,12 @@ static int virtnet_open(struct net_devic
/* If all buffers were filled by other side before we napi_enabled, we
* won't get another interrupt, so process any outstanding packets
- * now. virtnet_poll wants re-enable the queue, so we disable here. */
- vi->rvq->vq_ops->disable_cb(vi->rvq);
- netif_rx_schedule(vi->dev, &vi->napi);
-
+ * now. virtnet_poll wants re-enable the queue, so we disable here.
+ * We synchronize against interrupts via NAPI_STATE_SCHED */
+ if (netif_rx_schedule_prep(dev, &vi->napi)) {
+ vi->rvq->vq_ops->disable_cb(vi->rvq);
+ __netif_rx_schedule(dev, &vi->napi);
+ }
return 0;
}
^ permalink raw reply
* [PATCH][AX25] Fwd: SMP with AX.25
From: Jarek Poplawski @ 2008-02-06 8:15 UTC (permalink / raw)
To: netdev; +Cc: Ralf Baechle, Jann Traschewski, David Miller
In-Reply-To: <20080206074529.GC4496@ff.dom.local>
On Wed, Feb 06, 2008 at 07:45:29AM +0000, Jarek Poplawski wrote:
...
> From: Jann Traschewski <jann@gmx.de>
> Subject: SMP with AX.25
[AX25] ax25_timer: use mod_timer instead of add_timer
According to one of Jann's OOPS reports it looks like
BUG_ON(timer_pending(timer)) triggers during add_timer()
in ax25_start_t1timer(). This patch changes current use
of: init_timer(), add_timer() and del_timer() to
setup_timer() with mod_timer(), which should be safer
anyway.
Reported-by: Jann Traschewski <jann@gmx.de>
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
---
include/net/ax25.h | 1 +
net/ax25/af_ax25.c | 6 +----
net/ax25/ax25_timer.c | 60 +++++++++++++++++-------------------------------
3 files changed, 23 insertions(+), 44 deletions(-)
diff --git a/include/net/ax25.h b/include/net/ax25.h
index 32a57e1..3f0236f 100644
--- a/include/net/ax25.h
+++ b/include/net/ax25.h
@@ -416,6 +416,7 @@ extern void ax25_calculate_rtt(ax25_cb *);
extern void ax25_disconnect(ax25_cb *, int);
/* ax25_timer.c */
+extern void ax25_setup_timers(ax25_cb *);
extern void ax25_start_heartbeat(ax25_cb *);
extern void ax25_start_t1timer(ax25_cb *);
extern void ax25_start_t2timer(ax25_cb *);
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
index 8fc64e3..94b2b1b 100644
--- a/net/ax25/af_ax25.c
+++ b/net/ax25/af_ax25.c
@@ -510,11 +510,7 @@ ax25_cb *ax25_create_cb(void)
skb_queue_head_init(&ax25->ack_queue);
skb_queue_head_init(&ax25->reseq_queue);
- init_timer(&ax25->timer);
- init_timer(&ax25->t1timer);
- init_timer(&ax25->t2timer);
- init_timer(&ax25->t3timer);
- init_timer(&ax25->idletimer);
+ ax25_setup_timers(ax25);
ax25_fillin_cb(ax25, NULL);
diff --git a/net/ax25/ax25_timer.c b/net/ax25/ax25_timer.c
index 7259486..db29ea7 100644
--- a/net/ax25/ax25_timer.c
+++ b/net/ax25/ax25_timer.c
@@ -40,63 +40,45 @@ static void ax25_t2timer_expiry(unsigned long);
static void ax25_t3timer_expiry(unsigned long);
static void ax25_idletimer_expiry(unsigned long);
-void ax25_start_heartbeat(ax25_cb *ax25)
+void ax25_setup_timers(ax25_cb *ax25)
{
- del_timer(&ax25->timer);
-
- ax25->timer.data = (unsigned long)ax25;
- ax25->timer.function = &ax25_heartbeat_expiry;
- ax25->timer.expires = jiffies + 5 * HZ;
+ setup_timer(&ax25->timer, ax25_heartbeat_expiry, (unsigned long)ax25);
+ setup_timer(&ax25->t1timer, ax25_t1timer_expiry, (unsigned long)ax25);
+ setup_timer(&ax25->t2timer, ax25_t2timer_expiry, (unsigned long)ax25);
+ setup_timer(&ax25->t3timer, ax25_t3timer_expiry, (unsigned long)ax25);
+ setup_timer(&ax25->idletimer, ax25_idletimer_expiry,
+ (unsigned long)ax25);
+}
- add_timer(&ax25->timer);
+void ax25_start_heartbeat(ax25_cb *ax25)
+{
+ mod_timer(&ax25->timer, jiffies + 5 * HZ);
}
void ax25_start_t1timer(ax25_cb *ax25)
{
- del_timer(&ax25->t1timer);
-
- ax25->t1timer.data = (unsigned long)ax25;
- ax25->t1timer.function = &ax25_t1timer_expiry;
- ax25->t1timer.expires = jiffies + ax25->t1;
-
- add_timer(&ax25->t1timer);
+ mod_timer(&ax25->t1timer, jiffies + ax25->t1);
}
void ax25_start_t2timer(ax25_cb *ax25)
{
- del_timer(&ax25->t2timer);
-
- ax25->t2timer.data = (unsigned long)ax25;
- ax25->t2timer.function = &ax25_t2timer_expiry;
- ax25->t2timer.expires = jiffies + ax25->t2;
-
- add_timer(&ax25->t2timer);
+ mod_timer(&ax25->t2timer, jiffies + ax25->t2);
}
void ax25_start_t3timer(ax25_cb *ax25)
{
- del_timer(&ax25->t3timer);
-
- if (ax25->t3 > 0) {
- ax25->t3timer.data = (unsigned long)ax25;
- ax25->t3timer.function = &ax25_t3timer_expiry;
- ax25->t3timer.expires = jiffies + ax25->t3;
-
- add_timer(&ax25->t3timer);
- }
+ if (ax25->t3 > 0)
+ mod_timer(&ax25->t3timer, jiffies + ax25->t3);
+ else
+ del_timer(&ax25->t3timer);
}
void ax25_start_idletimer(ax25_cb *ax25)
{
- del_timer(&ax25->idletimer);
-
- if (ax25->idle > 0) {
- ax25->idletimer.data = (unsigned long)ax25;
- ax25->idletimer.function = &ax25_idletimer_expiry;
- ax25->idletimer.expires = jiffies + ax25->idle;
-
- add_timer(&ax25->idletimer);
- }
+ if (ax25->idle > 0)
+ mod_timer(&ax25->idletimer, jiffies + ax25->idle);
+ else
+ del_timer(&ax25->idletimer);
}
void ax25_stop_heartbeat(ax25_cb *ax25)
^ permalink raw reply related
* Re: [e1000][net-2.6 tree] Regression: driver doesn't detect card on my node.
From: Yinghai Lu @ 2008-02-06 8:20 UTC (permalink / raw)
To: Pavel Emelyanov
Cc: Kok, Auke, jesse.brandeburg, jeffrey.t.kirsher, john.ronciak,
David Miller, Linux Netdev List, e1000-devel, Denis Lunev,
Justin Piszcz, Ingo Molnar, Thomas Gleixner
In-Reply-To: <47A95D60.5090203@openvz.org>
On Tuesday 05 February 2008 11:10:24 pm Pavel Emelyanov wrote:
> [snip]
>
> >>> What other info from me is required?
> >
> > boot log please. with the patch and reverting the patch.
>
> Here they are (attached).
> BTW, I found, that the sky2 adapter is broken by this patch as well.
> To simplify the analysis, here's their diff:
>
> --- bad-log 2008-02-06 10:06:40.000000000 +0300
> +++ good-log 2008-02-06 10:06:40.000000000 +0300
> @@ -1,4 +1,4 @@
> -Linux version 2.6.24 (pavel@xemulnb) (gcc version 4.1.3 20070724 (prerelease) (SUSE Linux)) #22 SMP Tue Feb 5 20:09:11 MSK 2008
> +Linux version 2.6.24 (pavel@xemulnb) (gcc version 4.1.3 20070724 (prerelease) (SUSE Linux)) #23 SMP Wed Feb 6 10:03:53 MSK 2008
> BIOS-provided physical RAM map:
> BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
> BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
> @@ -19,29 +19,6 @@ Scan SMP from c0000000 for 1024 bytes.
> Scan SMP from c009fc00 for 1024 bytes.
> Scan SMP from c00f0000 for 65536 bytes.
> found SMP MP-table at [c00ff780] 000ff780
> -***************
> -**** WARNING: likely BIOS bug
> -**** MTRRs don't cover all of memory, trimmed 786432 pages
> -***************
> -update e820 for mtrr
> -modified physical RAM map:
> - modified: 0000000000000000 - 000000000009f800 (usable)
> - modified: 000000000009f800 - 00000000000a0000 (reserved)
> - modified: 00000000000e0000 - 0000000000100000 (reserved)
> - modified: 0000000000100000 - 0000000040000000 (usable)
> - modified: 0000000040000000 - 00000000bfff0000 (reserved)
> - modified: 00000000bfff0000 - 00000000bffff000 (ACPI data)
> - modified: 00000000bffff000 - 00000000c0000000 (ACPI NVS)
> - modified: 00000000c0000000 - 0000000100000000 (reserved)
> - modified: 0000000100000000 - 0000000140000000 (usable)
the root cause could be your mtrr last entry for RAM has strange type
please apply the following line to print the mtrr before trimming to current linus tree.
Thanks
YH
diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
index 1e27b69..c0c44e0 100644
--- a/arch/x86/kernel/cpu/mtrr/main.c
+++ b/arch/x86/kernel/cpu/mtrr/main.c
@@ -680,6 +680,7 @@ int __init mtrr_trim_uncached_memory(unsigned long end_pfn)
/* Find highest cached pfn */
for (i = 0; i < num_var_ranges; i++) {
mtrr_if->get(i, &base, &size, &type);
+ printk(KERN_INFO "i=%d %lx - %lx %d\n", i, base, base + size, type);
if (type != MTRR_TYPE_WRBACK)
continue;
base <<= PAGE_SHIFT;
^ permalink raw reply related
* Re: [PATCH] Add IPv6 support to TCP SYN cookies
From: Andi Kleen @ 2008-02-06 8:53 UTC (permalink / raw)
To: Ross Vandegrift; +Cc: Andi Kleen, Glenn Griffin, netdev, linux-kernel
In-Reply-To: <20080205212335.GA11287@kallisti.us>
> I work at a hosting company and we see these kinds of issues in the
> real world fairly frequently. I would guess maybe a monthly basis.
> The servers where we have seen this are typically running RHEL 4 or 5
> kernels, so I can't really speak to how recent the kernel is in this
> specific term.
RHEL5 should be recent enough.
>
> If I can find a box that we could temporary get a kernel.org kernel
> on, I'll see if I can get a real comparison together. We have
> collected a few of the more effective attack tools that have been left
> on compromised systems, so it wouldn't be too difficult to get some
> numbers.
That would be useful yes -- for different bandwidths.
If the young/old heuristics do not work well enough anymore most likely we should
try readding RED to the syn queue again. That used to be pretty effective
in the early days. I don't quite remember why Linux didn't end up using it
in fact.
-Andi
^ permalink raw reply
* Re: locking api self-test hanging
From: Andrew Morton @ 2008-02-06 8:34 UTC (permalink / raw)
To: netdev, Ingo Molnar, linux-kernel, Stephen Hemminger
In-Reply-To: <20080204044304.d244e761.akpm@linux-foundation.org>
On Mon, 4 Feb 2008 04:43:04 -0800 Andrew Morton <akpm@linux-foundation.org> wrote:
> On Sun, 3 Feb 2008 15:07:44 -0800 Andrew Morton <akpm@linux-foundation.org> wrote:
>
> > On Sun, 3 Feb 2008 15:02:46 -0800 Andrew Morton <akpm@linux-foundation.org> wrote:
> >
> > >
> > > With current mainline I'm getting intermittent hangs here:
> > >
> > > http://userweb.kernel.org/~akpm/p2033590.jpg
> > >
> > > with this config:
> > >
> > > http://userweb.kernel.org/~akpm/config-sony.txt
> > >
> > > on the Vaio. Sometimes it boots (then hits another different hang),
> > > sometimes it gets stuck there.
>
> CONFIG_DEBUG_LOCKING_API_SELFTESTS=n fixed that up.
>
> >
> > The second hang is in kobject_uevent_init(). All that function does is call
> > netlink_kernel_create().
>
> And I've fully bisected this hang twice and both times came up with
>
> commit 33f807ba0d9259e7c75c7a2ce8bd2787e5b540c7
> Author: Stephen Hemminger <shemminger@linux-foundation.org>
> Date: Mon Nov 19 19:24:52 2007 -0800
>
> [NETPOLL]: Kill NETPOLL_RX_DROP, set but never tested.
>
> which is stupid because that patch doesn't do anything.
>
> However I am using netconsole-over-e100 and the hang does go away when I
> disable netconsole on the kernel boot command line.
>
> I'd say it's some timing thing in netpoll/netconsole/napi/etc.
>
I'm seeing this netconsole hang on a second machine now. Current
mainline. It also has e100. This one is SMP ancient PIII.
Config: http://userweb.kernel.org/~akpm/config-vmm.txt
^ permalink raw reply
* Re: [e1000][net-2.6 tree] Regression: driver doesn't detect card on my node.
From: Pavel Emelyanov @ 2008-02-06 8:41 UTC (permalink / raw)
To: Yinghai Lu
Cc: Kok, Auke, e1000-devel, Linux Netdev List, jesse.brandeburg,
john.ronciak, Thomas Gleixner, jeffrey.t.kirsher, Denis Lunev,
Ingo Molnar, David Miller, Justin Piszcz
In-Reply-To: <200802060020.25492.yinghai.lu@sun.com>
Yinghai Lu wrote:
> On Tuesday 05 February 2008 11:10:24 pm Pavel Emelyanov wrote:
>> [snip]
>>
>>>>> What other info from me is required?
>>> boot log please. with the patch and reverting the patch.
>> Here they are (attached).
>> BTW, I found, that the sky2 adapter is broken by this patch as well.
>> To simplify the analysis, here's their diff:
>>
>> --- bad-log 2008-02-06 10:06:40.000000000 +0300
>> +++ good-log 2008-02-06 10:06:40.000000000 +0300
>> @@ -1,4 +1,4 @@
>> -Linux version 2.6.24 (pavel@xemulnb) (gcc version 4.1.3 20070724 (prerelease) (SUSE Linux)) #22 SMP Tue Feb 5 20:09:11 MSK 2008
>> +Linux version 2.6.24 (pavel@xemulnb) (gcc version 4.1.3 20070724 (prerelease) (SUSE Linux)) #23 SMP Wed Feb 6 10:03:53 MSK 2008
>> BIOS-provided physical RAM map:
>> BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
>> BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
>> @@ -19,29 +19,6 @@ Scan SMP from c0000000 for 1024 bytes.
>> Scan SMP from c009fc00 for 1024 bytes.
>> Scan SMP from c00f0000 for 65536 bytes.
>> found SMP MP-table at [c00ff780] 000ff780
>> -***************
>> -**** WARNING: likely BIOS bug
>> -**** MTRRs don't cover all of memory, trimmed 786432 pages
>> -***************
>> -update e820 for mtrr
>> -modified physical RAM map:
>> - modified: 0000000000000000 - 000000000009f800 (usable)
>> - modified: 000000000009f800 - 00000000000a0000 (reserved)
>> - modified: 00000000000e0000 - 0000000000100000 (reserved)
>> - modified: 0000000000100000 - 0000000040000000 (usable)
>> - modified: 0000000040000000 - 00000000bfff0000 (reserved)
>> - modified: 00000000bfff0000 - 00000000bffff000 (ACPI data)
>> - modified: 00000000bffff000 - 00000000c0000000 (ACPI NVS)
>> - modified: 00000000c0000000 - 0000000100000000 (reserved)
>> - modified: 0000000100000000 - 0000000140000000 (usable)
>
> the root cause could be your mtrr last entry for RAM has strange type
>
> please apply the following line to print the mtrr before trimming to current linus tree.
OK, here's the dmesg diff:
--- bad-log 2008-02-06 10:01:21.000000000 +0300
+++ bad-log-info 2008-02-06 11:37:51.000000000 +0300
@@ -19,6 +19,14 @@ Scan SMP from c0000000 for 1024 bytes.
Scan SMP from c009fc00 for 1024 bytes.
Scan SMP from c00f0000 for 65536 bytes.
found SMP MP-table at [c00ff780] 000ff780
+i=0 c0000 - 100000 0
+i=1 0 - 100000 6
+i=2 100000 - 140000 6
+i=3 0 - 0 0
+i=4 0 - 0 0
+i=5 0 - 0 0
+i=6 0 - 0 0
+i=7 0 - 0 0
***************
**** WARNING: likely BIOS bug
**** MTRRs don't cover all of memory, trimmed 786432 pages
> Thanks
>
> YH
>
> diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
> index 1e27b69..c0c44e0 100644
> --- a/arch/x86/kernel/cpu/mtrr/main.c
> +++ b/arch/x86/kernel/cpu/mtrr/main.c
> @@ -680,6 +680,7 @@ int __init mtrr_trim_uncached_memory(unsigned long end_pfn)
> /* Find highest cached pfn */
> for (i = 0; i < num_var_ranges; i++) {
> mtrr_if->get(i, &base, &size, &type);
> + printk(KERN_INFO "i=%d %lx - %lx %d\n", i, base, base + size, type);
> if (type != MTRR_TYPE_WRBACK)
> continue;
> base <<= PAGE_SHIFT;
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
^ permalink raw reply
* [PATCH][AX25] ax25_ds_timer: use mod_timer instead of add_timer
From: Jarek Poplawski @ 2008-02-06 9:14 UTC (permalink / raw)
To: netdev; +Cc: Ralf Baechle, Jann Traschewski, David Miller
In-Reply-To: <20080206081509.GD4496@ff.dom.local>
On Wed, Feb 06, 2008 at 08:15:09AM +0000, Jarek Poplawski wrote:
> On Wed, Feb 06, 2008 at 07:45:29AM +0000, Jarek Poplawski wrote:
> ...
> > From: Jann Traschewski <jann@gmx.de>
> > Subject: SMP with AX.25
...
[AX25] ax25_ds_timer: use mod_timer instead of add_timer
This patch changes current use of: init_timer(), add_timer()
and del_timer() to setup_timer() with mod_timer(), which
should be safer anyway.
Reported-by: Jann Traschewski <jann@gmx.de>
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
---
include/net/ax25.h | 1 +
net/ax25/ax25_dev.c | 2 +-
net/ax25/ax25_ds_timer.c | 12 ++++--------
3 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/include/net/ax25.h b/include/net/ax25.h
index 3f0236f..717e219 100644
--- a/include/net/ax25.h
+++ b/include/net/ax25.h
@@ -324,6 +324,7 @@ extern void ax25_dama_on(ax25_cb *);
extern void ax25_dama_off(ax25_cb *);
/* ax25_ds_timer.c */
+extern void ax25_ds_setup_timer(ax25_dev *);
extern void ax25_ds_set_timer(ax25_dev *);
extern void ax25_ds_del_timer(ax25_dev *);
extern void ax25_ds_timer(ax25_cb *);
diff --git a/net/ax25/ax25_dev.c b/net/ax25/ax25_dev.c
index 528c874..a7a0e0c 100644
--- a/net/ax25/ax25_dev.c
+++ b/net/ax25/ax25_dev.c
@@ -82,7 +82,7 @@ void ax25_dev_device_up(struct net_device *dev)
ax25_dev->values[AX25_VALUES_DS_TIMEOUT]= AX25_DEF_DS_TIMEOUT;
#if defined(CONFIG_AX25_DAMA_SLAVE) || defined(CONFIG_AX25_DAMA_MASTER)
- init_timer(&ax25_dev->dama.slave_timer);
+ ax25_ds_setup_timer(ax25_dev);
#endif
spin_lock_bh(&ax25_dev_lock);
diff --git a/net/ax25/ax25_ds_timer.c b/net/ax25/ax25_ds_timer.c
index c4e3b02..2ce79df 100644
--- a/net/ax25/ax25_ds_timer.c
+++ b/net/ax25/ax25_ds_timer.c
@@ -40,13 +40,10 @@ static void ax25_ds_timeout(unsigned long);
* 1/10th of a second.
*/
-static void ax25_ds_add_timer(ax25_dev *ax25_dev)
+void ax25_ds_setup_timer(ax25_dev *ax25_dev)
{
- struct timer_list *t = &ax25_dev->dama.slave_timer;
- t->data = (unsigned long) ax25_dev;
- t->function = &ax25_ds_timeout;
- t->expires = jiffies + HZ;
- add_timer(t);
+ setup_timer(&ax25_dev->dama.slave_timer, ax25_ds_timeout,
+ (unsigned long)ax25_dev);
}
void ax25_ds_del_timer(ax25_dev *ax25_dev)
@@ -60,10 +57,9 @@ void ax25_ds_set_timer(ax25_dev *ax25_dev)
if (ax25_dev == NULL) /* paranoia */
return;
- del_timer(&ax25_dev->dama.slave_timer);
ax25_dev->dama.slave_timeout =
msecs_to_jiffies(ax25_dev->values[AX25_VALUES_DS_TIMEOUT]) / 10;
- ax25_ds_add_timer(ax25_dev);
+ mod_timer(&ax25_dev->dama.slave_timer, jiffies + HZ);
}
/*
^ permalink raw reply related
* Re: [PATCH] Add IPv6 support to TCP SYN cookies
From: Evgeniy Polyakov @ 2008-02-06 9:13 UTC (permalink / raw)
To: Glenn Griffin; +Cc: Alan Cox, Andi Kleen, netdev, linux-kernel
In-Reply-To: <47a91136.24528c0a.1f6d.ffffa476@mx.google.com>
On Tue, Feb 05, 2008 at 05:52:31PM -0800, Glenn Griffin (ggriffin.kernel@gmail.com) wrote:
> +static u32 cookie_hash(struct in6_addr *saddr, struct in6_addr *daddr,
> + __be16 sport, __be16 dport, u32 count, int c)
> +{
> + __u32 tmp[16 + 5 + SHA_WORKSPACE_WORDS];
This huge buffer should not be allocated on stack.
--
Evgeniy Polyakov
^ permalink raw reply
* Re: locking api self-test hanging
From: Andrew Morton @ 2008-02-06 9:16 UTC (permalink / raw)
To: netdev, Ingo Molnar, linux-kernel, Stephen Hemminger
In-Reply-To: <20080206003412.dca555d4.akpm@linux-foundation.org>
On Wed, 6 Feb 2008 00:34:12 -0800 Andrew Morton <akpm@linux-foundation.org> wrote:
> On Mon, 4 Feb 2008 04:43:04 -0800 Andrew Morton <akpm@linux-foundation.org> wrote:
>
> > On Sun, 3 Feb 2008 15:07:44 -0800 Andrew Morton <akpm@linux-foundation.org> wrote:
> >
> > > On Sun, 3 Feb 2008 15:02:46 -0800 Andrew Morton <akpm@linux-foundation.org> wrote:
> > >
> > > >
> > > > With current mainline I'm getting intermittent hangs here:
> > > >
> > > > http://userweb.kernel.org/~akpm/p2033590.jpg
> > > >
> > > > with this config:
> > > >
> > > > http://userweb.kernel.org/~akpm/config-sony.txt
> > > >
> > > > on the Vaio. Sometimes it boots (then hits another different hang),
> > > > sometimes it gets stuck there.
> >
> > CONFIG_DEBUG_LOCKING_API_SELFTESTS=n fixed that up.
> >
> > >
> > > The second hang is in kobject_uevent_init(). All that function does is call
> > > netlink_kernel_create().
> >
> > And I've fully bisected this hang twice and both times came up with
> >
> > commit 33f807ba0d9259e7c75c7a2ce8bd2787e5b540c7
> > Author: Stephen Hemminger <shemminger@linux-foundation.org>
> > Date: Mon Nov 19 19:24:52 2007 -0800
> >
> > [NETPOLL]: Kill NETPOLL_RX_DROP, set but never tested.
> >
> > which is stupid because that patch doesn't do anything.
> >
> > However I am using netconsole-over-e100 and the hang does go away when I
> > disable netconsole on the kernel boot command line.
> >
> > I'd say it's some timing thing in netpoll/netconsole/napi/etc.
> >
>
> I'm seeing this netconsole hang on a second machine now. Current
> mainline. It also has e100. This one is SMP ancient PIII.
>
> Config: http://userweb.kernel.org/~akpm/config-vmm.txt
>
I can reproduce this on a third machine: the t61p laptop: dual x86_64 with
e1000.
It seems to need quite a lot of printk activity to make it happen. Turning
on initcall_debug is a suitable way of triggering it.
^ permalink raw reply
* Re: [e1000][net-2.6 tree] Regression: driver doesn't detect card on my node.
From: Yinghai Lu @ 2008-02-06 9:19 UTC (permalink / raw)
To: Pavel Emelyanov
Cc: Kok, Auke, e1000-devel, Linux Netdev List, jesse.brandeburg,
john.ronciak, Thomas Gleixner, jeffrey.t.kirsher, Denis Lunev,
Ingo Molnar, David Miller, Justin Piszcz
In-Reply-To: <47A972AB.5060107@openvz.org>
On Wednesday 06 February 2008 12:41:15 am Pavel Emelyanov wrote:
> Yinghai Lu wrote:
> > On Tuesday 05 February 2008 11:10:24 pm Pavel Emelyanov wrote:
> >> [snip]
> >>
> >>>>> What other info from me is required?
> >>> boot log please. with the patch and reverting the patch.
> >> Here they are (attached).
> >> BTW, I found, that the sky2 adapter is broken by this patch as well.
> >> To simplify the analysis, here's their diff:
> >>
> >> --- bad-log 2008-02-06 10:06:40.000000000 +0300
> >> +++ good-log 2008-02-06 10:06:40.000000000 +0300
> >> @@ -1,4 +1,4 @@
> >> -Linux version 2.6.24 (pavel@xemulnb) (gcc version 4.1.3 20070724 (prerelease) (SUSE Linux)) #22 SMP Tue Feb 5 20:09:11 MSK 2008
> >> +Linux version 2.6.24 (pavel@xemulnb) (gcc version 4.1.3 20070724 (prerelease) (SUSE Linux)) #23 SMP Wed Feb 6 10:03:53 MSK 2008
> >> BIOS-provided physical RAM map:
> >> BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
> >> BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
> >> @@ -19,29 +19,6 @@ Scan SMP from c0000000 for 1024 bytes.
> >> Scan SMP from c009fc00 for 1024 bytes.
> >> Scan SMP from c00f0000 for 65536 bytes.
> >> found SMP MP-table at [c00ff780] 000ff780
> >> -***************
> >> -**** WARNING: likely BIOS bug
> >> -**** MTRRs don't cover all of memory, trimmed 786432 pages
> >> -***************
> >> -update e820 for mtrr
> >> -modified physical RAM map:
> >> - modified: 0000000000000000 - 000000000009f800 (usable)
> >> - modified: 000000000009f800 - 00000000000a0000 (reserved)
> >> - modified: 00000000000e0000 - 0000000000100000 (reserved)
> >> - modified: 0000000000100000 - 0000000040000000 (usable)
> >> - modified: 0000000040000000 - 00000000bfff0000 (reserved)
> >> - modified: 00000000bfff0000 - 00000000bffff000 (ACPI data)
> >> - modified: 00000000bffff000 - 00000000c0000000 (ACPI NVS)
> >> - modified: 00000000c0000000 - 0000000100000000 (reserved)
> >> - modified: 0000000100000000 - 0000000140000000 (usable)
> >
> > the root cause could be your mtrr last entry for RAM has strange type
> >
> > please apply the following line to print the mtrr before trimming to current linus tree.
>
> OK, here's the dmesg diff:
> --- bad-log 2008-02-06 10:01:21.000000000 +0300
> +++ bad-log-info 2008-02-06 11:37:51.000000000 +0300
> @@ -19,6 +19,14 @@ Scan SMP from c0000000 for 1024 bytes.
> Scan SMP from c009fc00 for 1024 bytes.
> Scan SMP from c00f0000 for 65536 bytes.
> found SMP MP-table at [c00ff780] 000ff780
> +i=0 c0000 - 100000 0
> +i=1 0 - 100000 6
> +i=2 100000 - 140000 6
> +i=3 0 - 0 0
> +i=4 0 - 0 0
> +i=5 0 - 0 0
> +i=6 0 - 0 0
> +i=7 0 - 0 0
> ***************
> **** WARNING: likely BIOS bug
> **** MTRRs don't cover all of memory, trimmed 786432 pages
please try following patch
diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
index 1e27b69..4e7490f 100644
--- a/arch/x86/kernel/cpu/mtrr/main.c
+++ b/arch/x86/kernel/cpu/mtrr/main.c
@@ -659,7 +659,7 @@ static __init int amd_special_default_mtrr(void)
*/
int __init mtrr_trim_uncached_memory(unsigned long end_pfn)
{
- unsigned long i, base, size, highest_addr = 0, def, dummy;
+ unsigned long i, base, size, highest_pfn = 0, def, dummy;
mtrr_type type;
u64 trim_start, trim_size;
@@ -682,28 +682,27 @@ int __init mtrr_trim_uncached_memory(unsigned long end_pfn)
mtrr_if->get(i, &base, &size, &type);
if (type != MTRR_TYPE_WRBACK)
continue;
- base <<= PAGE_SHIFT;
- size <<= PAGE_SHIFT;
- if (highest_addr < base + size)
- highest_addr = base + size;
+ if (highest_pfn < base + size)
+ highest_pfn = base + size;
}
/* kvm/qemu doesn't have mtrr set right, don't trim them all */
- if (!highest_addr) {
+ if (!highest_pfn) {
printk(KERN_WARNING "WARNING: strange, CPU MTRRs all blank?\n");
WARN_ON(1);
return 0;
}
- if ((highest_addr >> PAGE_SHIFT) < end_pfn) {
+ if (highest_pfn < end_pfn) {
printk(KERN_WARNING "WARNING: BIOS bug: CPU MTRRs don't cover"
" all of memory, losing %LdMB of RAM.\n",
- (((u64)end_pfn << PAGE_SHIFT) - highest_addr) >> 20);
+ (end_pfn - highest_pfn) >> (20 - PAGE_SHIFT));
WARN_ON(1);
printk(KERN_INFO "update e820 for mtrr\n");
- trim_start = highest_addr;
+ trim_start = highest_pfn;
+ trim_start <<= PAGE_SHIFT;
trim_size = end_pfn;
trim_size <<= PAGE_SHIFT;
trim_size -= trim_start;
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
^ permalink raw reply related
* [BUG][AX25] Fwd: SMP with AX.25
From: Jarek Poplawski @ 2008-02-06 9:30 UTC (permalink / raw)
To: Jann Traschewski; +Cc: Ralf Baechle, netdev
In-Reply-To: <20080206074529.GC4496@ff.dom.local>
On Wed, Feb 06, 2008 at 07:45:29AM +0000, Jarek Poplawski wrote:
...
> From: Jann Traschewski <jann@gmx.de>
> Subject: SMP with AX.25
> To: jarkao2@gmail.com
According to one of OOPSes reported by Jann softirq can break
while skb is prepared for netif_rx. The report isn't complete,
so the real reason of the later bug could be different, but
IMHO this locking in ax_bump is wrong.
I attach this patch for testing purpose only.
Jarek P.
---
drivers/net/hamradio/mkiss.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c
index cfcd15a..30c9b3b 100644
--- a/drivers/net/hamradio/mkiss.c
+++ b/drivers/net/hamradio/mkiss.c
@@ -289,7 +289,6 @@ static void ax_bump(struct mkiss *ax)
*ax->rbuff &= ~0x20;
}
}
- spin_unlock_bh(&ax->buflock);
count = ax->rcount;
@@ -297,17 +296,17 @@ static void ax_bump(struct mkiss *ax)
printk(KERN_ERR "mkiss: %s: memory squeeze, dropping packet.\n",
ax->dev->name);
ax->stats.rx_dropped++;
+ spin_unlock_bh(&ax->buflock);
return;
}
- spin_lock_bh(&ax->buflock);
memcpy(skb_put(skb,count), ax->rbuff, count);
- spin_unlock_bh(&ax->buflock);
skb->protocol = ax25_type_trans(skb, ax->dev);
netif_rx(skb);
ax->dev->last_rx = jiffies;
ax->stats.rx_packets++;
ax->stats.rx_bytes += count;
+ spin_unlock_bh(&ax->buflock);
}
static void kiss_unesc(struct mkiss *ax, unsigned char s)
^ permalink raw reply related
* [patch 00/14] replace __inline__ by inline in net code
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
The following patchset replaces all occurences of __inline__
by inline and make some minor coding style fixes.
It touches:
. net/* files
. include/net/* files
. include/linux/* files (only the ones related to the network)
The patchset touches a lot of files and that can probably increase
the patch conflict probability, but I have this patchset since a
few days, I didn't noticed any problem when updating net-2.6 and I
hope that will be still the case.
IMHO, it is the right moment to send this patch out, since net-2.6.25
is closed and net-2.6.26 is not yet opened.
--
^ permalink raw reply
* [patch 01/14] replace __inline__ by inline in net/ipv4
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-ipv4.patch --]
[-- Type: text/plain, Size: 8195 bytes --]
replace __inline__ by inline in net/ipv4
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/ipv4/devinet.c | 2 +-
net/ipv4/fib_semantics.c | 2 +-
net/ipv4/igmp.c | 2 +-
net/ipv4/ip_fragment.c | 8 ++++----
net/ipv4/ip_output.c | 2 +-
net/ipv4/ipvs/ip_vs_ctl.c | 15 ++++++++-------
net/ipv4/raw.c | 2 +-
net/ipv4/route.c | 10 +++++-----
net/ipv4/tcp_minisocks.c | 2 +-
net/ipv4/tcp_output.c | 5 +++--
10 files changed, 26 insertions(+), 24 deletions(-)
Index: net-2.6/net/ipv4/devinet.c
===================================================================
--- net-2.6.orig/net/ipv4/devinet.c
+++ net-2.6/net/ipv4/devinet.c
@@ -574,7 +574,7 @@ static int inet_rtm_newaddr(struct sk_bu
* Determine a default network mask, based on the IP address.
*/
-static __inline__ int inet_abc_len(__be32 addr)
+static inline int inet_abc_len(__be32 addr)
{
int rc = -1; /* Something else, probably a multicast. */
Index: net-2.6/net/ipv4/fib_semantics.c
===================================================================
--- net-2.6.orig/net/ipv4/fib_semantics.c
+++ net-2.6/net/ipv4/fib_semantics.c
@@ -173,7 +173,7 @@ void fib_release_info(struct fib_info *f
spin_unlock_bh(&fib_info_lock);
}
-static __inline__ int nh_comp(const struct fib_info *fi, const struct fib_info *ofi)
+static inline int nh_comp(const struct fib_info *fi, const struct fib_info *ofi)
{
const struct fib_nh *onh = ofi->fib_nh;
Index: net-2.6/net/ipv4/igmp.c
===================================================================
--- net-2.6.orig/net/ipv4/igmp.c
+++ net-2.6/net/ipv4/igmp.c
@@ -164,7 +164,7 @@ static void ip_ma_put(struct ip_mc_list
* Timer management
*/
-static __inline__ void igmp_stop_timer(struct ip_mc_list *im)
+static inline void igmp_stop_timer(struct ip_mc_list *im)
{
spin_lock_bh(&im->lock);
if (del_timer(&im->timer))
Index: net-2.6/net/ipv4/ip_fragment.c
===================================================================
--- net-2.6.orig/net/ipv4/ip_fragment.c
+++ net-2.6/net/ipv4/ip_fragment.c
@@ -123,8 +123,8 @@ static int ip4_frag_match(struct inet_fr
}
/* Memory Tracking Functions. */
-static __inline__ void frag_kfree_skb(struct netns_frags *nf,
- struct sk_buff *skb, int *work)
+static inline void frag_kfree_skb(struct netns_frags *nf,
+ struct sk_buff *skb, int *work)
{
if (work)
*work -= skb->truesize;
@@ -146,7 +146,7 @@ static void ip4_frag_init(struct inet_fr
inet_getpeer(arg->iph->saddr, 1) : NULL;
}
-static __inline__ void ip4_frag_free(struct inet_frag_queue *q)
+static inline void ip4_frag_free(struct inet_frag_queue *q)
{
struct ipq *qp;
@@ -158,7 +158,7 @@ static __inline__ void ip4_frag_free(str
/* Destruction primitives. */
-static __inline__ void ipq_put(struct ipq *ipq)
+static inline void ipq_put(struct ipq *ipq)
{
inet_frag_put(&ipq->q, &ip4_frags);
}
Index: net-2.6/net/ipv4/ip_output.c
===================================================================
--- net-2.6.orig/net/ipv4/ip_output.c
+++ net-2.6/net/ipv4/ip_output.c
@@ -85,7 +85,7 @@
int sysctl_ip_default_ttl __read_mostly = IPDEFTTL;
/* Generate a checksum for an outgoing IP datagram. */
-__inline__ void ip_send_check(struct iphdr *iph)
+inline void ip_send_check(struct iphdr *iph)
{
iph->check = 0;
iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl);
Index: net-2.6/net/ipv4/raw.c
===================================================================
--- net-2.6.orig/net/ipv4/raw.c
+++ net-2.6/net/ipv4/raw.c
@@ -139,7 +139,7 @@ found:
* 0 - deliver
* 1 - block
*/
-static __inline__ int icmp_filter(struct sock *sk, struct sk_buff *skb)
+static inline int icmp_filter(struct sock *sk, struct sk_buff *skb)
{
int type;
Index: net-2.6/net/ipv4/route.c
===================================================================
--- net-2.6.orig/net/ipv4/route.c
+++ net-2.6/net/ipv4/route.c
@@ -572,18 +572,18 @@ static inline int ip_rt_proc_init(struct
}
#endif /* CONFIG_PROC_FS */
-static __inline__ void rt_free(struct rtable *rt)
+static inline void rt_free(struct rtable *rt)
{
call_rcu_bh(&rt->u.dst.rcu_head, dst_rcu_free);
}
-static __inline__ void rt_drop(struct rtable *rt)
+static inline void rt_drop(struct rtable *rt)
{
ip_rt_put(rt);
call_rcu_bh(&rt->u.dst.rcu_head, dst_rcu_free);
}
-static __inline__ int rt_fast_clean(struct rtable *rth)
+static inline int rt_fast_clean(struct rtable *rth)
{
/* Kill broadcast/multicast entries very aggresively, if they
collide in hash table with more useful entries */
@@ -591,7 +591,7 @@ static __inline__ int rt_fast_clean(stru
rth->fl.iif && rth->u.dst.rt_next;
}
-static __inline__ int rt_valuable(struct rtable *rth)
+static inline int rt_valuable(struct rtable *rth)
{
return (rth->rt_flags & (RTCF_REDIRECTED | RTCF_NOTIFY)) ||
rth->u.dst.expires;
@@ -1389,7 +1389,7 @@ out: kfree_skb(skb);
static const unsigned short mtu_plateau[] =
{32000, 17914, 8166, 4352, 2002, 1492, 576, 296, 216, 128 };
-static __inline__ unsigned short guess_mtu(unsigned short old_mtu)
+static inline unsigned short guess_mtu(unsigned short old_mtu)
{
int i;
Index: net-2.6/net/ipv4/tcp_minisocks.c
===================================================================
--- net-2.6.orig/net/ipv4/tcp_minisocks.c
+++ net-2.6/net/ipv4/tcp_minisocks.c
@@ -55,7 +55,7 @@ struct inet_timewait_death_row tcp_death
EXPORT_SYMBOL_GPL(tcp_death_row);
-static __inline__ int tcp_in_window(u32 seq, u32 end_seq, u32 s_win, u32 e_win)
+static inline int tcp_in_window(u32 seq, u32 end_seq, u32 s_win, u32 e_win)
{
if (seq == s_win)
return 1;
Index: net-2.6/net/ipv4/tcp_output.c
===================================================================
--- net-2.6.orig/net/ipv4/tcp_output.c
+++ net-2.6/net/ipv4/tcp_output.c
@@ -1,3 +1,4 @@
+
/*
* INET An implementation of the TCP/IP protocol suite for the LINUX
* operating system. INET is implemented using the BSD Socket
@@ -296,8 +297,8 @@ static inline void TCP_ECN_send_syn(stru
}
}
-static __inline__ void
-TCP_ECN_make_synack(struct request_sock *req, struct tcphdr *th)
+static inline void TCP_ECN_make_synack(struct request_sock *req,
+ struct tcphdr *th)
{
if (inet_rsk(req)->ecn_ok)
th->ece = 1;
Index: net-2.6/net/ipv4/ipvs/ip_vs_ctl.c
===================================================================
--- net-2.6.orig/net/ipv4/ipvs/ip_vs_ctl.c
+++ net-2.6/net/ipv4/ipvs/ip_vs_ctl.c
@@ -282,8 +282,8 @@ static atomic_t ip_vs_nullsvc_counter =
/*
* Returns hash value for virtual service
*/
-static __inline__ unsigned
-ip_vs_svc_hashkey(unsigned proto, __be32 addr, __be16 port)
+static inline unsigned ip_vs_svc_hashkey(unsigned proto, __be32 addr,
+ __be16 port)
{
register unsigned porth = ntohs(port);
@@ -294,7 +294,7 @@ ip_vs_svc_hashkey(unsigned proto, __be32
/*
* Returns hash value of fwmark for virtual service lookup
*/
-static __inline__ unsigned ip_vs_svc_fwm_hashkey(__u32 fwmark)
+static inline unsigned ip_vs_svc_fwm_hashkey(__u32 fwmark)
{
return fwmark & IP_VS_SVC_TAB_MASK;
}
@@ -364,8 +364,9 @@ static int ip_vs_svc_unhash(struct ip_vs
/*
* Get service by {proto,addr,port} in the service table.
*/
-static __inline__ struct ip_vs_service *
-__ip_vs_service_get(__u16 protocol, __be32 vaddr, __be16 vport)
+static inline struct ip_vs_service *__ip_vs_service_get(__u16 protocol,
+ __be32 vaddr,
+ __be16 vport)
{
unsigned hash;
struct ip_vs_service *svc;
@@ -390,7 +391,7 @@ __ip_vs_service_get(__u16 protocol, __be
/*
* Get service by {fwmark} in the service table.
*/
-static __inline__ struct ip_vs_service *__ip_vs_svc_fwm_get(__u32 fwmark)
+static inline struct ip_vs_service *__ip_vs_svc_fwm_get(__u32 fwmark)
{
unsigned hash;
struct ip_vs_service *svc;
@@ -480,7 +481,7 @@ __ip_vs_unbind_svc(struct ip_vs_dest *de
/*
* Returns hash value for real service
*/
-static __inline__ unsigned ip_vs_rs_hashkey(__be32 addr, __be16 port)
+static inline unsigned ip_vs_rs_hashkey(__be32 addr, __be16 port)
{
register unsigned porth = ntohs(port);
--
^ permalink raw reply
* [patch 03/14] replace __inline__ by inline in net/appletalk
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-appletalk.patch --]
[-- Type: text/plain, Size: 1529 bytes --]
replace __inline__ by inline in net/appletalk
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/appletalk/atalk_proc.c | 6 +++---
net/appletalk/ddp.c | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
Index: net-2.6/net/appletalk/atalk_proc.c
===================================================================
--- net-2.6.orig/net/appletalk/atalk_proc.c
+++ net-2.6/net/appletalk/atalk_proc.c
@@ -16,7 +16,7 @@
#include <linux/atalk.h>
-static __inline__ struct atalk_iface *atalk_get_interface_idx(loff_t pos)
+static inline struct atalk_iface *atalk_get_interface_idx(loff_t pos)
{
struct atalk_iface *i;
@@ -77,7 +77,7 @@ out:
return 0;
}
-static __inline__ struct atalk_route *atalk_get_route_idx(loff_t pos)
+static inline struct atalk_route *atalk_get_route_idx(loff_t pos)
{
struct atalk_route *r;
@@ -144,7 +144,7 @@ out:
return 0;
}
-static __inline__ struct sock *atalk_get_socket_idx(loff_t pos)
+static inline struct sock *atalk_get_socket_idx(loff_t pos)
{
struct sock *s;
struct hlist_node *node;
Index: net-2.6/net/appletalk/ddp.c
===================================================================
--- net-2.6.orig/net/appletalk/ddp.c
+++ net-2.6/net/appletalk/ddp.c
@@ -1265,7 +1265,7 @@ static int atalk_getname(struct socket *
}
#if defined(CONFIG_IPDDP) || defined(CONFIG_IPDDP_MODULE)
-static __inline__ int is_ip_over_ddp(struct sk_buff *skb)
+static inline int is_ip_over_ddp(struct sk_buff *skb)
{
return skb->data[12] == 22;
}
--
^ permalink raw reply
* [patch 04/14] replace __inline__ by inline in net/atm
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-atm.patch --]
[-- Type: text/plain, Size: 1071 bytes --]
replace __inline__ by inline in net/atm
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/atm/lec.c | 4 ++--
net/atm/resources.c | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
Index: net-2.6/net/atm/lec.c
===================================================================
--- net-2.6.orig/net/atm/lec.c
+++ net-2.6/net/atm/lec.c
@@ -226,8 +226,8 @@ static int lec_open(struct net_device *d
return 0;
}
-static __inline__ void
-lec_send(struct atm_vcc *vcc, struct sk_buff *skb, struct lec_priv *priv)
+static inline void lec_send(struct atm_vcc *vcc, struct sk_buff *skb,
+ struct lec_priv *priv)
{
ATM_SKB(skb)->vcc = vcc;
ATM_SKB(skb)->atm_options = vcc->atm_options;
Index: net-2.6/net/atm/resources.c
===================================================================
--- net-2.6.orig/net/atm/resources.c
+++ net-2.6/net/atm/resources.c
@@ -401,7 +401,7 @@ done:
return error;
}
-static __inline__ void *dev_get_idx(loff_t left)
+static inline void *dev_get_idx(loff_t left)
{
struct list_head *p;
--
^ permalink raw reply
* [patch 06/14] replace __inline__ by inline in net/decnet
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-decnet.patch --]
[-- Type: text/plain, Size: 3630 bytes --]
replace __inline__ by inline in net/decnet
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/decnet/dn_dev.c | 2 +-
net/decnet/dn_nsp_in.c | 3 ++-
net/decnet/dn_nsp_out.c | 9 +++++----
net/decnet/dn_route.c | 2 +-
net/decnet/dn_table.c | 18 +++++++++---------
5 files changed, 18 insertions(+), 16 deletions(-)
Index: net-2.6/net/decnet/dn_dev.c
===================================================================
--- net-2.6.orig/net/decnet/dn_dev.c
+++ net-2.6/net/decnet/dn_dev.c
@@ -390,7 +390,7 @@ static struct dn_ifaddr *dn_dev_alloc_if
return ifa;
}
-static __inline__ void dn_dev_free_ifa(struct dn_ifaddr *ifa)
+static inline void dn_dev_free_ifa(struct dn_ifaddr *ifa)
{
kfree(ifa);
}
Index: net-2.6/net/decnet/dn_nsp_in.c
===================================================================
--- net-2.6.orig/net/decnet/dn_nsp_in.c
+++ net-2.6/net/decnet/dn_nsp_in.c
@@ -573,7 +573,8 @@ out:
* bh_lock_sock() (its already held when this is called) which
* also allows data and other data to be queued to a socket.
*/
-static __inline__ int dn_queue_skb(struct sock *sk, struct sk_buff *skb, int sig, struct sk_buff_head *queue)
+static inline int dn_queue_skb(struct sock *sk, struct sk_buff *skb,
+ int sig, struct sk_buff_head *queue)
{
int err;
Index: net-2.6/net/decnet/dn_nsp_out.c
===================================================================
--- net-2.6.orig/net/decnet/dn_nsp_out.c
+++ net-2.6/net/decnet/dn_nsp_out.c
@@ -549,10 +549,11 @@ void dn_send_conn_conf(struct sock *sk,
}
-static __inline__ void dn_nsp_do_disc(struct sock *sk, unsigned char msgflg,
- unsigned short reason, gfp_t gfp,
- struct dst_entry *dst,
- int ddl, unsigned char *dd, __le16 rem, __le16 loc)
+static inline void dn_nsp_do_disc(struct sock *sk, unsigned char msgflg,
+ unsigned short reason, gfp_t gfp,
+ struct dst_entry *dst,
+ int ddl, unsigned char *dd, __le16 rem,
+ __le16 loc)
{
struct sk_buff *skb = NULL;
int size = 7 + ddl + ((msgflg == NSP_DISCINIT) ? 1 : 0);
Index: net-2.6/net/decnet/dn_route.c
===================================================================
--- net-2.6.orig/net/decnet/dn_route.c
+++ net-2.6/net/decnet/dn_route.c
@@ -135,7 +135,7 @@ static struct dst_ops dn_dst_ops = {
.entries = ATOMIC_INIT(0),
};
-static __inline__ unsigned dn_hash(__le16 src, __le16 dst)
+static inline unsigned dn_hash(__le16 src, __le16 dst)
{
__u16 tmp = (__u16 __force)(src ^ dst);
tmp ^= (tmp >> 3);
Index: net-2.6/net/decnet/dn_table.c
===================================================================
--- net-2.6.orig/net/decnet/dn_table.c
+++ net-2.6/net/decnet/dn_table.c
@@ -381,11 +381,11 @@ errout:
rtnl_set_sk_err(&init_net, RTNLGRP_DECnet_ROUTE, err);
}
-static __inline__ int dn_hash_dump_bucket(struct sk_buff *skb,
- struct netlink_callback *cb,
- struct dn_fib_table *tb,
- struct dn_zone *dz,
- struct dn_fib_node *f)
+static inline int dn_hash_dump_bucket(struct sk_buff *skb,
+ struct netlink_callback *cb,
+ struct dn_fib_table *tb,
+ struct dn_zone *dz,
+ struct dn_fib_node *f)
{
int i, s_i;
@@ -410,10 +410,10 @@ static __inline__ int dn_hash_dump_bucke
return skb->len;
}
-static __inline__ int dn_hash_dump_zone(struct sk_buff *skb,
- struct netlink_callback *cb,
- struct dn_fib_table *tb,
- struct dn_zone *dz)
+static inline int dn_hash_dump_zone(struct sk_buff *skb,
+ struct netlink_callback *cb,
+ struct dn_fib_table *tb,
+ struct dn_zone *dz)
{
int h, s_h;
--
^ permalink raw reply
* [patch 02/14] replace __inline__ by inline in net/ipv6
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-ipv6.patch --]
[-- Type: text/plain, Size: 9800 bytes --]
replace __inline__ by inline in net/ipv6
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/ipv6/af_inet6.c | 2 +-
net/ipv6/icmp.c | 6 +++---
net/ipv6/ip6_fib.c | 12 ++++++------
net/ipv6/ip6_flowlabel.c | 2 +-
net/ipv6/ip6_output.c | 2 +-
net/ipv6/netfilter/nf_conntrack_reasm.c | 8 ++++----
net/ipv6/raw.c | 2 +-
net/ipv6/reassembly.c | 11 ++++++-----
net/ipv6/route.c | 10 +++++-----
net/ipv6/tcp_ipv6.c | 2 +-
net/ipv6/udp.c | 8 ++++----
11 files changed, 33 insertions(+), 32 deletions(-)
Index: net-2.6/net/ipv6/af_inet6.c
===================================================================
--- net-2.6.orig/net/ipv6/af_inet6.c
+++ net-2.6/net/ipv6/af_inet6.c
@@ -72,7 +72,7 @@ MODULE_LICENSE("GPL");
static struct list_head inetsw6[SOCK_MAX];
static DEFINE_SPINLOCK(inetsw6_lock);
-static __inline__ struct ipv6_pinfo *inet6_sk_generic(struct sock *sk)
+static inline struct ipv6_pinfo *inet6_sk_generic(struct sock *sk)
{
const int offset = sk->sk_prot->obj_size - sizeof(struct ipv6_pinfo);
Index: net-2.6/net/ipv6/icmp.c
===================================================================
--- net-2.6.orig/net/ipv6/icmp.c
+++ net-2.6/net/ipv6/icmp.c
@@ -90,7 +90,7 @@ static struct inet6_protocol icmpv6_prot
.flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
};
-static __inline__ int icmpv6_xmit_lock(void)
+static inline int icmpv6_xmit_lock(void)
{
local_bh_disable();
@@ -105,7 +105,7 @@ static __inline__ int icmpv6_xmit_lock(v
return 0;
}
-static __inline__ void icmpv6_xmit_unlock(void)
+static inline void icmpv6_xmit_unlock(void)
{
spin_unlock_bh(&icmpv6_socket->sk->sk_lock.slock);
}
@@ -203,7 +203,7 @@ static inline int icmpv6_xrlim_allow(str
* highest-order two bits set to 10
*/
-static __inline__ int opt_unrec(struct sk_buff *skb, __u32 offset)
+static inline int opt_unrec(struct sk_buff *skb, __u32 offset)
{
u8 _optval, *op;
Index: net-2.6/net/ipv6/ip6_fib.c
===================================================================
--- net-2.6.orig/net/ipv6/ip6_fib.c
+++ net-2.6/net/ipv6/ip6_fib.c
@@ -120,7 +120,7 @@ static inline void fib6_walker_unlink(st
w->prev = w->next = w;
write_unlock_bh(&fib6_walker_lock);
}
-static __inline__ u32 fib6_new_sernum(void)
+static inline u32 fib6_new_sernum(void)
{
u32 n = ++rt_sernum;
if ((__s32)n <= 0)
@@ -139,14 +139,14 @@ static __inline__ u32 fib6_new_sernum(vo
* test bit
*/
-static __inline__ __be32 addr_bit_set(void *token, int fn_bit)
+static inline __be32 addr_bit_set(void *token, int fn_bit)
{
__be32 *addr = token;
return htonl(1 << ((~fn_bit)&0x1F)) & addr[fn_bit>>5];
}
-static __inline__ struct fib6_node * node_alloc(void)
+static inline struct fib6_node *node_alloc(void)
{
struct fib6_node *fn;
@@ -155,12 +155,12 @@ static __inline__ struct fib6_node * nod
return fn;
}
-static __inline__ void node_free(struct fib6_node * fn)
+static inline void node_free(struct fib6_node *fn)
{
kmem_cache_free(fib6_node_kmem, fn);
}
-static __inline__ void rt6_release(struct rt6_info *rt)
+static inline void rt6_release(struct rt6_info *rt)
{
if (atomic_dec_and_test(&rt->rt6i_ref))
dst_free(&rt->u.dst);
@@ -677,7 +677,7 @@ static int fib6_add_rt2node(struct fib6_
return 0;
}
-static __inline__ void fib6_start_gc(struct rt6_info *rt)
+static inline void fib6_start_gc(struct rt6_info *rt)
{
if (ip6_fib_timer.expires == 0 &&
(rt->rt6i_flags & (RTF_EXPIRES|RTF_CACHE)))
Index: net-2.6/net/ipv6/ip6_flowlabel.c
===================================================================
--- net-2.6.orig/net/ipv6/ip6_flowlabel.c
+++ net-2.6/net/ipv6/ip6_flowlabel.c
@@ -62,7 +62,7 @@ static DEFINE_RWLOCK(ip6_fl_lock);
static DEFINE_RWLOCK(ip6_sk_fl_lock);
-static __inline__ struct ip6_flowlabel * __fl_lookup(__be32 label)
+static inline struct ip6_flowlabel *__fl_lookup(__be32 label)
{
struct ip6_flowlabel *fl;
Index: net-2.6/net/ipv6/ip6_output.c
===================================================================
--- net-2.6.orig/net/ipv6/ip6_output.c
+++ net-2.6/net/ipv6/ip6_output.c
@@ -58,7 +58,7 @@
static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *));
-static __inline__ void ipv6_select_ident(struct sk_buff *skb, struct frag_hdr *fhdr)
+static inline void ipv6_select_ident(struct sk_buff *skb, struct frag_hdr *fhdr)
{
static u32 ipv6_fragmentation_id = 1;
static DEFINE_SPINLOCK(ip6_id_lock);
Index: net-2.6/net/ipv6/raw.c
===================================================================
--- net-2.6.orig/net/ipv6/raw.c
+++ net-2.6/net/ipv6/raw.c
@@ -116,7 +116,7 @@ found:
* 0 - deliver
* 1 - block
*/
-static __inline__ int icmpv6_filter(struct sock *sk, struct sk_buff *skb)
+static inline int icmpv6_filter(struct sock *sk, struct sk_buff *skb)
{
struct icmp6hdr *icmph;
struct raw6_sock *rp = raw6_sk(sk);
Index: net-2.6/net/ipv6/reassembly.c
===================================================================
--- net-2.6.orig/net/ipv6/reassembly.c
+++ net-2.6/net/ipv6/reassembly.c
@@ -171,7 +171,7 @@ EXPORT_SYMBOL(ip6_frag_init);
/* Destruction primitives. */
-static __inline__ void fq_put(struct frag_queue *fq)
+static inline void fq_put(struct frag_queue *fq)
{
inet_frag_put(&fq->q, &ip6_frags);
}
@@ -179,7 +179,7 @@ static __inline__ void fq_put(struct fra
/* Kill fq entry. It is not destroyed immediately,
* because caller (and someone more) holds reference count.
*/
-static __inline__ void fq_kill(struct frag_queue *fq)
+static inline void fq_kill(struct frag_queue *fq)
{
inet_frag_kill(&fq->q, &ip6_frags);
}
@@ -234,9 +234,10 @@ out:
fq_put(fq);
}
-static __inline__ struct frag_queue *
-fq_find(struct net *net, __be32 id, struct in6_addr *src, struct in6_addr *dst,
- struct inet6_dev *idev)
+static inline struct frag_queue *fq_find(struct net *net, __be32 id,
+ struct in6_addr *src,
+ struct in6_addr *dst,
+ struct inet6_dev *idev)
{
struct inet_frag_queue *q;
struct ip6_create_arg arg;
Index: net-2.6/net/ipv6/route.c
===================================================================
--- net-2.6.orig/net/ipv6/route.c
+++ net-2.6/net/ipv6/route.c
@@ -189,7 +189,7 @@ struct rt6_info ip6_blk_hole_entry = {
#endif
/* allocate dst with ip6_dst_ops */
-static __inline__ struct rt6_info *ip6_dst_alloc(void)
+static inline struct rt6_info *ip6_dst_alloc(void)
{
return (struct rt6_info *)dst_alloc(&ip6_dst_ops);
}
@@ -223,7 +223,7 @@ static void ip6_dst_ifdown(struct dst_en
}
}
-static __inline__ int rt6_check_expired(const struct rt6_info *rt)
+static inline int rt6_check_expired(const struct rt6_info *rt)
{
return (rt->rt6i_flags & RTF_EXPIRES &&
time_after(jiffies, rt->rt6i_expires));
@@ -239,9 +239,9 @@ static inline int rt6_need_strict(struct
* Route lookup. Any table->tb6_lock is implied.
*/
-static __inline__ struct rt6_info *rt6_device_match(struct rt6_info *rt,
- int oif,
- int strict)
+static inline struct rt6_info *rt6_device_match(struct rt6_info *rt,
+ int oif,
+ int strict)
{
struct rt6_info *local = NULL;
struct rt6_info *sprt;
Index: net-2.6/net/ipv6/tcp_ipv6.c
===================================================================
--- net-2.6.orig/net/ipv6/tcp_ipv6.c
+++ net-2.6/net/ipv6/tcp_ipv6.c
@@ -99,7 +99,7 @@ static void tcp_v6_hash(struct sock *sk)
}
}
-static __inline__ __sum16 tcp_v6_check(struct tcphdr *th, int len,
+static inline __sum16 tcp_v6_check(struct tcphdr *th, int len,
struct in6_addr *saddr,
struct in6_addr *daddr,
__wsum base)
Index: net-2.6/net/ipv6/udp.c
===================================================================
--- net-2.6.orig/net/ipv6/udp.c
+++ net-2.6/net/ipv6/udp.c
@@ -257,9 +257,9 @@ out:
sock_put(sk);
}
-static __inline__ void udpv6_err(struct sk_buff *skb,
- struct inet6_skb_parm *opt, int type,
- int code, int offset, __be32 info )
+static inline void udpv6_err(struct sk_buff *skb,
+ struct inet6_skb_parm *opt, int type,
+ int code, int offset, __be32 info)
{
__udp6_lib_err(skb, opt, type, code, offset, info, udp_hash);
}
@@ -519,7 +519,7 @@ discard:
return 0;
}
-static __inline__ int udpv6_rcv(struct sk_buff *skb)
+static inline int udpv6_rcv(struct sk_buff *skb)
{
return __udp6_lib_rcv(skb, udp_hash, IPPROTO_UDP);
}
Index: net-2.6/net/ipv6/netfilter/nf_conntrack_reasm.c
===================================================================
--- net-2.6.orig/net/ipv6/netfilter/nf_conntrack_reasm.c
+++ net-2.6/net/ipv6/netfilter/nf_conntrack_reasm.c
@@ -156,7 +156,7 @@ static inline void frag_kfree_skb(struct
/* Destruction primitives. */
-static __inline__ void fq_put(struct nf_ct_frag6_queue *fq)
+static inline void fq_put(struct nf_ct_frag6_queue *fq)
{
inet_frag_put(&fq->q, &nf_frags);
}
@@ -164,7 +164,7 @@ static __inline__ void fq_put(struct nf_
/* Kill fq entry. It is not destroyed immediately,
* because caller (and someone more) holds reference count.
*/
-static __inline__ void fq_kill(struct nf_ct_frag6_queue *fq)
+static inline void fq_kill(struct nf_ct_frag6_queue *fq)
{
inet_frag_kill(&fq->q, &nf_frags);
}
@@ -195,8 +195,8 @@ out:
/* Creation primitives. */
-static __inline__ struct nf_ct_frag6_queue *
-fq_find(__be32 id, struct in6_addr *src, struct in6_addr *dst)
+static inline struct nf_ct_frag6_queue *fq_find(__be32 id, struct in6_addr *src,
+ struct in6_addr *dst)
{
struct inet_frag_queue *q;
struct ip6_create_arg arg;
--
^ permalink raw reply
* [patch 07/14] replace __inline__ by inline in net/sched
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-sched.patch --]
[-- Type: text/plain, Size: 7851 bytes --]
replace __inline__ by inline in net/sched
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/sched/cls_fw.c | 2 +-
net/sched/cls_route.c | 10 +++++-----
net/sched/cls_u32.c | 10 +++++-----
net/sched/sch_cbq.c | 35 ++++++++++++++++-------------------
net/sched/sch_sfq.c | 2 +-
net/sched/sch_teql.c | 3 +--
6 files changed, 29 insertions(+), 33 deletions(-)
Index: net-2.6/net/sched/cls_fw.c
===================================================================
--- net-2.6.orig/net/sched/cls_fw.c
+++ net-2.6/net/sched/cls_fw.c
@@ -52,7 +52,7 @@ static const struct tcf_ext_map fw_ext_m
.police = TCA_FW_POLICE
};
-static __inline__ int fw_hash(u32 handle)
+static inline int fw_hash(u32 handle)
{
if (HTSIZE == 4096)
return ((handle >> 24) & 0xFFF) ^
Index: net-2.6/net/sched/cls_route.c
===================================================================
--- net-2.6.orig/net/sched/cls_route.c
+++ net-2.6/net/sched/cls_route.c
@@ -67,7 +67,7 @@ static const struct tcf_ext_map route_ex
.action = TCA_ROUTE4_ACT
};
-static __inline__ int route4_fastmap_hash(u32 id, int iif)
+static inline int route4_fastmap_hash(u32 id, int iif)
{
return id&0xF;
}
@@ -90,22 +90,22 @@ route4_set_fastmap(struct route4_head *h
head->fastmap[h].filter = f;
}
-static __inline__ int route4_hash_to(u32 id)
+static inline int route4_hash_to(u32 id)
{
return id&0xFF;
}
-static __inline__ int route4_hash_from(u32 id)
+static inline int route4_hash_from(u32 id)
{
return (id>>16)&0xF;
}
-static __inline__ int route4_hash_iif(int iif)
+static inline int route4_hash_iif(int iif)
{
return 16 + ((iif>>16)&0xF);
}
-static __inline__ int route4_hash_wild(void)
+static inline int route4_hash_wild(void)
{
return 32;
}
Index: net-2.6/net/sched/cls_u32.c
===================================================================
--- net-2.6.orig/net/sched/cls_u32.c
+++ net-2.6/net/sched/cls_u32.c
@@ -89,7 +89,7 @@ static const struct tcf_ext_map u32_ext_
static struct tc_u_common *u32_list;
-static __inline__ unsigned u32_hash_fold(u32 key, struct tc_u32_sel *sel, u8 fshift)
+static inline unsigned u32_hash_fold(u32 key, struct tc_u32_sel *sel, u8 fshift)
{
unsigned h = ntohl(key & sel->hmask)>>fshift;
@@ -217,8 +217,8 @@ deadloop:
return -1;
}
-static __inline__ struct tc_u_hnode *
-u32_lookup_ht(struct tc_u_common *tp_c, u32 handle)
+static inline struct tc_u_hnode *u32_lookup_ht(struct tc_u_common *tp_c,
+ u32 handle)
{
struct tc_u_hnode *ht;
@@ -229,8 +229,8 @@ u32_lookup_ht(struct tc_u_common *tp_c,
return ht;
}
-static __inline__ struct tc_u_knode *
-u32_lookup_key(struct tc_u_hnode *ht, u32 handle)
+static inline struct tc_u_knode *u32_lookup_key(struct tc_u_hnode *ht,
+ u32 handle)
{
unsigned sel;
struct tc_u_knode *n = NULL;
Index: net-2.6/net/sched/sch_cbq.c
===================================================================
--- net-2.6.orig/net/sched/sch_cbq.c
+++ net-2.6/net/sched/sch_cbq.c
@@ -178,15 +178,15 @@ struct cbq_sched_data
#define L2T(cl,len) qdisc_l2t((cl)->R_tab,len)
-static __inline__ unsigned cbq_hash(u32 h)
+static inline unsigned cbq_hash(u32 h)
{
h ^= h>>8;
h ^= h>>4;
return h&0xF;
}
-static __inline__ struct cbq_class *
-cbq_class_lookup(struct cbq_sched_data *q, u32 classid)
+static inline struct cbq_class *cbq_class_lookup(struct cbq_sched_data *q,
+ u32 classid)
{
struct cbq_class *cl;
@@ -303,7 +303,7 @@ fallback:
of its priority band.
*/
-static __inline__ void cbq_activate_class(struct cbq_class *cl)
+static inline void cbq_activate_class(struct cbq_class *cl)
{
struct cbq_sched_data *q = qdisc_priv(cl->qdisc);
int prio = cl->cpriority;
@@ -706,9 +706,9 @@ static int cbq_reshape_fail(struct sk_bu
Probably, it is wrong. This question needs further investigation.
*/
-static __inline__ void
-cbq_update_toplevel(struct cbq_sched_data *q, struct cbq_class *cl,
- struct cbq_class *borrowed)
+static inline void cbq_update_toplevel(struct cbq_sched_data *q,
+ struct cbq_class *cl,
+ struct cbq_class *borrowed)
{
if (cl && q->toplevel >= borrowed->level) {
if (cl->q->q.qlen > 1) {
@@ -811,8 +811,7 @@ cbq_update(struct cbq_sched_data *q)
cbq_update_toplevel(q, this, q->tx_borrowed);
}
-static __inline__ struct cbq_class *
-cbq_under_limit(struct cbq_class *cl)
+static inline struct cbq_class *cbq_under_limit(struct cbq_class *cl)
{
struct cbq_sched_data *q = qdisc_priv(cl->qdisc);
struct cbq_class *this_cl = cl;
@@ -849,8 +848,7 @@ cbq_under_limit(struct cbq_class *cl)
return cl;
}
-static __inline__ struct sk_buff *
-cbq_dequeue_prio(struct Qdisc *sch, int prio)
+static inline struct sk_buff *cbq_dequeue_prio(struct Qdisc *sch, int prio)
{
struct cbq_sched_data *q = qdisc_priv(sch);
struct cbq_class *cl_tail, *cl_prev, *cl;
@@ -952,8 +950,7 @@ next_class:
return NULL;
}
-static __inline__ struct sk_buff *
-cbq_dequeue_1(struct Qdisc *sch)
+static inline struct sk_buff *cbq_dequeue_1(struct Qdisc *sch)
{
struct cbq_sched_data *q = qdisc_priv(sch);
struct sk_buff *skb;
@@ -1443,7 +1440,7 @@ static int cbq_init(struct Qdisc *sch, s
return 0;
}
-static __inline__ int cbq_dump_rate(struct sk_buff *skb, struct cbq_class *cl)
+static inline int cbq_dump_rate(struct sk_buff *skb, struct cbq_class *cl)
{
unsigned char *b = skb_tail_pointer(skb);
@@ -1455,7 +1452,7 @@ nla_put_failure:
return -1;
}
-static __inline__ int cbq_dump_lss(struct sk_buff *skb, struct cbq_class *cl)
+static inline int cbq_dump_lss(struct sk_buff *skb, struct cbq_class *cl)
{
unsigned char *b = skb_tail_pointer(skb);
struct tc_cbq_lssopt opt;
@@ -1480,7 +1477,7 @@ nla_put_failure:
return -1;
}
-static __inline__ int cbq_dump_wrr(struct sk_buff *skb, struct cbq_class *cl)
+static inline int cbq_dump_wrr(struct sk_buff *skb, struct cbq_class *cl)
{
unsigned char *b = skb_tail_pointer(skb);
struct tc_cbq_wrropt opt;
@@ -1498,7 +1495,7 @@ nla_put_failure:
return -1;
}
-static __inline__ int cbq_dump_ovl(struct sk_buff *skb, struct cbq_class *cl)
+static inline int cbq_dump_ovl(struct sk_buff *skb, struct cbq_class *cl)
{
unsigned char *b = skb_tail_pointer(skb);
struct tc_cbq_ovl opt;
@@ -1515,7 +1512,7 @@ nla_put_failure:
return -1;
}
-static __inline__ int cbq_dump_fopt(struct sk_buff *skb, struct cbq_class *cl)
+static inline int cbq_dump_fopt(struct sk_buff *skb, struct cbq_class *cl)
{
unsigned char *b = skb_tail_pointer(skb);
struct tc_cbq_fopt opt;
@@ -1534,7 +1531,7 @@ nla_put_failure:
}
#ifdef CONFIG_NET_CLS_ACT
-static __inline__ int cbq_dump_police(struct sk_buff *skb, struct cbq_class *cl)
+static inline int cbq_dump_police(struct sk_buff *skb, struct cbq_class *cl)
{
unsigned char *b = skb_tail_pointer(skb);
struct tc_cbq_police opt;
Index: net-2.6/net/sched/sch_sfq.c
===================================================================
--- net-2.6.orig/net/sched/sch_sfq.c
+++ net-2.6/net/sched/sch_sfq.c
@@ -109,7 +109,7 @@ struct sfq_sched_data
struct sfq_head dep[SFQ_DEPTH*2]; /* Linked list of slots, indexed by depth */
};
-static __inline__ unsigned sfq_fold_hash(struct sfq_sched_data *q, u32 h, u32 h1)
+static inline unsigned sfq_fold_hash(struct sfq_sched_data *q, u32 h, u32 h1)
{
return jhash_2words(h, h1, q->perturbation) & (SFQ_HASH_DIVISOR - 1);
}
Index: net-2.6/net/sched/sch_teql.c
===================================================================
--- net-2.6.orig/net/sched/sch_teql.c
+++ net-2.6/net/sched/sch_teql.c
@@ -121,8 +121,7 @@ teql_dequeue(struct Qdisc* sch)
return skb;
}
-static __inline__ void
-teql_neigh_release(struct neighbour *n)
+static inline void teql_neigh_release(struct neighbour *n)
{
if (n)
neigh_release(n);
--
^ permalink raw reply
* [patch 09/14] replace __inline__ by inline in net/llc
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-llc.patch --]
[-- Type: text/plain, Size: 1259 bytes --]
replace __inline__ by inline in net/llc
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/llc/llc_input.c | 2 +-
net/llc/llc_station.c | 3 +--
2 files changed, 2 insertions(+), 3 deletions(-)
Index: net-2.6/net/llc/llc_input.c
===================================================================
--- net-2.6.orig/net/llc/llc_input.c
+++ net-2.6/net/llc/llc_input.c
@@ -61,7 +61,7 @@ void llc_set_station_handler(void (*hand
*
* This function returns which LLC component must handle this PDU.
*/
-static __inline__ int llc_pdu_type(struct sk_buff *skb)
+static inline int llc_pdu_type(struct sk_buff *skb)
{
int type = LLC_DEST_CONN; /* I-PDU or S-PDU type */
struct llc_pdu_sn *pdu = llc_pdu_sn_hdr(skb);
Index: net-2.6/net/llc/llc_station.c
===================================================================
--- net-2.6.orig/net/llc/llc_station.c
+++ net-2.6/net/llc/llc_station.c
@@ -80,8 +80,7 @@ struct llc_station_state_ev {
struct list_head node; /* node in station->ev_q.list */
};
-static __inline__ struct llc_station_state_ev *
- llc_station_ev(struct sk_buff *skb)
+static inline struct llc_station_state_ev *llc_station_ev(struct sk_buff *skb)
{
return (struct llc_station_state_ev *)skb->cb;
}
--
^ permalink raw reply
* [patch 05/14] replace __inline__ by inline in net/core
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-core.patch --]
[-- Type: text/plain, Size: 1597 bytes --]
replace __inline__ by inline in net/core
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/core/neighbour.c | 2 +-
net/core/pktgen.c | 2 +-
net/core/scm.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
Index: net-2.6/net/core/neighbour.c
===================================================================
--- net-2.6.orig/net/core/neighbour.c
+++ net-2.6/net/core/neighbour.c
@@ -732,7 +732,7 @@ next_elt:
write_unlock(&tbl->lock);
}
-static __inline__ int neigh_max_probes(struct neighbour *n)
+static inline int neigh_max_probes(struct neighbour *n)
{
struct neigh_parms *p = n->parms;
return (n->nud_state & NUD_PROBE ?
Index: net-2.6/net/core/pktgen.c
===================================================================
--- net-2.6.orig/net/core/pktgen.c
+++ net-2.6/net/core/pktgen.c
@@ -3259,7 +3259,7 @@ static void pktgen_rem_thread(struct pkt
mutex_unlock(&pktgen_thread_lock);
}
-static __inline__ void pktgen_xmit(struct pktgen_dev *pkt_dev)
+static inline void pktgen_xmit(struct pktgen_dev *pkt_dev)
{
struct net_device *odev = NULL;
__u64 idle_start = 0;
Index: net-2.6/net/core/scm.c
===================================================================
--- net-2.6.orig/net/core/scm.c
+++ net-2.6/net/core/scm.c
@@ -42,7 +42,7 @@
* setu(g)id.
*/
-static __inline__ int scm_check_creds(struct ucred *creds)
+static inline int scm_check_creds(struct ucred *creds)
{
if ((creds->pid == task_tgid_vnr(current) || capable(CAP_SYS_ADMIN)) &&
((creds->uid == current->uid || creds->uid == current->euid ||
--
^ permalink raw reply
* [patch 10/14] replace __inline__ by inline in net/lapb
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-lapb.patch --]
[-- Type: text/plain, Size: 766 bytes --]
replace __inline__ by inline in net/lapb
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/lapb/lapb_iface.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: net-2.6/net/lapb/lapb_iface.c
===================================================================
--- net-2.6.orig/net/lapb/lapb_iface.c
+++ net-2.6/net/lapb/lapb_iface.c
@@ -50,12 +50,12 @@ static void lapb_free_cb(struct lapb_cb
kfree(lapb);
}
-static __inline__ void lapb_hold(struct lapb_cb *lapb)
+static inline void lapb_hold(struct lapb_cb *lapb)
{
atomic_inc(&lapb->refcnt);
}
-static __inline__ void lapb_put(struct lapb_cb *lapb)
+static inline void lapb_put(struct lapb_cb *lapb)
{
if (atomic_dec_and_test(&lapb->refcnt))
lapb_free_cb(lapb);
--
^ permalink raw reply
* [patch 12/14] replace __inline__ by inline in net/ipx
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-ipx.patch --]
[-- Type: text/plain, Size: 1563 bytes --]
replace __inline__ by inline in net/ipx
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/ipx/af_ipx.c | 2 +-
net/ipx/ipx_proc.c | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
Index: net-2.6/net/ipx/af_ipx.c
===================================================================
--- net-2.6.orig/net/ipx/af_ipx.c
+++ net-2.6/net/ipx/af_ipx.c
@@ -323,7 +323,7 @@ void ipxitf_down(struct ipx_interface *i
spin_unlock_bh(&ipx_interfaces_lock);
}
-static __inline__ void __ipxitf_put(struct ipx_interface *intrfc)
+static inline void __ipxitf_put(struct ipx_interface *intrfc)
{
if (atomic_dec_and_test(&intrfc->refcnt))
__ipxitf_down(intrfc);
Index: net-2.6/net/ipx/ipx_proc.c
===================================================================
--- net-2.6.orig/net/ipx/ipx_proc.c
+++ net-2.6/net/ipx/ipx_proc.c
@@ -13,7 +13,7 @@
#include <net/tcp_states.h>
#include <net/ipx.h>
-static __inline__ struct ipx_interface *ipx_get_interface_idx(loff_t pos)
+static inline struct ipx_interface *ipx_get_interface_idx(loff_t pos)
{
struct ipx_interface *i;
@@ -107,7 +107,7 @@ static struct ipx_route *ipx_routes_next
return rc;
}
-static __inline__ struct ipx_route *ipx_get_route_idx(loff_t pos)
+static inline struct ipx_route *ipx_get_route_idx(loff_t pos)
{
struct ipx_route *r;
@@ -165,7 +165,7 @@ out:
return 0;
}
-static __inline__ struct sock *ipx_get_socket_idx(loff_t pos)
+static inline struct sock *ipx_get_socket_idx(loff_t pos)
{
struct sock *s = NULL;
struct hlist_node *node;
--
^ permalink raw reply
* [patch 14/14] replace __inline__ by inline in include/linux (net related)
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-include-linux.patch --]
[-- Type: text/plain, Size: 5853 bytes --]
replace __inline__ by inline in include/linux (net related)
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
include/linux/atm.h | 4 ++--
include/linux/atmsap.h | 2 +-
include/linux/hdlc.h | 13 +++++++------
include/linux/inetdevice.h | 14 ++++++--------
include/linux/netlink.h | 5 +++--
include/linux/rtnetlink.h | 2 +-
6 files changed, 20 insertions(+), 20 deletions(-)
Index: net-2.6/include/linux/atm.h
===================================================================
--- net-2.6.orig/include/linux/atm.h
+++ net-2.6/include/linux/atm.h
@@ -217,13 +217,13 @@ struct sockaddr_atmsvc {
};
-static __inline__ int atmsvc_addr_in_use(struct sockaddr_atmsvc addr)
+static inline int atmsvc_addr_in_use(struct sockaddr_atmsvc addr)
{
return *addr.sas_addr.prv || *addr.sas_addr.pub;
}
-static __inline__ int atmpvc_addr_in_use(struct sockaddr_atmpvc addr)
+static inline int atmpvc_addr_in_use(struct sockaddr_atmpvc addr)
{
return addr.sap_addr.itf || addr.sap_addr.vpi || addr.sap_addr.vci;
}
Index: net-2.6/include/linux/atmsap.h
===================================================================
--- net-2.6.orig/include/linux/atmsap.h
+++ net-2.6/include/linux/atmsap.h
@@ -154,7 +154,7 @@ struct atm_sap {
};
-static __inline__ int blli_in_use(struct atm_blli blli)
+static inline int blli_in_use(struct atm_blli blli)
{
return blli.l2_proto || blli.l3_proto;
}
Index: net-2.6/include/linux/hdlc.h
===================================================================
--- net-2.6.orig/include/linux/hdlc.h
+++ net-2.6/include/linux/hdlc.h
@@ -84,18 +84,19 @@ void unregister_hdlc_protocol(struct hdl
struct net_device *alloc_hdlcdev(void *priv);
-static __inline__ struct hdlc_device_desc* dev_to_desc(struct net_device *dev)
+static inline struct hdlc_device_desc
+*dev_to_desc(struct net_device *dev)
{
return netdev_priv(dev);
}
-static __inline__ hdlc_device* dev_to_hdlc(struct net_device *dev)
+static inline hdlc_device *dev_to_hdlc(struct net_device *dev)
{
return netdev_priv(dev) + sizeof(struct hdlc_device_desc);
}
-static __inline__ void debug_frame(const struct sk_buff *skb)
+static inline void debug_frame(const struct sk_buff *skb)
{
int i;
@@ -120,14 +121,14 @@ int attach_hdlc_protocol(struct net_devi
/* May be used by hardware driver to gain control over HDLC device */
void detach_hdlc_protocol(struct net_device *dev);
-static __inline__ struct net_device_stats *hdlc_stats(struct net_device *dev)
+static inline struct net_device_stats *hdlc_stats(struct net_device *dev)
{
return &dev_to_desc(dev)->stats;
}
-static __inline__ __be16 hdlc_type_trans(struct sk_buff *skb,
- struct net_device *dev)
+static inline __be16 hdlc_type_trans(struct sk_buff *skb,
+ struct net_device *dev)
{
hdlc_device *hdlc = dev_to_hdlc(dev);
Index: net-2.6/include/linux/inetdevice.h
===================================================================
--- net-2.6.orig/include/linux/inetdevice.h
+++ net-2.6/include/linux/inetdevice.h
@@ -136,7 +136,7 @@ extern __be32 inet_select_addr(const st
extern __be32 inet_confirm_addr(struct in_device *in_dev, __be32 dst, __be32 local, int scope);
extern struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, __be32 prefix, __be32 mask);
-static __inline__ int inet_ifa_match(__be32 addr, struct in_ifaddr *ifa)
+static inline int inet_ifa_match(__be32 addr, struct in_ifaddr *ifa)
{
return !((addr^ifa->ifa_address)&ifa->ifa_mask);
}
@@ -145,7 +145,7 @@ static __inline__ int inet_ifa_match(__b
* Check if a mask is acceptable.
*/
-static __inline__ int bad_mask(__be32 mask, __be32 addr)
+static inline int bad_mask(__be32 mask, __be32 addr)
{
__u32 hmask;
if (addr & (mask = ~mask))
@@ -173,8 +173,7 @@ static inline struct in_device *__in_dev
return in_dev;
}
-static __inline__ struct in_device *
-in_dev_get(const struct net_device *dev)
+static inline struct in_device *in_dev_get(const struct net_device *dev)
{
struct in_device *in_dev;
@@ -186,8 +185,7 @@ in_dev_get(const struct net_device *dev)
return in_dev;
}
-static __inline__ struct in_device *
-__in_dev_get_rtnl(const struct net_device *dev)
+static inline struct in_device *__in_dev_get_rtnl(const struct net_device *dev)
{
return (struct in_device*)dev->ip_ptr;
}
@@ -205,14 +203,14 @@ static inline void in_dev_put(struct in_
#endif /* __KERNEL__ */
-static __inline__ __be32 inet_make_mask(int logmask)
+static inline __be32 inet_make_mask(int logmask)
{
if (logmask)
return htonl(~((1<<(32-logmask))-1));
return 0;
}
-static __inline__ int inet_mask_len(__be32 mask)
+static inline int inet_mask_len(__be32 mask)
{
__u32 hmask = ntohl(mask);
if (!hmask)
Index: net-2.6/include/linux/netlink.h
===================================================================
--- net-2.6.orig/include/linux/netlink.h
+++ net-2.6/include/linux/netlink.h
@@ -229,8 +229,9 @@ struct netlink_notify
int protocol;
};
-static __inline__ struct nlmsghdr *
-__nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len, int flags)
+static inline struct nlmsghdr *__nlmsg_put(struct sk_buff *skb, u32 pid,
+ u32 seq, int type, int len,
+ int flags)
{
struct nlmsghdr *nlh;
int size = NLMSG_LENGTH(len);
Index: net-2.6/include/linux/rtnetlink.h
===================================================================
--- net-2.6.orig/include/linux/rtnetlink.h
+++ net-2.6/include/linux/rtnetlink.h
@@ -602,7 +602,7 @@ struct tcamsg
#include <linux/mutex.h>
-static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str)
+static inline int rtattr_strcmp(const struct rtattr *rta, const char *str)
{
int len = strlen(str) + 1;
return len > rta->rta_len || memcmp(RTA_DATA(rta), str, len);
--
^ permalink raw reply
* [patch 08/14] replace __inline__ by inline in net/x25
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-x25.patch --]
[-- Type: text/plain, Size: 1062 bytes --]
replace __inline__ by inline in net/x25
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/x25/x25_proc.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
Index: net-2.6/net/x25/x25_proc.c
===================================================================
--- net-2.6.orig/net/x25/x25_proc.c
+++ net-2.6/net/x25/x25_proc.c
@@ -25,7 +25,7 @@
#include <net/x25.h>
#ifdef CONFIG_PROC_FS
-static __inline__ struct x25_route *x25_get_route_idx(loff_t pos)
+static inline struct x25_route *x25_get_route_idx(loff_t pos)
{
struct list_head *route_entry;
struct x25_route *rt = NULL;
@@ -93,7 +93,7 @@ out:
return 0;
}
-static __inline__ struct sock *x25_get_socket_idx(loff_t pos)
+static inline struct sock *x25_get_socket_idx(loff_t pos)
{
struct sock *s;
struct hlist_node *node;
@@ -170,7 +170,7 @@ out:
return 0;
}
-static __inline__ struct x25_forward *x25_get_forward_idx(loff_t pos)
+static inline struct x25_forward *x25_get_forward_idx(loff_t pos)
{
struct x25_forward *f;
struct list_head *entry;
--
^ permalink raw reply
* [patch 11/14] replace __inline__ by inline in net/key
From: Daniel Lezcano @ 2008-02-06 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev
In-Reply-To: <20080206091405.581849582@mai.toulouse-stg.fr.ibm.com>
[-- Attachment #1: remove-__inline__-in-af_key.patch --]
[-- Type: text/plain, Size: 1007 bytes --]
replace __inline__ by inline in net/key
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
---
net/key/af_key.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
Index: net-2.6/net/key/af_key.c
===================================================================
--- net-2.6.orig/net/key/af_key.c
+++ net-2.6/net/key/af_key.c
@@ -92,13 +92,13 @@ static void pfkey_table_grab(void)
}
}
-static __inline__ void pfkey_table_ungrab(void)
+static inline void pfkey_table_ungrab(void)
{
write_unlock_bh(&pfkey_table_lock);
wake_up(&pfkey_table_wait);
}
-static __inline__ void pfkey_lock_table(void)
+static inline void pfkey_lock_table(void)
{
/* read_lock() synchronizes us to pfkey_table_grab */
@@ -107,7 +107,7 @@ static __inline__ void pfkey_lock_table(
read_unlock(&pfkey_table_lock);
}
-static __inline__ void pfkey_unlock_table(void)
+static inline void pfkey_unlock_table(void)
{
if (atomic_dec_and_test(&pfkey_table_users))
wake_up(&pfkey_table_wait);
--
^ 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