ipmi: Fix mem leak in try_init_dmi()
[profile/ivi/kernel-adaptation-intel-automotive.git] / drivers / char / ipmi / ipmi_si_intf.c
index 6c5d15d..96d2f9e 100644 (file)
@@ -1915,10 +1915,10 @@ static __devinit int try_init_acpi(struct SPMITable *spmi)
 
        if (spmi->addr.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
                info->io_setup = mem_setup;
-               info->io.addr_type = IPMI_IO_ADDR_SPACE;
+               info->io.addr_type = IPMI_MEM_ADDR_SPACE;
        } else if (spmi->addr.space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
                info->io_setup = port_setup;
-               info->io.addr_type = IPMI_MEM_ADDR_SPACE;
+               info->io.addr_type = IPMI_IO_ADDR_SPACE;
        } else {
                kfree(info);
                printk("ipmi_si: Unknown ACPI I/O Address type\n");
@@ -2050,6 +2050,7 @@ static __devinit void try_init_dmi(struct dmi_ipmi_data *ipmi_data)
                info->si_type = SI_BT;
                break;
        default:
+               kfree(info);
                return;
        }
 
@@ -2857,7 +2858,7 @@ static int try_smi_init(struct smi_info *new_smi)
 
        mutex_unlock(&smi_infos_lock);
 
-       printk(IPMI %s interface initialized\n",si_to_str[new_smi->si_type]);
+       printk(KERN_INFO "IPMI %s interface initialized\n",si_to_str[new_smi->si_type]);
 
        return 0;
 
@@ -2974,6 +2975,10 @@ static __devinit int init_ipmi_si(void)
 #ifdef CONFIG_PCI
                pci_unregister_driver(&ipmi_pci_driver);
 #endif
+
+#ifdef CONFIG_PPC_OF
+               of_unregister_platform_driver(&ipmi_of_platform_driver);
+#endif
                driver_unregister(&ipmi_driver);
                printk("ipmi_si: Unable to find any System Interface(s)\n");
                return -ENODEV;