This patch rewrites the arcmsr_define_adapter_type function to precisely check Areca adapter's ID. This can prevent an unknown adapter being used as a default adapter type by driver. Signed-off-by: Ching<ching2048@xxxxxxxxxxxx> --- diff -uprN a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c --- a/drivers/scsi/arcmsr/arcmsr_hba.c 2014-08-01 11:06:34.000000000 +0800 +++ b/drivers/scsi/arcmsr/arcmsr_hba.c 2014-08-01 11:07:44.000000000 +0800 @@ -295,24 +295,43 @@ static int arcmsr_bios_param(struct scsi return 0; } -static void arcmsr_define_adapter_type(struct AdapterControlBlock *acb) +static bool arcmsr_define_adapter_type(struct AdapterControlBlock *acb) { struct pci_dev *pdev = acb->pdev; u16 dev_id; + pci_read_config_word(pdev, PCI_DEVICE_ID, &dev_id); acb->dev_id = dev_id; switch (dev_id) { - case 0x1880: { + case 0x1880: acb->adapter_type = ACB_ADAPTER_TYPE_C; - } break; - case 0x1201: { + case 0x1200: + case 0x1201: + case 0x1202: acb->adapter_type = ACB_ADAPTER_TYPE_B; - } break; - - default: acb->adapter_type = ACB_ADAPTER_TYPE_A; + case 0x1110: + case 0x1120: + case 0x1130: + case 0x1160: + case 0x1170: + case 0x1210: + case 0x1220: + case 0x1230: + case 0x1260: + case 0x1270: + case 0x1280: + case 0x1380: + case 0x1381: + case 0x1680: + acb->adapter_type = ACB_ADAPTER_TYPE_A; + break; + default: + pr_notice("Unknown device ID = 0x%x\n", dev_id); + return false; } + return true; } static uint8_t arcmsr_hba_wait_msgint_ready(struct AdapterControlBlock *acb) @@ -714,7 +733,9 @@ static int arcmsr_probe(struct pci_dev * ACB_F_MESSAGE_WQBUFFER_READED); acb->acb_flags &= ~ACB_F_SCSISTOPADAPTER; INIT_LIST_HEAD(&acb->ccb_free_list); - arcmsr_define_adapter_type(acb); + error = arcmsr_define_adapter_type(acb); + if (!error) + goto pci_release_regs; error = arcmsr_remap_pciregion(acb); if(!error){ goto pci_release_regs; -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html