]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/pci/hotplug/ibmphp_ebda.c
PCI hotplug: check ioremap() return value in ibmphp_ebda.c
[net-next-2.6.git] / drivers / pci / hotplug / ibmphp_ebda.c
index c1abac8ab5c326847ca8cca0c2eb33b1fcae4e1e..5becbdee4027019a5c584df5ff5fb3cc99b04cc3 100644 (file)
@@ -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;