diff options
Diffstat (limited to 'drivers/pci/hotplug/ibmphp_ebda.c')
| -rw-r--r-- | drivers/pci/hotplug/ibmphp_ebda.c | 13 | 
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/pci/hotplug/ibmphp_ebda.c b/drivers/pci/hotplug/ibmphp_ebda.c index c1abac8ab5c..5becbdee402 100644 --- a/drivers/pci/hotplug/ibmphp_ebda.c +++ b/drivers/pci/hotplug/ibmphp_ebda.c @@ -245,7 +245,7 @@ static void __init print_ebda_hpc (void)  int __init ibmphp_access_ebda (void)  { -	u8 format, num_ctlrs, rio_complete, hs_complete; +	u8 format, num_ctlrs, rio_complete, hs_complete, ebda_sz;  	u16 ebda_seg, num_entries, next_offset, offset, blk_id, sub_addr, re, rc_id, re_id, base;  	int rc = 0; @@ -260,7 +260,16 @@ int __init ibmphp_access_ebda (void)  	iounmap (io_mem);  	debug ("returned ebda segment: %x\n", ebda_seg); -	io_mem = ioremap(ebda_seg<<4, 1024); +	io_mem = ioremap(ebda_seg<<4, 1); +	if (!io_mem) +		return -ENOMEM; +	ebda_sz = readb(io_mem); +	iounmap(io_mem); +	debug("ebda size: %d(KiB)\n", ebda_sz); +	if (ebda_sz == 0) +		return -ENOMEM; + +	io_mem = ioremap(ebda_seg<<4, (ebda_sz * 1024));  	if (!io_mem )  		return -ENOMEM;  	next_offset = 0x180;  |