hpsa.c (f66c83d059d1ed90968caa81d401f160912b063a) | hpsa.c (9e03aa2f830c5f0ea8c28790a61e65ed7403b053) |
---|---|
1/* 2 * Disk Array driver for HP Smart Array SAS controllers 3 * Copyright 2000, 2009 Hewlett-Packard Development Company, L.P. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; version 2 of the License. 8 * --- 569 unchanged lines hidden (view full) --- 578 * register number 579 */ 580static void set_performant_mode(struct ctlr_info *h, struct CommandList *c) 581{ 582 if (likely(h->transMethod & CFGTBL_Trans_Performant)) { 583 c->busaddr |= 1 | (h->blockFetchTable[c->Header.SGList] << 1); 584 if (likely(h->msix_vector)) 585 c->Header.ReplyQueue = | 1/* 2 * Disk Array driver for HP Smart Array SAS controllers 3 * Copyright 2000, 2009 Hewlett-Packard Development Company, L.P. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; version 2 of the License. 8 * --- 569 unchanged lines hidden (view full) --- 578 * register number 579 */ 580static void set_performant_mode(struct ctlr_info *h, struct CommandList *c) 581{ 582 if (likely(h->transMethod & CFGTBL_Trans_Performant)) { 583 c->busaddr |= 1 | (h->blockFetchTable[c->Header.SGList] << 1); 584 if (likely(h->msix_vector)) 585 c->Header.ReplyQueue = |
586 raw_smp_processor_id() % h->nreply_queues; | 586 smp_processor_id() % h->nreply_queues; |
587 } 588} 589 590static int is_firmware_flash_cmd(u8 *cdb) 591{ 592 return cdb[0] == BMIC_WRITE && cdb[6] == BMIC_FLASH_FIRMWARE; 593} 594 --- 454 unchanged lines hidden (view full) --- 1049 } 1050 1051free_and_out: 1052 kfree(added); 1053 kfree(removed); 1054} 1055 1056/* | 587 } 588} 589 590static int is_firmware_flash_cmd(u8 *cdb) 591{ 592 return cdb[0] == BMIC_WRITE && cdb[6] == BMIC_FLASH_FIRMWARE; 593} 594 --- 454 unchanged lines hidden (view full) --- 1049 } 1050 1051free_and_out: 1052 kfree(added); 1053 kfree(removed); 1054} 1055 1056/* |
1057 * Lookup bus/target/lun and retrun corresponding struct hpsa_scsi_dev_t * | 1057 * Lookup bus/target/lun and return corresponding struct hpsa_scsi_dev_t * |
1058 * Assume's h->devlock is held. 1059 */ 1060static struct hpsa_scsi_dev_t *lookup_hpsa_scsi_dev(struct ctlr_info *h, 1061 int bus, int target, int lun) 1062{ 1063 int i; 1064 struct hpsa_scsi_dev_t *sd; 1065 --- 134 unchanged lines hidden (view full) --- 1200 sense_data_size = sizeof(ei->SenseInfo); 1201 if (ei->SenseLen < sense_data_size) 1202 sense_data_size = ei->SenseLen; 1203 1204 memcpy(cmd->sense_buffer, ei->SenseInfo, sense_data_size); 1205 scsi_set_resid(cmd, ei->ResidualCnt); 1206 1207 if (ei->CommandStatus == 0) { | 1058 * Assume's h->devlock is held. 1059 */ 1060static struct hpsa_scsi_dev_t *lookup_hpsa_scsi_dev(struct ctlr_info *h, 1061 int bus, int target, int lun) 1062{ 1063 int i; 1064 struct hpsa_scsi_dev_t *sd; 1065 --- 134 unchanged lines hidden (view full) --- 1200 sense_data_size = sizeof(ei->SenseInfo); 1201 if (ei->SenseLen < sense_data_size) 1202 sense_data_size = ei->SenseLen; 1203 1204 memcpy(cmd->sense_buffer, ei->SenseInfo, sense_data_size); 1205 scsi_set_resid(cmd, ei->ResidualCnt); 1206 1207 if (ei->CommandStatus == 0) { |
1208 cmd_free(h, cp); | |
1209 cmd->scsi_done(cmd); | 1208 cmd->scsi_done(cmd); |
1209 cmd_free(h, cp); |
|
1210 return; 1211 } 1212 1213 /* an error has occurred */ 1214 switch (ei->CommandStatus) { 1215 1216 case CMD_TARGET_STATUS: 1217 if (ei->ScsiStatus) { --- 156 unchanged lines hidden (view full) --- 1374 cmd->result = DID_ERROR << 16; 1375 dev_warn(&h->pdev->dev, "Command unabortable\n"); 1376 break; 1377 default: 1378 cmd->result = DID_ERROR << 16; 1379 dev_warn(&h->pdev->dev, "cp %p returned unknown status %x\n", 1380 cp, ei->CommandStatus); 1381 } | 1210 return; 1211 } 1212 1213 /* an error has occurred */ 1214 switch (ei->CommandStatus) { 1215 1216 case CMD_TARGET_STATUS: 1217 if (ei->ScsiStatus) { --- 156 unchanged lines hidden (view full) --- 1374 cmd->result = DID_ERROR << 16; 1375 dev_warn(&h->pdev->dev, "Command unabortable\n"); 1376 break; 1377 default: 1378 cmd->result = DID_ERROR << 16; 1379 dev_warn(&h->pdev->dev, "cp %p returned unknown status %x\n", 1380 cp, ei->CommandStatus); 1381 } |
1382 cmd_free(h, cp); | |
1383 cmd->scsi_done(cmd); | 1382 cmd->scsi_done(cmd); |
1383 cmd_free(h, cp); |
|
1384} 1385 1386static void hpsa_pci_unmap(struct pci_dev *pdev, 1387 struct CommandList *c, int sg_used, int data_direction) 1388{ 1389 int i; 1390 union u64bit addr64; 1391 --- 1324 unchanged lines hidden (view full) --- 2716 i = find_first_zero_bit(h->cmd_pool_bits, h->nr_cmds); 2717 if (i == h->nr_cmds) { 2718 spin_unlock_irqrestore(&h->lock, flags); 2719 return NULL; 2720 } 2721 } while (test_and_set_bit 2722 (i & (BITS_PER_LONG - 1), 2723 h->cmd_pool_bits + (i / BITS_PER_LONG)) != 0); | 1384} 1385 1386static void hpsa_pci_unmap(struct pci_dev *pdev, 1387 struct CommandList *c, int sg_used, int data_direction) 1388{ 1389 int i; 1390 union u64bit addr64; 1391 --- 1324 unchanged lines hidden (view full) --- 2716 i = find_first_zero_bit(h->cmd_pool_bits, h->nr_cmds); 2717 if (i == h->nr_cmds) { 2718 spin_unlock_irqrestore(&h->lock, flags); 2719 return NULL; 2720 } 2721 } while (test_and_set_bit 2722 (i & (BITS_PER_LONG - 1), 2723 h->cmd_pool_bits + (i / BITS_PER_LONG)) != 0); |
2724 h->nr_allocs++; |
|
2724 spin_unlock_irqrestore(&h->lock, flags); 2725 2726 c = h->cmd_pool + i; 2727 memset(c, 0, sizeof(*c)); 2728 cmd_dma_handle = h->cmd_pool_dhandle 2729 + i * sizeof(*c); 2730 c->err_info = h->errinfo_pool + i; 2731 memset(c->err_info, 0, sizeof(*c->err_info)); --- 55 unchanged lines hidden (view full) --- 2787{ 2788 int i; 2789 unsigned long flags; 2790 2791 i = c - h->cmd_pool; 2792 spin_lock_irqsave(&h->lock, flags); 2793 clear_bit(i & (BITS_PER_LONG - 1), 2794 h->cmd_pool_bits + (i / BITS_PER_LONG)); | 2725 spin_unlock_irqrestore(&h->lock, flags); 2726 2727 c = h->cmd_pool + i; 2728 memset(c, 0, sizeof(*c)); 2729 cmd_dma_handle = h->cmd_pool_dhandle 2730 + i * sizeof(*c); 2731 c->err_info = h->errinfo_pool + i; 2732 memset(c->err_info, 0, sizeof(*c->err_info)); --- 55 unchanged lines hidden (view full) --- 2788{ 2789 int i; 2790 unsigned long flags; 2791 2792 i = c - h->cmd_pool; 2793 spin_lock_irqsave(&h->lock, flags); 2794 clear_bit(i & (BITS_PER_LONG - 1), 2795 h->cmd_pool_bits + (i / BITS_PER_LONG)); |
2796 h->nr_frees++; |
|
2795 spin_unlock_irqrestore(&h->lock, flags); 2796} 2797 2798static void cmd_special_free(struct ctlr_info *h, struct CommandList *c) 2799{ 2800 union u64bit temp64; 2801 2802 temp64.val32.lower = c->ErrDesc.Addr.lower; --- 2386 unchanged lines hidden --- | 2797 spin_unlock_irqrestore(&h->lock, flags); 2798} 2799 2800static void cmd_special_free(struct ctlr_info *h, struct CommandList *c) 2801{ 2802 union u64bit temp64; 2803 2804 temp64.val32.lower = c->ErrDesc.Addr.lower; --- 2386 unchanged lines hidden --- |