Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp4844393imu; Wed, 19 Dec 2018 01:01:36 -0800 (PST) X-Google-Smtp-Source: AFSGD/WnclREKyFe8F2Dxe9pOfvPMpk/1E5q/4VK67Q33RnZH2PFNgyYJpxa9XI+EQXm0uNIVCwQ X-Received: by 2002:a17:902:2a66:: with SMTP id i93mr19111642plb.113.1545210096421; Wed, 19 Dec 2018 01:01:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545210096; cv=none; d=google.com; s=arc-20160816; b=GhnIVp9dyCWWbQ3RcbcJHU0FF4iDo3uipbgtzN6opRcAemjfKqoA2Qk0h0RKjcFrg4 yMU4rSMiPc28+jCHJTcCNAPHsCczTq4170m/1BZjKiOhZi5162shAeVq/iUEXO1lwj9A m0qIHBEtKNsyE52OycO9oJSKl7MxaSzRSC0bW29VNJ4P9nlCk/rkIfQ8ERTNiPEtHfPW DhILnCnX1Ijz0Eq9VtfUIcuhD2KhG3EvFkkg5fV7UxLPr+qrTjNlEqdd4ECew7l1kqN/ d51vaIw7/DRbSt2s307ryuJwfI8/0TZEGaDL5d1dgzMCGmprcFNVvXSCmmz6PK5zsk8d NvGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:cc:to:from:subject:dkim-signature; bh=RCWcP8gJB4rirILN0bofC1oYAZg1YWh8X8mwW4mc0QA=; b=L9EKT9eoY3lQhczgVDIehMxiwv0FLXpQ+m0LxDUuRlRf+2hDOV5bWCRPNBa3xpOwD4 JtR7j0C15DKhkdvM4yNIZPDb3vbHL/UDcwU18BmdDJ/hO1dj7BTZzsQ8NOYQK+48V9nH 3CsVbXZIdw8pQYlPe1Sqy10pkfxmCpZeBq/Nmbx0fRZW8lrfdd6mRb51kzCdecznnVd8 dQSVPu2zx5khAmQfNogIiEuMOIA3YvuiBwpIu9uDyuqDnMlgJQOO8qgwIvyAJesATFs2 gZ8QPvfjoBluJ8fxJXrXeErW68KF8MobY8fp2QTAUap+WqXpKQrYQQUt+3VgckLiMvZV gcEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@areca-com-tw.20150623.gappssmtp.com header.s=20150623 header.b=vEQIdfS0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u72si14993689pgc.360.2018.12.19.01.01.20; Wed, 19 Dec 2018 01:01:36 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@areca-com-tw.20150623.gappssmtp.com header.s=20150623 header.b=vEQIdfS0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728542AbeLSI4j (ORCPT + 99 others); Wed, 19 Dec 2018 03:56:39 -0500 Received: from mail-io1-f68.google.com ([209.85.166.68]:39229 "EHLO mail-io1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727801AbeLSI4i (ORCPT ); Wed, 19 Dec 2018 03:56:38 -0500 Received: by mail-io1-f68.google.com with SMTP id k7so15009798iob.6 for ; Wed, 19 Dec 2018 00:56:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=areca-com-tw.20150623.gappssmtp.com; s=20150623; h=subject:from:to:cc:date:message-id:mime-version :content-transfer-encoding; bh=RCWcP8gJB4rirILN0bofC1oYAZg1YWh8X8mwW4mc0QA=; b=vEQIdfS0S0Ssr7Xv/sk+/8IcYU6LzhY0Fvnq7kW5RO4wY4L70Py0vxrGhZHoAzbK/U e0jeOkXmFpDE5QSqy/EnEOTyqOlMKeBpBUai+C0OOV/pcW3lPt0TeRIKgHWPvgC9ynNQ 9G+xSLpGDUdVl4ht5Uw3Vru6Zx3P+hHHIf7SooJdz9ULYKCL/K+sZsemJFauxlPnRcvh Gbua595lW1bFW6Ss62Sku2tqoK+T5ybjJV6CltHy3etTBQlWWmyPNf6esxxzaRq5kPRf YbBRdkubnFefgXFxH5t+9DRZ+3YWK60/l9TJdWerkU5gHWVV/CH5jW1dnCiu+K6Xr0yb srqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:mime-version :content-transfer-encoding; bh=RCWcP8gJB4rirILN0bofC1oYAZg1YWh8X8mwW4mc0QA=; b=lrrDeVT+N6koAlosilee7nXZISu5M3RFqvR4vtk3oQhGAqIlKB09PkZBvPvhzku5MJ oDxUAFtR3u20li00R4eX/gZ9EaUyx/vv0Udd4aLUrzmF0NDy9IwRU16ZBR+2+zgS7oDx CY6wi2NoUGrBwgQ6LiZn1fYI0O4ZHlA3DeO0Xf/minOBgOEA3kot8QtGH5F2GWQFOtfr oPjC7ErGuYvAJiMeLNRrWlXNgYm0ZxEPNbb/0YeBS98PxfU0gBPDf30dnyu52KgFjl14 9hjg3BTxL1OM+sUB9gqEjcCUET1wcYwetwfrMvw+r1x0s7UCWaXtfdtDuR9MJTCAxx6n oz7Q== X-Gm-Message-State: AJcUukcT6f5wlZzqFUz9zz1C3IaY5qQqdw6z43AA4gsZeE3SWA8+Ty4O 0T7dhxE7HoDw+3sSDNUgHpFutw== X-Received: by 2002:a5d:83c4:: with SMTP id u4mr1025620ior.213.1545209797961; Wed, 19 Dec 2018 00:56:37 -0800 (PST) Received: from [192.168.0.130] (60-248-88-209.HINET-IP.hinet.net. [60.248.88.209]) by smtp.gmail.com with ESMTPSA id b25sm2938460itd.37.2018.12.19.00.56.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Dec 2018 00:56:37 -0800 (PST) Subject: [PATCH 10/12] scsi: arcmsr: Separate 'set dma mask' as a function From: Ching Huang To: martin.petersen@oracle.com, James.Bottomley@HansenPartnership.com, linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: dan.carpenter@oracle.com, hch@infradead.org, colin.king@canonical.com Content-Type: text/plain; charset="UTF-8" Date: Wed, 19 Dec 2018 16:56:34 +0800 Message-ID: <1545209794.4457.44.camel@Centos6.3-64> Mime-Version: 1.0 X-Mailer: Evolution 2.32.3 (2.32.3-37.el6) Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From Ching Huang Separate 'set dma mask' as a function Signed-off-by: Ching Huang --- diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c index 45f1374..30dff6c 100755 --- a/drivers/scsi/arcmsr/arcmsr_hba.c +++ b/drivers/scsi/arcmsr/arcmsr_hba.c @@ -927,6 +927,31 @@ static void arcmsr_init_set_datetime_timer(struct AdapterControlBlock *pacb) add_timer(&pacb->refresh_timer); } +static int arcmsr_set_dma_mask(struct AdapterControlBlock *acb) +{ + struct pci_dev *pcidev = acb->pdev; + + if (IS_DMA64) { + if (((acb->adapter_type == ACB_ADAPTER_TYPE_A) && !dma_mask_64) || + dma_set_mask(&pcidev->dev, DMA_BIT_MASK(64))) + goto dma32; + if (dma_set_coherent_mask(&pcidev->dev, DMA_BIT_MASK(64)) || + dma_set_mask_and_coherent(&pcidev->dev, DMA_BIT_MASK(64))) { + printk("arcmsr: set DMA 64 mask failed\n"); + return -ENXIO; + } + } else { +dma32: + if (dma_set_mask(&pcidev->dev, DMA_BIT_MASK(32)) || + dma_set_coherent_mask(&pcidev->dev, DMA_BIT_MASK(32)) || + dma_set_mask_and_coherent(&pcidev->dev, DMA_BIT_MASK(32))) { + printk("arcmsr: set DMA 32-bit mask failed\n"); + return -ENXIO; + } + } + return 0; +} + static int arcmsr_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct Scsi_Host *host; @@ -941,22 +966,15 @@ static int arcmsr_probe(struct pci_dev *pdev, const struct pci_device_id *id) if(!host){ goto pci_disable_dev; } - error = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)); - if(error){ - error = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); - if(error){ - printk(KERN_WARNING - "scsi%d: No suitable DMA mask available\n", - host->host_no); - goto scsi_host_release; - } - } init_waitqueue_head(&wait_q); bus = pdev->bus->number; dev_fun = pdev->devfn; acb = (struct AdapterControlBlock *) host->hostdata; memset(acb,0,sizeof(struct AdapterControlBlock)); acb->pdev = pdev; + acb->adapter_type = id->driver_data; + if (arcmsr_set_dma_mask(acb)) + goto scsi_host_release; acb->host = host; host->max_lun = ARCMSR_MAX_TARGETLUN; host->max_id = ARCMSR_MAX_TARGETID; /*16:8*/ @@ -986,7 +1004,6 @@ static int arcmsr_probe(struct pci_dev *pdev, const struct pci_device_id *id) ACB_F_MESSAGE_WQBUFFER_READED); acb->acb_flags &= ~ACB_F_SCSISTOPADAPTER; INIT_LIST_HEAD(&acb->ccb_free_list); - acb->adapter_type = id->driver_data; error = arcmsr_remap_pciregion(acb); if(!error){ goto pci_release_regs; @@ -1077,7 +1094,6 @@ static int arcmsr_suspend(struct pci_dev *pdev, pm_message_t state) static int arcmsr_resume(struct pci_dev *pdev) { - int error; struct Scsi_Host *host = pci_get_drvdata(pdev); struct AdapterControlBlock *acb = (struct AdapterControlBlock *)host->hostdata; @@ -1089,15 +1105,8 @@ static int arcmsr_resume(struct pci_dev *pdev) pr_warn("%s: pci_enable_device error\n", __func__); return -ENODEV; } - error = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)); - if (error) { - error = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); - if (error) { - pr_warn("scsi%d: No suitable DMA mask available\n", - host->host_no); - goto controller_unregister; - } - } + if (arcmsr_set_dma_mask(acb)) + goto controller_unregister; pci_set_master(pdev); if (arcmsr_request_irq(pdev, acb) == FAILED) goto controller_stop;