Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch '6.12/scsi-fixes' into 6.13/scsi-staging

Pull in 6.12 fixes branch to resolve a merge conflict in ufs-mcq.c.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

+51 -51
+1 -1
drivers/scsi/fnic/fnic_main.c
··· 830 830 spin_lock_init(&fnic->vlans_lock); 831 831 INIT_WORK(&fnic->fip_frame_work, fnic_handle_fip_frame); 832 832 INIT_WORK(&fnic->event_work, fnic_handle_event); 833 - INIT_WORK(&fnic->flush_work, fnic_flush_tx); 834 833 skb_queue_head_init(&fnic->fip_frame_queue); 835 834 INIT_LIST_HEAD(&fnic->evlist); 836 835 INIT_LIST_HEAD(&fnic->vlans); ··· 947 948 948 949 INIT_WORK(&fnic->link_work, fnic_handle_link); 949 950 INIT_WORK(&fnic->frame_work, fnic_handle_frame); 951 + INIT_WORK(&fnic->flush_work, fnic_flush_tx); 950 952 skb_queue_head_init(&fnic->frame_queue); 951 953 skb_queue_head_init(&fnic->tx_queue); 952 954
+2 -2
drivers/scsi/mpi3mr/mpi3mr.h
··· 542 542 * @port_list: List of ports belonging to a SAS node 543 543 * @num_phys: Number of phys associated with port 544 544 * @marked_responding: used while refresing the sas ports 545 - * @lowest_phy: lowest phy ID of current sas port 546 - * @phy_mask: phy_mask of current sas port 545 + * @lowest_phy: lowest phy ID of current sas port, valid for controller port 546 + * @phy_mask: phy_mask of current sas port, valid for controller port 547 547 * @hba_port: HBA port entry 548 548 * @remote_identify: Attached device identification 549 549 * @rphy: SAS transport layer rphy object
+27 -15
drivers/scsi/mpi3mr/mpi3mr_transport.c
··· 590 590 * @mrioc: Adapter instance reference 591 591 * @mr_sas_port: Internal Port object 592 592 * @mr_sas_phy: Internal Phy object 593 + * @host_node: Flag to indicate this is a host_node 593 594 * 594 595 * Return: None. 595 596 */ 596 597 static void mpi3mr_delete_sas_phy(struct mpi3mr_ioc *mrioc, 597 598 struct mpi3mr_sas_port *mr_sas_port, 598 - struct mpi3mr_sas_phy *mr_sas_phy) 599 + struct mpi3mr_sas_phy *mr_sas_phy, u8 host_node) 599 600 { 600 601 u64 sas_address = mr_sas_port->remote_identify.sas_address; 601 602 ··· 606 605 607 606 list_del(&mr_sas_phy->port_siblings); 608 607 mr_sas_port->num_phys--; 609 - mr_sas_port->phy_mask &= ~(1 << mr_sas_phy->phy_id); 610 - if (mr_sas_port->lowest_phy == mr_sas_phy->phy_id) 611 - mr_sas_port->lowest_phy = ffs(mr_sas_port->phy_mask) - 1; 608 + 609 + if (host_node) { 610 + mr_sas_port->phy_mask &= ~(1 << mr_sas_phy->phy_id); 611 + 612 + if (mr_sas_port->lowest_phy == mr_sas_phy->phy_id) 613 + mr_sas_port->lowest_phy = ffs(mr_sas_port->phy_mask) - 1; 614 + } 612 615 sas_port_delete_phy(mr_sas_port->port, mr_sas_phy->phy); 613 616 mr_sas_phy->phy_belongs_to_port = 0; 614 617 } ··· 622 617 * @mrioc: Adapter instance reference 623 618 * @mr_sas_port: Internal Port object 624 619 * @mr_sas_phy: Internal Phy object 620 + * @host_node: Flag to indicate this is a host_node 625 621 * 626 622 * Return: None. 627 623 */ 628 624 static void mpi3mr_add_sas_phy(struct mpi3mr_ioc *mrioc, 629 625 struct mpi3mr_sas_port *mr_sas_port, 630 - struct mpi3mr_sas_phy *mr_sas_phy) 626 + struct mpi3mr_sas_phy *mr_sas_phy, u8 host_node) 631 627 { 632 628 u64 sas_address = mr_sas_port->remote_identify.sas_address; 633 629 ··· 638 632 639 633 list_add_tail(&mr_sas_phy->port_siblings, &mr_sas_port->phy_list); 640 634 mr_sas_port->num_phys++; 641 - mr_sas_port->phy_mask |= (1 << mr_sas_phy->phy_id); 642 - if (mr_sas_phy->phy_id < mr_sas_port->lowest_phy) 643 - mr_sas_port->lowest_phy = ffs(mr_sas_port->phy_mask) - 1; 635 + if (host_node) { 636 + mr_sas_port->phy_mask |= (1 << mr_sas_phy->phy_id); 637 + 638 + if (mr_sas_phy->phy_id < mr_sas_port->lowest_phy) 639 + mr_sas_port->lowest_phy = ffs(mr_sas_port->phy_mask) - 1; 640 + } 644 641 sas_port_add_phy(mr_sas_port->port, mr_sas_phy->phy); 645 642 mr_sas_phy->phy_belongs_to_port = 1; 646 643 } ··· 684 675 if (srch_phy == mr_sas_phy) 685 676 return; 686 677 } 687 - mpi3mr_add_sas_phy(mrioc, mr_sas_port, mr_sas_phy); 678 + mpi3mr_add_sas_phy(mrioc, mr_sas_port, mr_sas_phy, mr_sas_node->host_node); 688 679 return; 689 680 } 690 681 } ··· 745 736 mpi3mr_delete_sas_port(mrioc, mr_sas_port); 746 737 else 747 738 mpi3mr_delete_sas_phy(mrioc, mr_sas_port, 748 - mr_sas_phy); 739 + mr_sas_phy, mr_sas_node->host_node); 749 740 return; 750 741 } 751 742 } ··· 1037 1028 /** 1038 1029 * mpi3mr_get_hba_port_by_id - find hba port by id 1039 1030 * @mrioc: Adapter instance reference 1040 - * @port_id - Port ID to search 1031 + * @port_id: Port ID to search 1041 1032 * 1042 1033 * Return: mpi3mr_hba_port reference for the matched port 1043 1034 */ ··· 1376 1367 mpi3mr_sas_port_sanity_check(mrioc, mr_sas_node, 1377 1368 mr_sas_port->remote_identify.sas_address, hba_port); 1378 1369 1379 - if (mr_sas_node->num_phys >= sizeof(mr_sas_port->phy_mask) * 8) 1370 + if (mr_sas_node->host_node && mr_sas_node->num_phys >= 1371 + sizeof(mr_sas_port->phy_mask) * 8) 1380 1372 ioc_info(mrioc, "max port count %u could be too high\n", 1381 1373 mr_sas_node->num_phys); 1382 1374 ··· 1387 1377 (mr_sas_node->phy[i].hba_port != hba_port)) 1388 1378 continue; 1389 1379 1390 - if (i >= sizeof(mr_sas_port->phy_mask) * 8) { 1380 + if (mr_sas_node->host_node && (i >= sizeof(mr_sas_port->phy_mask) * 8)) { 1391 1381 ioc_warn(mrioc, "skipping port %u, max allowed value is %zu\n", 1392 1382 i, sizeof(mr_sas_port->phy_mask) * 8); 1393 1383 goto out_fail; ··· 1395 1385 list_add_tail(&mr_sas_node->phy[i].port_siblings, 1396 1386 &mr_sas_port->phy_list); 1397 1387 mr_sas_port->num_phys++; 1398 - mr_sas_port->phy_mask |= (1 << i); 1388 + if (mr_sas_node->host_node) 1389 + mr_sas_port->phy_mask |= (1 << i); 1399 1390 } 1400 1391 1401 1392 if (!mr_sas_port->num_phys) { ··· 1405 1394 goto out_fail; 1406 1395 } 1407 1396 1408 - mr_sas_port->lowest_phy = ffs(mr_sas_port->phy_mask) - 1; 1397 + if (mr_sas_node->host_node) 1398 + mr_sas_port->lowest_phy = ffs(mr_sas_port->phy_mask) - 1; 1409 1399 1410 1400 if (mr_sas_port->remote_identify.device_type == SAS_END_DEVICE) { 1411 1401 tgtdev = mpi3mr_get_tgtdev_by_addr(mrioc,
+4 -6
drivers/scsi/scsi_debug.c
··· 3651 3651 enum dma_data_direction dir; 3652 3652 struct scsi_data_buffer *sdb = &scp->sdb; 3653 3653 u8 *fsp; 3654 - int i; 3654 + int i, total = 0; 3655 3655 3656 3656 /* 3657 3657 * Even though reads are inherently atomic (in this driver), we expect ··· 3688 3688 fsp + (block * sdebug_sector_size), 3689 3689 sdebug_sector_size, sg_skip, do_write); 3690 3690 sdeb_data_sector_unlock(sip, do_write); 3691 - if (ret != sdebug_sector_size) { 3692 - ret += (i * sdebug_sector_size); 3691 + total += ret; 3692 + if (ret != sdebug_sector_size) 3693 3693 break; 3694 - } 3695 3694 sg_skip += sdebug_sector_size; 3696 3695 if (++block >= sdebug_store_sectors) 3697 3696 block = 0; 3698 3697 } 3699 - ret = num * sdebug_sector_size; 3700 3698 sdeb_data_unlock(sip, atomic); 3701 3699 3702 - return ret; 3700 + return total; 3703 3701 } 3704 3702 3705 3703 /* Returns number of bytes copied or -1 if error. */
+2 -2
drivers/scsi/scsi_transport_fc.c
··· 1250 1250 */ 1251 1251 if (rport->port_state == FC_PORTSTATE_ONLINE) 1252 1252 rport->port_state = port_state; 1253 - else 1253 + else if (port_state != rport->port_state) 1254 1254 return -EINVAL; 1255 1255 } else if (port_state == FC_PORTSTATE_ONLINE) { 1256 1256 /* ··· 1260 1260 */ 1261 1261 if (rport->port_state == FC_PORTSTATE_MARGINAL) 1262 1262 rport->port_state = port_state; 1263 - else 1263 + else if (port_state != rport->port_state) 1264 1264 return -EINVAL; 1265 1265 } else 1266 1266 return -EINVAL;
+1 -1
drivers/scsi/wd33c93.c
··· 831 831 /* construct an IDENTIFY message with correct disconnect bit */ 832 832 833 833 hostdata->outgoing_msg[0] = IDENTIFY(0, cmd->device->lun); 834 - if (scsi_pointer->phase) 834 + if (WD33C93_scsi_pointer(cmd)->phase) 835 835 hostdata->outgoing_msg[0] |= 0x40; 836 836 837 837 if (hostdata->sync_stat[cmd->device->id] == SS_FIRST) {
+1 -1
drivers/target/target_core_device.c
··· 691 691 692 692 dev->queues = kcalloc(nr_cpu_ids, sizeof(*dev->queues), GFP_KERNEL); 693 693 if (!dev->queues) { 694 - dev->transport->free_device(dev); 694 + hba->backend->ops->free_device(dev); 695 695 return NULL; 696 696 } 697 697
+3 -2
drivers/ufs/core/ufs-mcq.c
··· 569 569 opr_sqd_base = mcq_opr_base(hba, OPR_SQD, id); 570 570 writel(nexus, opr_sqd_base + REG_SQCTI); 571 571 572 - /* SQRTCy.ICU = 1 */ 573 - writel(SQ_ICU, opr_sqd_base + REG_SQRTC); 572 + /* Initiate Cleanup */ 573 + writel(readl(opr_sqd_base + REG_SQRTC) | SQ_ICU, 574 + opr_sqd_base + REG_SQRTC); 574 575 575 576 /* Wait until SQRTSy.CUS = 1. Report SQRTSy.RTC. */ 576 577 reg = opr_sqd_base + REG_SQRTS;
+10 -21
drivers/ufs/core/ufshcd.c
··· 2923 2923 struct utp_transfer_req_desc *utrdlp = hba->utrdl_base_addr; 2924 2924 dma_addr_t cmd_desc_element_addr = hba->ucdl_dma_addr + 2925 2925 i * ufshcd_get_ucd_size(hba); 2926 - u16 response_offset = offsetof(struct utp_transfer_cmd_desc, 2927 - response_upiu); 2928 - u16 prdt_offset = offsetof(struct utp_transfer_cmd_desc, prd_table); 2926 + u16 response_offset = le16_to_cpu(utrdlp[i].response_upiu_offset); 2927 + u16 prdt_offset = le16_to_cpu(utrdlp[i].prd_table_offset); 2929 2928 2930 2929 lrb->utr_descriptor_ptr = utrdlp + i; 2931 2930 lrb->utrd_dma_addr = hba->utrdl_dma_addr + ··· 5393 5394 } 5394 5395 break; 5395 5396 case OCS_ABORTED: 5396 - result |= DID_ABORT << 16; 5397 - break; 5398 5397 case OCS_INVALID_COMMAND_STATUS: 5399 5398 result |= DID_REQUEUE << 16; 5399 + dev_warn(hba->dev, 5400 + "OCS %s from controller for tag %d\n", 5401 + (ocs == OCS_ABORTED ? "aborted" : "invalid"), 5402 + lrbp->task_tag); 5400 5403 break; 5401 5404 case OCS_INVALID_CMD_TABLE_ATTR: 5402 5405 case OCS_INVALID_PRDT_ATTR: ··· 6445 6444 struct scsi_device *sdev = cmd->device; 6446 6445 struct Scsi_Host *shost = sdev->host; 6447 6446 struct ufs_hba *hba = shost_priv(shost); 6448 - struct ufshcd_lrb *lrbp = &hba->lrb[tag]; 6449 - struct ufs_hw_queue *hwq; 6450 - unsigned long flags; 6451 6447 6452 6448 *ret = ufshcd_try_to_abort_task(hba, tag); 6453 6449 dev_err(hba->dev, "Aborting tag %d / CDB %#02x %s\n", tag, 6454 6450 hba->lrb[tag].cmd ? hba->lrb[tag].cmd->cmnd[0] : -1, 6455 6451 *ret ? "failed" : "succeeded"); 6456 - 6457 - /* Release cmd in MCQ mode if abort succeeds */ 6458 - if (hba->mcq_enabled && (*ret == 0)) { 6459 - hwq = ufshcd_mcq_req_to_hwq(hba, scsi_cmd_to_rq(lrbp->cmd)); 6460 - if (!hwq) 6461 - return 0; 6462 - spin_lock_irqsave(&hwq->cq_lock, flags); 6463 - if (ufshcd_cmd_inflight(lrbp->cmd)) 6464 - ufshcd_release_scsi_cmd(hba, lrbp); 6465 - spin_unlock_irqrestore(&hwq->cq_lock, flags); 6466 - } 6467 6452 6468 6453 return *ret == 0; 6469 6454 } ··· 8203 8216 8204 8217 err = ufshcd_query_attr(hba, UPIU_QUERY_OPCODE_WRITE_ATTR, QUERY_ATTR_IDN_SECONDS_PASSED, 8205 8218 0, 0, &val); 8206 - ufshcd_rpm_put_sync(hba); 8219 + ufshcd_rpm_put(hba); 8207 8220 8208 8221 if (err) 8209 8222 dev_err(hba->dev, "%s: Failed to update rtc %d\n", __func__, err); ··· 10158 10171 shost_for_each_device(sdev, hba->host) { 10159 10172 if (sdev == hba->ufs_device_wlun) 10160 10173 continue; 10161 - scsi_device_quiesce(sdev); 10174 + mutex_lock(&sdev->state_mutex); 10175 + scsi_device_set_state(sdev, SDEV_OFFLINE); 10176 + mutex_unlock(&sdev->state_mutex); 10162 10177 } 10163 10178 __ufshcd_wl_suspend(hba, UFS_SHUTDOWN_PM); 10164 10179