This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / drivers / firmware / edd.c
index 47d430a..b4502ed 100644 (file)
@@ -70,7 +70,7 @@ struct edd_attribute {
 static int edd_dev_is_type(struct edd_device *edev, const char *type);
 static struct pci_dev *edd_get_pci_dev(struct edd_device *edev);
 
-static struct edd_device *edd_devices[EDDMAXNR];
+static struct edd_device *edd_devices[EDD_MBR_SIG_MAX];
 
 #define EDD_DEVICE_ATTR(_name,_mode,_show,_test) \
 struct edd_attribute edd_attr_##_name = {      \
@@ -115,7 +115,7 @@ edd_attr_show(struct kobject * kobj, struct attribute *attr, char *buf)
 {
        struct edd_device *dev = to_edd_device(kobj);
        struct edd_attribute *edd_attr = to_edd_attr(attr);
-       ssize_t ret = 0;
+       ssize_t ret = -EIO;
 
        if (edd_attr->show)
                ret = edd_attr->show(dev, buf);
@@ -715,7 +715,6 @@ edd_device_register(struct edd_device *edev, int i)
 
        if (!edev)
                return 1;
-       memset(edev, 0, sizeof (*edev));
        edd_dev_set_info(edev, i);
        kobject_set_name(&edev->kobj, "int13_dev%02x",
                         0x80 + i);
@@ -728,9 +727,9 @@ edd_device_register(struct edd_device *edev, int i)
 
 static inline int edd_num_devices(void)
 {
-       return min_t(unsigned char,
-                    max_t(unsigned char, edd.edd_info_nr, edd.mbr_signature_nr),
-                    max_t(unsigned char, EDD_MBR_SIG_MAX, EDDMAXNR));
+       return max_t(unsigned char,
+                    min_t(unsigned char, EDD_MBR_SIG_MAX, edd.mbr_signature_nr),
+                    min_t(unsigned char, EDDMAXNR, edd.edd_info_nr));
 }
 
 /**
@@ -756,7 +755,7 @@ edd_init(void)
                return rc;
 
        for (i = 0; i < edd_num_devices() && !rc; i++) {
-               edev = kmalloc(sizeof (*edev), GFP_KERNEL);
+               edev = kzalloc(sizeof (*edev), GFP_KERNEL);
                if (!edev)
                        return -ENOMEM;