mirror of https://gitee.com/openkylin/linux.git
[BRIDGE]: Unaligned accesses in the ethernet bridge
I see lots of kernel unaligned access to 0xa0000001009dbb6f, ip=0xa000000100811591 kernel unaligned access to 0xa0000001009dbb6b, ip=0xa0000001008115c1 kernel unaligned access to 0xa0000001009dbb6d, ip=0xa0000001008115f1 messages in my logs on IA64 when using the ethernet bridge with 2.6.16. Appended is a patch to fix them. Signed-off-by: Peter Chubb <peterc@gelato.unsw.edu.au> Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b2fd16b4ff
commit
4dc6d9cc38
|
@ -19,6 +19,7 @@
|
||||||
#include <linux/llc.h>
|
#include <linux/llc.h>
|
||||||
#include <net/llc.h>
|
#include <net/llc.h>
|
||||||
#include <net/llc_pdu.h>
|
#include <net/llc_pdu.h>
|
||||||
|
#include <asm/unaligned.h>
|
||||||
|
|
||||||
#include "br_private.h"
|
#include "br_private.h"
|
||||||
#include "br_private_stp.h"
|
#include "br_private_stp.h"
|
||||||
|
@ -59,12 +60,12 @@ static inline void br_set_ticks(unsigned char *dest, int j)
|
||||||
{
|
{
|
||||||
unsigned long ticks = (STP_HZ * j)/ HZ;
|
unsigned long ticks = (STP_HZ * j)/ HZ;
|
||||||
|
|
||||||
*((__be16 *) dest) = htons(ticks);
|
put_unaligned(htons(ticks), (__be16 *)dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int br_get_ticks(const unsigned char *src)
|
static inline int br_get_ticks(const unsigned char *src)
|
||||||
{
|
{
|
||||||
unsigned long ticks = ntohs(*(__be16 *)src);
|
unsigned long ticks = ntohs(get_unaligned((__be16 *)src));
|
||||||
|
|
||||||
return (ticks * HZ + STP_HZ - 1) / STP_HZ;
|
return (ticks * HZ + STP_HZ - 1) / STP_HZ;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue