scsi: megaraid_sas: Fix the search of first memory bar
[cascardo/linux.git] / drivers / scsi / megaraid / megaraid_sas_base.c
index 2dab3dc..7edc9e2 100644 (file)
@@ -5036,7 +5036,7 @@ static int megasas_init_fw(struct megasas_instance *instance)
 
        /* Find first memory bar */
        bar_list = pci_select_bars(instance->pdev, IORESOURCE_MEM);
-       instance->bar = find_first_bit(&bar_list, sizeof(unsigned long));
+       instance->bar = find_first_bit(&bar_list, BITS_PER_LONG);
        if (pci_request_selected_regions(instance->pdev, instance->bar,
                                         "megasas: LSI")) {
                dev_printk(KERN_DEBUG, &instance->pdev->dev, "IO memory region busy!\n");
@@ -6711,14 +6711,9 @@ static int megasas_mgmt_ioctl_fw(struct file *file, unsigned long arg)
        unsigned long flags;
        u32 wait_time = MEGASAS_RESET_WAIT_TIME;
 
-       ioc = kmalloc(sizeof(*ioc), GFP_KERNEL);
-       if (!ioc)
-               return -ENOMEM;
-
-       if (copy_from_user(ioc, user_ioc, sizeof(*ioc))) {
-               error = -EFAULT;
-               goto out_kfree_ioc;
-       }
+       ioc = memdup_user(user_ioc, sizeof(*ioc));
+       if (IS_ERR(ioc))
+               return PTR_ERR(ioc);
 
        instance = megasas_lookup_instance(ioc->host_no);
        if (!instance) {