From patchwork Thu Oct 11 14:17:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 10636691 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C3FDD16B1 for ; Thu, 11 Oct 2018 14:17:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B76E52B7E9 for ; Thu, 11 Oct 2018 14:17:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AB2642B7F8; Thu, 11 Oct 2018 14:17:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EB9B62B7E9 for ; Thu, 11 Oct 2018 14:17:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728419AbeJKVoq (ORCPT ); Thu, 11 Oct 2018 17:44:46 -0400 Received: from bombadil.infradead.org ([198.137.202.133]:59362 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726537AbeJKVoq (ORCPT ); Thu, 11 Oct 2018 17:44:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From :Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=7NHY/bg9/8SissporlkUxT94VI7VaR/XKvvSl0mwn7Q=; b=lsuUU5uMnbefRo73JaqdsjyQ+k hDqVzvIW0QRr/AO1ULKEzoEMGMTcOxFxw8AFTZGCOtvEZTywlKvJ9PAga44SQ9jUFZk/6N5qCnLvE XNCha6buEClHyLsS91/ZmISo7xBIbvt4KuLTNgGC9CdMDUm/qNmjeEn8LafongNM0tQd/PkyUgEtu e1DL0QI43jnqQfeoa7mwqLIHYd/8avdE6KXRZZCtmR63VufbJ0Y6aOEDQ6KM54TRuRDM+VUUEdoY/ LZ2YNR6s0hF9LimPUtlc1cnr/uflS8v+zn9w02uuwthlw1np/IpV9QS2q94exzOXXWS7A6oZbAcoS C4+IrY/g==; Received: from 089144207060.atnat0016.highway.bob.at ([89.144.207.60] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.90_1 #2 (Red Hat Linux)) id 1gAbmD-0006Sc-70; Thu, 11 Oct 2018 14:17:21 +0000 From: Christoph Hellwig To: linux-scsi@vger.kernel.org, dc395x@twibble.org Cc: Oliver Neukum , Ali Akcaagac , Jamie Lenehan , Guennadi Liakhovetski Subject: [PATCH 1/4] dc395x: simplify list handling Date: Thu, 11 Oct 2018 16:17:13 +0200 Message-Id: <20181011141716.14908-2-hch@lst.de> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181011141716.14908-1-hch@lst.de> References: <20181011141716.14908-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Remove the list wrappers, including the pointless list iteration before deletion. Signed-off-by: Christoph Hellwig --- drivers/scsi/dc395x.c | 152 ++++++++---------------------------------- 1 file changed, 26 insertions(+), 126 deletions(-) diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c index 1ed2cd82129d..8705730b2e5a 100644 --- a/drivers/scsi/dc395x.c +++ b/drivers/scsi/dc395x.c @@ -753,105 +753,6 @@ static inline struct ScsiReqBlk *find_cmd(struct scsi_cmnd *cmd, return NULL; } - -static struct ScsiReqBlk *srb_get_free(struct AdapterCtlBlk *acb) -{ - struct list_head *head = &acb->srb_free_list; - struct ScsiReqBlk *srb = NULL; - - if (!list_empty(head)) { - srb = list_entry(head->next, struct ScsiReqBlk, list); - list_del(head->next); - dprintkdbg(DBG_0, "srb_get_free: srb=%p\n", srb); - } - return srb; -} - - -static void srb_free_insert(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb) -{ - dprintkdbg(DBG_0, "srb_free_insert: srb=%p\n", srb); - list_add_tail(&srb->list, &acb->srb_free_list); -} - - -static void srb_waiting_insert(struct DeviceCtlBlk *dcb, - struct ScsiReqBlk *srb) -{ - dprintkdbg(DBG_0, "srb_waiting_insert: (0x%p) <%02i-%i> srb=%p\n", - srb->cmd, dcb->target_id, dcb->target_lun, srb); - list_add(&srb->list, &dcb->srb_waiting_list); -} - - -static void srb_waiting_append(struct DeviceCtlBlk *dcb, - struct ScsiReqBlk *srb) -{ - dprintkdbg(DBG_0, "srb_waiting_append: (0x%p) <%02i-%i> srb=%p\n", - srb->cmd, dcb->target_id, dcb->target_lun, srb); - list_add_tail(&srb->list, &dcb->srb_waiting_list); -} - - -static void srb_going_append(struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb) -{ - dprintkdbg(DBG_0, "srb_going_append: (0x%p) <%02i-%i> srb=%p\n", - srb->cmd, dcb->target_id, dcb->target_lun, srb); - list_add_tail(&srb->list, &dcb->srb_going_list); -} - - -static void srb_going_remove(struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb) -{ - struct ScsiReqBlk *i; - struct ScsiReqBlk *tmp; - dprintkdbg(DBG_0, "srb_going_remove: (0x%p) <%02i-%i> srb=%p\n", - srb->cmd, dcb->target_id, dcb->target_lun, srb); - - list_for_each_entry_safe(i, tmp, &dcb->srb_going_list, list) - if (i == srb) { - list_del(&srb->list); - break; - } -} - - -static void srb_waiting_remove(struct DeviceCtlBlk *dcb, - struct ScsiReqBlk *srb) -{ - struct ScsiReqBlk *i; - struct ScsiReqBlk *tmp; - dprintkdbg(DBG_0, "srb_waiting_remove: (0x%p) <%02i-%i> srb=%p\n", - srb->cmd, dcb->target_id, dcb->target_lun, srb); - - list_for_each_entry_safe(i, tmp, &dcb->srb_waiting_list, list) - if (i == srb) { - list_del(&srb->list); - break; - } -} - - -static void srb_going_to_waiting_move(struct DeviceCtlBlk *dcb, - struct ScsiReqBlk *srb) -{ - dprintkdbg(DBG_0, - "srb_going_to_waiting_move: (0x%p) <%02i-%i> srb=%p\n", - srb->cmd, dcb->target_id, dcb->target_lun, srb); - list_move(&srb->list, &dcb->srb_waiting_list); -} - - -static void srb_waiting_to_going_move(struct DeviceCtlBlk *dcb, - struct ScsiReqBlk *srb) -{ - dprintkdbg(DBG_0, - "srb_waiting_to_going_move: (0x%p) <%02i-%i> srb=%p\n", - srb->cmd, dcb->target_id, dcb->target_lun, srb); - list_move(&srb->list, &dcb->srb_going_list); -} - - /* Sets the timer to wake us up */ static void waiting_set_timer(struct AdapterCtlBlk *acb, unsigned long to) { @@ -923,7 +824,7 @@ static void waiting_process_next(struct AdapterCtlBlk *acb) /* Try to send to the bus */ if (!start_scsi(acb, pos, srb)) - srb_waiting_to_going_move(pos, srb); + list_move(&srb->list, &pos->srb_going_list); else waiting_set_timer(acb, HZ/50); break; @@ -960,15 +861,15 @@ static void send_srb(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb) if (dcb->max_command <= list_size(&dcb->srb_going_list) || acb->active_dcb || (acb->acb_flag & (RESET_DETECT + RESET_DONE + RESET_DEV))) { - srb_waiting_append(dcb, srb); + list_add_tail(&srb->list, &dcb->srb_waiting_list); waiting_process_next(acb); return; } - if (!start_scsi(acb, dcb, srb)) - srb_going_append(dcb, srb); - else { - srb_waiting_insert(dcb, srb); + if (!start_scsi(acb, dcb, srb)) { + list_add_tail(&srb->list, &dcb->srb_going_list); + } else { + list_add(&srb->list, &dcb->srb_waiting_list); waiting_set_timer(acb, HZ / 50); } } @@ -1116,9 +1017,9 @@ static int dc395x_queue_command_lck(struct scsi_cmnd *cmd, void (*done)(struct s cmd->scsi_done = done; cmd->result = 0; - srb = srb_get_free(acb); - if (!srb) - { + srb = list_first_entry_or_null(&acb->srb_free_list, + struct ScsiReqBlk, list); + if (!srb) { /* * Return 1 since we are unable to queue this command at this * point in time. @@ -1126,12 +1027,13 @@ static int dc395x_queue_command_lck(struct scsi_cmnd *cmd, void (*done)(struct s dprintkdbg(DBG_0, "queue_command: No free srb's\n"); return 1; } + list_del(&srb->list); build_srb(cmd, dcb, srb); if (!list_empty(&dcb->srb_waiting_list)) { /* append to waiting queue */ - srb_waiting_append(dcb, srb); + list_add_tail(&srb->list, &dcb->srb_waiting_list); waiting_process_next(acb); } else { /* process immediately */ @@ -1376,11 +1278,11 @@ static int dc395x_eh_abort(struct scsi_cmnd *cmd) srb = find_cmd(cmd, &dcb->srb_waiting_list); if (srb) { - srb_waiting_remove(dcb, srb); + list_del(&srb->list); pci_unmap_srb_sense(acb, srb); pci_unmap_srb(acb, srb); free_tag(dcb, srb); - srb_free_insert(acb, srb); + list_add_tail(&srb->list, &acb->srb_free_list); dprintkl(KERN_DEBUG, "eh_abort: Command was waiting\n"); cmd->result = DID_ABORT << 16; return SUCCESS; @@ -3083,7 +2985,7 @@ static void disconnect(struct AdapterCtlBlk *acb) goto disc1; } free_tag(dcb, srb); - srb_going_to_waiting_move(dcb, srb); + list_move(&srb->list, &dcb->srb_waiting_list); dprintkdbg(DBG_KG, "disconnect: (0x%p) Retry\n", srb->cmd); @@ -3148,7 +3050,7 @@ static void reselect(struct AdapterCtlBlk *acb) srb->state = SRB_READY; free_tag(dcb, srb); - srb_going_to_waiting_move(dcb, srb); + list_move(&srb->list, &dcb->srb_waiting_list); waiting_set_timer(acb, HZ / 20); /* return; */ @@ -3411,7 +3313,7 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, tempcnt--; dcb->max_command = tempcnt; free_tag(dcb, srb); - srb_going_to_waiting_move(dcb, srb); + list_move(&srb->list, &dcb->srb_waiting_list); waiting_set_timer(acb, HZ / 20); srb->adapter_status = 0; srb->target_status = 0; @@ -3498,14 +3400,13 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, cmd->cmnd[0], srb->total_xfer_length); } - srb_going_remove(dcb, srb); - /* Add to free list */ - if (srb == acb->tmp_srb) - dprintkl(KERN_ERR, "srb_done: ERROR! Completed cmd with tmp_srb\n"); - else { + if (srb != acb->tmp_srb) { + /* Add to free list */ dprintkdbg(DBG_0, "srb_done: (0x%p) done result=0x%08x\n", cmd, cmd->result); - srb_free_insert(acb, srb); + list_move_tail(&srb->list, &acb->srb_free_list); + } else { + dprintkl(KERN_ERR, "srb_done: ERROR! Completed cmd with tmp_srb\n"); } pci_unmap_srb(acb, srb); @@ -3535,9 +3436,9 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag, result = MK_RES(0, did_flag, 0, 0); printk("G:%p(%02i-%i) ", p, p->device->id, (u8)p->device->lun); - srb_going_remove(dcb, srb); + list_del(&srb->list); free_tag(dcb, srb); - srb_free_insert(acb, srb); + list_add_tail(&srb->list, &acb->srb_free_list); p->result = result; pci_unmap_srb_sense(acb, srb); pci_unmap_srb(acb, srb); @@ -3565,8 +3466,7 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag, result = MK_RES(0, did_flag, 0, 0); printk("W:%p<%02i-%i>", p, p->device->id, (u8)p->device->lun); - srb_waiting_remove(dcb, srb); - srb_free_insert(acb, srb); + list_move_tail(&srb->list, &acb->srb_free_list); p->result = result; pci_unmap_srb_sense(acb, srb); pci_unmap_srb(acb, srb); @@ -3705,7 +3605,7 @@ static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, dprintkl(KERN_DEBUG, "request_sense: (0x%p) failed <%02i-%i>\n", srb->cmd, dcb->target_id, dcb->target_lun); - srb_going_to_waiting_move(dcb, srb); + list_move(&srb->list, &dcb->srb_waiting_list); waiting_set_timer(acb, HZ / 100); } } @@ -4392,7 +4292,7 @@ static void adapter_init_params(struct AdapterCtlBlk *acb) /* link static array of srbs into the srb free list */ for (i = 0; i < acb->srb_count - 1; i++) - srb_free_insert(acb, &acb->srb_array[i]); + list_add_tail(&acb->srb_array[i].list, &acb->srb_free_list); } From patchwork Thu Oct 11 14:17:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 10636693 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F0CA916B1 for ; Thu, 11 Oct 2018 14:17:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E50312B7E9 for ; Thu, 11 Oct 2018 14:17:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D94712B7EC; Thu, 11 Oct 2018 14:17:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 878852B7E9 for ; Thu, 11 Oct 2018 14:17:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728638AbeJKVot (ORCPT ); Thu, 11 Oct 2018 17:44:49 -0400 Received: from bombadil.infradead.org ([198.137.202.133]:59384 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726537AbeJKVos (ORCPT ); Thu, 11 Oct 2018 17:44:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From :Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=stcB5473RNk2BRXgP0K+WBDKpDxNYOGnz/TB9uDCqU0=; b=qsgBaN1k3by1iGVRrN1ge3ENex 4r9utCua2NUnVR2hgDZGIjwNt7okrwxeIXAt2MasbwNHT/sGFFQasFA68PALOVMnN0fPZNJBg5GgG AuKOVNUh41U8nF7cAxBm7Y1CQB3Zxn/4oodI1zVzFnjui+jDs7y+dWrQVw8gysPl4MhpFm3m2/b/c N7Q0a75IbJKX/Km4bAkGeVMHfPTImhwcymQDTA+6k3DmPBJdfF1JQXsDi5pBajHvpbsf1+aeNpa9w NebOoZeMZeCkd+C0rUSr/FDONlwPglRNL5SISXZ4bHMGxmfh//GEMEl56kMXqLXGoBeyYccrK6fTL eH3jDvtg==; Received: from 089144207060.atnat0016.highway.bob.at ([89.144.207.60] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.90_1 #2 (Red Hat Linux)) id 1gAbmG-0006Sk-8M; Thu, 11 Oct 2018 14:17:24 +0000 From: Christoph Hellwig To: linux-scsi@vger.kernel.org, dc395x@twibble.org Cc: Oliver Neukum , Ali Akcaagac , Jamie Lenehan , Guennadi Liakhovetski Subject: [PATCH 2/4] dc395x: fix dma API usage in srb_done Date: Thu, 11 Oct 2018 16:17:14 +0200 Message-Id: <20181011141716.14908-3-hch@lst.de> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181011141716.14908-1-hch@lst.de> References: <20181011141716.14908-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP We can't just transfer ownership to the CPU and then unmap, as this will break with swiotlb. Instead unmap the command and sense buffer a little earlier in the I/O completion handler and get rid of the pci_dma_sync_sg_for_cpu call entirely. Signed-off-by: Christoph Hellwig --- drivers/scsi/dc395x.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c index 8705730b2e5a..8d7a26a33951 100644 --- a/drivers/scsi/dc395x.c +++ b/drivers/scsi/dc395x.c @@ -3349,14 +3349,12 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, } } - if (dir != PCI_DMA_NONE && scsi_sg_count(cmd)) - pci_dma_sync_sg_for_cpu(acb->dev, scsi_sglist(cmd), - scsi_sg_count(cmd), dir); - ckc_only = 0; /* Check Error Conditions */ ckc_e: + pci_unmap_srb(acb, srb); + if (cmd->cmnd[0] == INQUIRY) { unsigned char *base = NULL; struct ScsiInqData *ptr; @@ -3408,7 +3406,6 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, } else { dprintkl(KERN_ERR, "srb_done: ERROR! Completed cmd with tmp_srb\n"); } - pci_unmap_srb(acb, srb); cmd->scsi_done(cmd); waiting_process_next(acb); From patchwork Thu Oct 11 14:17:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 10636697 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 708BC13AD for ; Thu, 11 Oct 2018 14:17:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6555F2B7E9 for ; Thu, 11 Oct 2018 14:17:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5972C2B7EC; Thu, 11 Oct 2018 14:17:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 026502B7E9 for ; Thu, 11 Oct 2018 14:17:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728641AbeJKVox (ORCPT ); Thu, 11 Oct 2018 17:44:53 -0400 Received: from bombadil.infradead.org ([198.137.202.133]:59404 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726537AbeJKVow (ORCPT ); Thu, 11 Oct 2018 17:44:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From :Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=vxSl+bG/LzmkI1cFO7O+8tIylR5fgg6suXtTm6Pas5Q=; b=mcnDlPUsLZ9ziVpgRIBOXUaukL XQ4U4BRnM1TmXNQAXXlP7OM2q2R8sRaSgzTJVlnCoIHTM2C0wJx6Tt91cAnxX1ovAFeYc+U/Hi+S7 k9qvHLgC6IBaE9QL32WswDBzKv7clWHsnjbwwDHRS6zAlEUWkNU3trMrvIK/DwzPFZuEKwIc1Oc4s J5YEA0nJFy11GwB1OFXmAhkJEzk46OfYDGW7jgyvHxDOri/9q/0jpwsQHvRXi6Bf98fAVqFeXn/A7 QFyo2YuvuQ8Nftq/Rcj4qWdJVUmpJJAVvdLzzz9FVmPXmeZusRaTxUm+qgr1Duyhy0R6hV6KZO5nl bywqzQbQ==; Received: from 089144207060.atnat0016.highway.bob.at ([89.144.207.60] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.90_1 #2 (Red Hat Linux)) id 1gAbmJ-0006Sy-DG; Thu, 11 Oct 2018 14:17:27 +0000 From: Christoph Hellwig To: linux-scsi@vger.kernel.org, dc395x@twibble.org Cc: Oliver Neukum , Ali Akcaagac , Jamie Lenehan , Guennadi Liakhovetski Subject: [PATCH 3/4] dc395x: fix DMA API usage in sg_update_list Date: Thu, 11 Oct 2018 16:17:15 +0200 Message-Id: <20181011141716.14908-4-hch@lst.de> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181011141716.14908-1-hch@lst.de> References: <20181011141716.14908-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP We need to transfer device ownership to the CPU before we can manipulate the mapped data. Signed-off-by: Christoph Hellwig --- drivers/scsi/dc395x.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c index 8d7a26a33951..f3b65e5efe2b 100644 --- a/drivers/scsi/dc395x.c +++ b/drivers/scsi/dc395x.c @@ -1871,6 +1871,11 @@ static void sg_update_list(struct ScsiReqBlk *srb, u32 left) xferred -= psge->length; } else { /* Partial SG entry done */ + pci_dma_sync_single_for_cpu(srb->dcb-> + acb->dev, + srb->sg_bus_addr, + SEGMENTX_LEN, + PCI_DMA_TODEVICE); psge->length -= xferred; psge->address += xferred; srb->sg_index = idx; From patchwork Thu Oct 11 14:17:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 10636699 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 179AC13AD for ; Thu, 11 Oct 2018 14:17:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0B42F2B7E9 for ; Thu, 11 Oct 2018 14:17:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F36D72B7EC; Thu, 11 Oct 2018 14:17:33 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8CEA82B7E9 for ; Thu, 11 Oct 2018 14:17:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728419AbeJKVoz (ORCPT ); Thu, 11 Oct 2018 17:44:55 -0400 Received: from bombadil.infradead.org ([198.137.202.133]:59444 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726537AbeJKVoy (ORCPT ); Thu, 11 Oct 2018 17:44:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From :Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=d2PyjHDtFOQ24UPa0mSeARSgIx22jbZaXU9pN4z1ltQ=; b=cUg1u/1aqOkJzlti333qw80zKO 1RKuZoek9RatlI4kg0FYz4rakXkFdl9AxvGq+oZBQbrmK5S8dD5dQhSZTZy4z7jknIikFUBazbdlB RMkXT1OwUOCeRYtEehEHXlbUJwLXgGSIuel0PdLTaf8md6jf45Z7iWlKbzafZQNEAvuXwYfXxQecV HI/XDqYxpBX7XBjb0u94uJakBO/5ELFdUw/z5LWbAq/utudKEk+aGcLZheI/CbZf4ap2L8iUx00hJ hsSx+nFXSrUoYVo0UZZV9066RgWfVjKXIk20Z5d9Rov4//t0X+gsaPjIags6nOVoWpNgu2EbX+d2T X5fkQuEA==; Received: from 089144207060.atnat0016.highway.bob.at ([89.144.207.60] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.90_1 #2 (Red Hat Linux)) id 1gAbmM-0006TB-De; Thu, 11 Oct 2018 14:17:30 +0000 From: Christoph Hellwig To: linux-scsi@vger.kernel.org, dc395x@twibble.org Cc: Oliver Neukum , Ali Akcaagac , Jamie Lenehan , Guennadi Liakhovetski Subject: [PATCH 4/4] dc395x: use generic DMA API Date: Thu, 11 Oct 2018 16:17:16 +0200 Message-Id: <20181011141716.14908-5-hch@lst.de> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181011141716.14908-1-hch@lst.de> References: <20181011141716.14908-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Convert the driver from the legacy pci_* DMA API to the generic DMA API. Signed-off-by: Christoph Hellwig --- drivers/scsi/dc395x.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c index f3b65e5efe2b..8c55ec6e1827 100644 --- a/drivers/scsi/dc395x.c +++ b/drivers/scsi/dc395x.c @@ -946,10 +946,8 @@ static void build_srb(struct scsi_cmnd *cmd, struct DeviceCtlBlk *dcb, sgp->length++; } - srb->sg_bus_addr = pci_map_single(dcb->acb->dev, - srb->segment_x, - SEGMENTX_LEN, - PCI_DMA_TODEVICE); + srb->sg_bus_addr = dma_map_single(&dcb->acb->dev->dev, + srb->segment_x, SEGMENTX_LEN, DMA_TO_DEVICE); dprintkdbg(DBG_SG, "build_srb: [n] map sg %p->%08x(%05x)\n", srb->segment_x, srb->sg_bus_addr, SEGMENTX_LEN); @@ -1871,19 +1869,15 @@ static void sg_update_list(struct ScsiReqBlk *srb, u32 left) xferred -= psge->length; } else { /* Partial SG entry done */ - pci_dma_sync_single_for_cpu(srb->dcb-> - acb->dev, - srb->sg_bus_addr, - SEGMENTX_LEN, - PCI_DMA_TODEVICE); + dma_sync_single_for_cpu(&srb->dcb->acb->dev->dev, + srb->sg_bus_addr, SEGMENTX_LEN, + DMA_TO_DEVICE); psge->length -= xferred; psge->address += xferred; srb->sg_index = idx; - pci_dma_sync_single_for_device(srb->dcb-> - acb->dev, - srb->sg_bus_addr, - SEGMENTX_LEN, - PCI_DMA_TODEVICE); + dma_sync_single_for_device(&srb->dcb->acb->dev->dev, + srb->sg_bus_addr, SEGMENTX_LEN, + DMA_TO_DEVICE); break; } psge++; @@ -3178,9 +3172,8 @@ static void pci_unmap_srb(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb) /* unmap DC395x SG list */ dprintkdbg(DBG_SG, "pci_unmap_srb: list=%08x(%05x)\n", srb->sg_bus_addr, SEGMENTX_LEN); - pci_unmap_single(acb->dev, srb->sg_bus_addr, - SEGMENTX_LEN, - PCI_DMA_TODEVICE); + dma_unmap_single(&acb->dev->dev, srb->sg_bus_addr, SEGMENTX_LEN, + DMA_TO_DEVICE); dprintkdbg(DBG_SG, "pci_unmap_srb: segs=%i buffer=%p\n", scsi_sg_count(cmd), scsi_bufflen(cmd)); /* unmap the sg segments */ @@ -3198,8 +3191,8 @@ static void pci_unmap_srb_sense(struct AdapterCtlBlk *acb, /* Unmap sense buffer */ dprintkdbg(DBG_SG, "pci_unmap_srb_sense: buffer=%08x\n", srb->segment_x[0].address); - pci_unmap_single(acb->dev, srb->segment_x[0].address, - srb->segment_x[0].length, PCI_DMA_FROMDEVICE); + dma_unmap_single(&acb->dev->dev, srb->segment_x[0].address, + srb->segment_x[0].length, DMA_FROM_DEVICE); /* Restore SG stuff */ srb->total_xfer_length = srb->xferred; srb->segment_x[0].address = @@ -3594,9 +3587,9 @@ static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, srb->total_xfer_length = SCSI_SENSE_BUFFERSIZE; srb->segment_x[0].length = SCSI_SENSE_BUFFERSIZE; /* Map sense buffer */ - srb->segment_x[0].address = - pci_map_single(acb->dev, cmd->sense_buffer, - SCSI_SENSE_BUFFERSIZE, PCI_DMA_FROMDEVICE); + srb->segment_x[0].address = dma_map_single(&acb->dev->dev, + cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE, + DMA_FROM_DEVICE); dprintkdbg(DBG_SG, "request_sense: map buffer %p->%08x(%05x)\n", cmd->sense_buffer, srb->segment_x[0].address, SCSI_SENSE_BUFFERSIZE);