提交 1b75d8ba 编写于 作者: A Al Viro 提交者: Linus Torvalds

[PATCH] ipmi iomem annotations and fixes

annotated, a bunch of direct dereferencing replaced with readb().
Signed-off-by: NAl Viro <viro@parcelfarce.linux.theplanet.co.uk>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 b1ecb4c3
...@@ -1617,15 +1617,15 @@ typedef struct dmi_header ...@@ -1617,15 +1617,15 @@ typedef struct dmi_header
u16 handle; u16 handle;
} dmi_header_t; } dmi_header_t;
static int decode_dmi(dmi_header_t *dm, int intf_num) static int decode_dmi(dmi_header_t __iomem *dm, int intf_num)
{ {
u8 *data = (u8 *)dm; u8 __iomem *data = (u8 __iomem *)dm;
unsigned long base_addr; unsigned long base_addr;
u8 reg_spacing; u8 reg_spacing;
u8 len = dm->length; u8 len = readb(&dm->length);
dmi_ipmi_data_t *ipmi_data = dmi_data+intf_num; dmi_ipmi_data_t *ipmi_data = dmi_data+intf_num;
ipmi_data->type = data[4]; ipmi_data->type = readb(&data[4]);
memcpy(&base_addr, data+8, sizeof(unsigned long)); memcpy(&base_addr, data+8, sizeof(unsigned long));
if (len >= 0x11) { if (len >= 0x11) {
...@@ -1640,12 +1640,12 @@ static int decode_dmi(dmi_header_t *dm, int intf_num) ...@@ -1640,12 +1640,12 @@ static int decode_dmi(dmi_header_t *dm, int intf_num)
} }
/* If bit 4 of byte 0x10 is set, then the lsb for the address /* If bit 4 of byte 0x10 is set, then the lsb for the address
is odd. */ is odd. */
ipmi_data->base_addr = base_addr | ((data[0x10] & 0x10) >> 4); ipmi_data->base_addr = base_addr | ((readb(&data[0x10]) & 0x10) >> 4);
ipmi_data->irq = data[0x11]; ipmi_data->irq = readb(&data[0x11]);
/* The top two bits of byte 0x10 hold the register spacing. */ /* The top two bits of byte 0x10 hold the register spacing. */
reg_spacing = (data[0x10] & 0xC0) >> 6; reg_spacing = (readb(&data[0x10]) & 0xC0) >> 6;
switch(reg_spacing){ switch(reg_spacing){
case 0x00: /* Byte boundaries */ case 0x00: /* Byte boundaries */
ipmi_data->offset = 1; ipmi_data->offset = 1;
...@@ -1673,7 +1673,7 @@ static int decode_dmi(dmi_header_t *dm, int intf_num) ...@@ -1673,7 +1673,7 @@ static int decode_dmi(dmi_header_t *dm, int intf_num)
ipmi_data->offset = 1; ipmi_data->offset = 1;
} }
ipmi_data->slave_addr = data[6]; ipmi_data->slave_addr = readb(&data[6]);
if (is_new_interface(-1, ipmi_data->addr_space,ipmi_data->base_addr)) { if (is_new_interface(-1, ipmi_data->addr_space,ipmi_data->base_addr)) {
dmi_data_entries++; dmi_data_entries++;
...@@ -1687,9 +1687,9 @@ static int decode_dmi(dmi_header_t *dm, int intf_num) ...@@ -1687,9 +1687,9 @@ static int decode_dmi(dmi_header_t *dm, int intf_num)
static int dmi_table(u32 base, int len, int num) static int dmi_table(u32 base, int len, int num)
{ {
u8 *buf; u8 __iomem *buf;
struct dmi_header *dm; struct dmi_header __iomem *dm;
u8 *data; u8 __iomem *data;
int i=1; int i=1;
int status=-1; int status=-1;
int intf_num = 0; int intf_num = 0;
...@@ -1702,12 +1702,12 @@ static int dmi_table(u32 base, int len, int num) ...@@ -1702,12 +1702,12 @@ static int dmi_table(u32 base, int len, int num)
while(i<num && (data - buf) < len) while(i<num && (data - buf) < len)
{ {
dm=(dmi_header_t *)data; dm=(dmi_header_t __iomem *)data;
if((data-buf+dm->length) >= len) if((data-buf+readb(&dm->length)) >= len)
break; break;
if (dm->type == 38) { if (readb(&dm->type) == 38) {
if (decode_dmi(dm, intf_num) == 0) { if (decode_dmi(dm, intf_num) == 0) {
intf_num++; intf_num++;
if (intf_num >= SI_MAX_DRIVERS) if (intf_num >= SI_MAX_DRIVERS)
...@@ -1715,8 +1715,8 @@ static int dmi_table(u32 base, int len, int num) ...@@ -1715,8 +1715,8 @@ static int dmi_table(u32 base, int len, int num)
} }
} }
data+=dm->length; data+=readb(&dm->length);
while((data-buf) < len && (*data || data[1])) while((data-buf) < len && (readb(data)||readb(data+1)))
data++; data++;
data+=2; data+=2;
i++; i++;
......
...@@ -51,7 +51,7 @@ struct si_sm_io ...@@ -51,7 +51,7 @@ struct si_sm_io
/* Generic info used by the actual handling routines, the /* Generic info used by the actual handling routines, the
state machine shouldn't touch these. */ state machine shouldn't touch these. */
void *info; void *info;
void *addr; void __iomem *addr;
int regspacing; int regspacing;
int regsize; int regsize;
int regshift; int regshift;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册