* [patch] IPV4 spinlock_casting
@ 2005-08-08 2:04 Sven-Thorsten Dietrich
2005-08-08 9:04 ` Ingo Molnar
0 siblings, 1 reply; 4+ messages in thread
From: Sven-Thorsten Dietrich @ 2005-08-08 2:04 UTC (permalink / raw)
To: Ingo Molnar; +Cc: dwalker, LKML
Fix a compile error in net/ipv4/route.c when RT patch is applied:
LD .tmp_vmlinux1
net/built-in.o(.text+0x19058): In function `rt_check_expire':
net/ipv4/route.c:628: undefined reference to `__bad_spinlock_type'
net/built-in.o(.text+0x1907a):net/ipv4/route.c:661: undefined reference to `__bad_spinlock_type'
net/built-in.o(.text+0x1918b): In function `rt_run_flush':
net/ipv4/route.c:684: undefined reference to `__bad_spinlock_type'
net/built-in.o(.text+0x191a3):net/ipv4/route.c:688: undefined reference to `__bad_spinlock_type'
net/built-in.o(.text+0x193b9): In function `rt_garbage_collect':
net/ipv4/route.c:821: undefined reference to `__bad_spinlock_type'
net/built-in.o(.text+0x193e7):net/ipv4/route.c:853: more undefined references to `__bad_spinlock_type' follow
make: *** [.tmp_vmlinux1] Error 1
Problem is related to the RT PICK_OP function.
Adds explicit casting to spinlock_t (whatever that happens to be for the
given .config)
Signed-off-by: Sven-Thorsten Dietrich <sdietrich@mvista.com>
Index: linux-2.6.13-rc4-RT-V0.7.52-14/net/ipv4/route.c
===================================================================
--- linux-2.6.13-rc4-RT-V0.7.52-14.orig/net/ipv4/route.c
+++ linux-2.6.13-rc4-RT-V0.7.52-14/net/ipv4/route.c
@@ -228,7 +228,7 @@
rt_hash_locks = kmalloc(sizeof(spinlock_t) * RT_HASH_LOCK_SZ, GFP_KERNEL); \
if (!rt_hash_locks) panic("IP: failed to allocate rt_hash_locks\n"); \
for (i = 0; i < RT_HASH_LOCK_SZ; i++) \
- spin_lock_init(&rt_hash_locks[i]); \
+ spin_lock_init((spinlock_t *) &rt_hash_locks[i]); \
}
#else
# define rt_hash_lock_addr(slot) NULL
@@ -625,7 +625,7 @@
if (*rthp == 0)
continue;
- spin_lock(rt_hash_lock_addr(i));
+ spin_lock((spinlock_t *) rt_hash_lock_addr(i));
while ((rth = *rthp) != NULL) {
if (rth->u.dst.expires) {
/* Entry is expired even if it is in use */
@@ -658,7 +658,7 @@
rt_free(rth);
#endif /* CONFIG_IP_ROUTE_MULTIPATH_CACHED */
}
- spin_unlock(rt_hash_lock_addr(i));
+ spin_unlock((spinlock_t *) rt_hash_lock_addr(i));
/* Fallback loop breaker. */
if (time_after(jiffies, now))
@@ -681,11 +681,11 @@
get_random_bytes(&rt_hash_rnd, 4);
for (i = rt_hash_mask; i >= 0; i--) {
- spin_lock_bh(rt_hash_lock_addr(i));
+ spin_lock_bh((spinlock_t *) rt_hash_lock_addr(i));
rth = rt_hash_table[i].chain;
if (rth)
rt_hash_table[i].chain = NULL;
- spin_unlock_bh(rt_hash_lock_addr(i));
+ spin_unlock_bh((spinlock_t *) rt_hash_lock_addr(i));
for (; rth; rth = next) {
next = rth->u.rt_next;
@@ -818,7 +818,7 @@
k = (k + 1) & rt_hash_mask;
rthp = &rt_hash_table[k].chain;
- spin_lock_bh(rt_hash_lock_addr(k));
+ spin_lock_bh((spinlock_t *) rt_hash_lock_addr(k));
while ((rth = *rthp) != NULL) {
if (!rt_may_expire(rth, tmo, expire)) {
tmo >>= 1;
@@ -850,7 +850,7 @@
goal--;
#endif /* CONFIG_IP_ROUTE_MULTIPATH_CACHED */
}
- spin_unlock_bh(rt_hash_lock_addr(k));
+ spin_unlock_bh((spinlock_t *)rt_hash_lock_addr(k));
if (goal <= 0)
break;
}
@@ -920,7 +920,7 @@
rthp = &rt_hash_table[hash].chain;
- spin_lock_bh(rt_hash_lock_addr(hash));
+ spin_lock_bh((spinlock_t *) rt_hash_lock_addr(hash));
while ((rth = *rthp) != NULL) {
#ifdef CONFIG_IP_ROUTE_MULTIPATH_CACHED
if (!(rth->u.dst.flags & DST_BALANCED) &&
@@ -946,7 +946,7 @@
rth->u.dst.__use++;
dst_hold(&rth->u.dst);
rth->u.dst.lastuse = now;
- spin_unlock_bh(rt_hash_lock_addr(hash));
+ spin_unlock_bh((spinlock_t *)rt_hash_lock_addr(hash));
rt_drop(rt);
*rp = rth;
@@ -987,7 +987,7 @@
if (rt->rt_type == RTN_UNICAST || rt->fl.iif == 0) {
int err = arp_bind_neighbour(&rt->u.dst);
if (err) {
- spin_unlock_bh(rt_hash_lock_addr(hash));
+ spin_unlock_bh((spinlock_t *)rt_hash_lock_addr(hash));
if (err != -ENOBUFS) {
rt_drop(rt);
@@ -1028,7 +1028,7 @@
}
#endif
rt_hash_table[hash].chain = rt;
- spin_unlock_bh(rt_hash_lock_addr(hash));
+ spin_unlock_bh((spinlock_t *)rt_hash_lock_addr(hash));
*rp = rt;
return 0;
}
@@ -1096,7 +1096,7 @@
{
struct rtable **rthp;
- spin_lock_bh(rt_hash_lock_addr(hash));
+ spin_lock_bh((spinlock_t *) rt_hash_lock_addr(hash));
ip_rt_put(rt);
for (rthp = &rt_hash_table[hash].chain; *rthp;
rthp = &(*rthp)->u.rt_next)
@@ -1105,7 +1105,7 @@
rt_free(rt);
break;
}
- spin_unlock_bh(rt_hash_lock_addr(hash));
+ spin_unlock_bh((spinlock_t *) rt_hash_lock_addr(hash));
}
void ip_rt_redirect(u32 old_gw, u32 daddr, u32 new_gw,
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch] IPV4 spinlock_casting
2005-08-08 2:04 [patch] IPV4 spinlock_casting Sven-Thorsten Dietrich
@ 2005-08-08 9:04 ` Ingo Molnar
2005-08-08 9:06 ` Ingo Molnar
0 siblings, 1 reply; 4+ messages in thread
From: Ingo Molnar @ 2005-08-08 9:04 UTC (permalink / raw)
To: Sven-Thorsten Dietrich; +Cc: dwalker, LKML
* Sven-Thorsten Dietrich <sdietrich@mvista.com> wrote:
> Fix a compile error in net/ipv4/route.c when RT patch is applied:
> Index: linux-2.6.13-rc4-RT-V0.7.52-14/net/ipv4/route.c
are you sure you are seeing this with the -52-14 patch? If yes then
please send me your .config.
the build error showed a more fundamental bug, which had to be solved
differently. The problem was the code in route.c, the problem was this:
# define rt_hash_lock_addr(slot) NULL
# define rt_hash_lock_init()
where NULL has no type. The solution for the build problem would have
been to cast the NULL to spinlock_t *, but we need this spinlock so the
correct solution was to add a || defined(PREEMPT_RT) to the #if
defined(CONFIG_SMP) line above. Solving the build problem alone only
fixes the symptom, not the bug.
Ingo
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch] IPV4 spinlock_casting
2005-08-08 9:04 ` Ingo Molnar
@ 2005-08-08 9:06 ` Ingo Molnar
2005-08-08 19:54 ` Sven-Thorsten Dietrich
0 siblings, 1 reply; 4+ messages in thread
From: Ingo Molnar @ 2005-08-08 9:06 UTC (permalink / raw)
To: Sven-Thorsten Dietrich; +Cc: dwalker, LKML
* Ingo Molnar <mingo@elte.hu> wrote:
> > Fix a compile error in net/ipv4/route.c when RT patch is applied:
>
> > Index: linux-2.6.13-rc4-RT-V0.7.52-14/net/ipv4/route.c
>
> are you sure you are seeing this with the -52-14 patch? If yes then
> please send me your .config.
>
> the build error showed a more fundamental bug, which had to be solved
> differently. The problem was the code in route.c, the problem was this:
>
> # define rt_hash_lock_addr(slot) NULL
> # define rt_hash_lock_init()
>
> where NULL has no type. The solution for the build problem would have
> been to cast the NULL to spinlock_t *, but we need this spinlock so
> the correct solution was to add a || defined(PREEMPT_RT) to the #if
> defined(CONFIG_SMP) line above. Solving the build problem alone only
> fixes the symptom, not the bug.
it just occured to me that !PREEMPT_RT builds would be affected by the
#else branch, so i committed the build fix below into -52-15.
Ingo
Index: linux/net/ipv4/route.c
===================================================================
--- linux.orig/net/ipv4/route.c
+++ linux/net/ipv4/route.c
@@ -231,7 +231,7 @@ static spinlock_t *rt_hash_locks;
spin_lock_init(&rt_hash_locks[i]); \
}
#else
-# define rt_hash_lock_addr(slot) NULL
+# define rt_hash_lock_addr(slot) ((spinlock_t *)NULL)
# define rt_hash_lock_init()
#endif
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch] IPV4 spinlock_casting
2005-08-08 9:06 ` Ingo Molnar
@ 2005-08-08 19:54 ` Sven-Thorsten Dietrich
0 siblings, 0 replies; 4+ messages in thread
From: Sven-Thorsten Dietrich @ 2005-08-08 19:54 UTC (permalink / raw)
To: Ingo Molnar; +Cc: dwalker, LKML
On Mon, 2005-08-08 at 11:06 +0200, Ingo Molnar wrote:
>
> it just occured to me that !PREEMPT_RT builds would be affected by the
> #else branch, so i committed the build fix below into -52-15.
>
> Ingo
>
That fixes it. Thanks
Sven
> Index: linux/net/ipv4/route.c
> ===================================================================
> --- linux.orig/net/ipv4/route.c
> +++ linux/net/ipv4/route.c
> @@ -231,7 +231,7 @@ static spinlock_t *rt_hash_locks;
> spin_lock_init(&rt_hash_locks[i]); \
> }
> #else
> -# define rt_hash_lock_addr(slot) NULL
> +# define rt_hash_lock_addr(slot) ((spinlock_t *)NULL)
> # define rt_hash_lock_init()
> #endif
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2005-08-08 19:54 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-08-08 2:04 [patch] IPV4 spinlock_casting Sven-Thorsten Dietrich
2005-08-08 9:04 ` Ingo Molnar
2005-08-08 9:06 ` Ingo Molnar
2005-08-08 19:54 ` Sven-Thorsten Dietrich
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox