From patchwork Fri Aug 6 11:11:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 1514291 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=F6DZtJM8; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4Gh2qZ0tmZz9sWX for ; Fri, 6 Aug 2021 21:11:54 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237616AbhHFLMH (ORCPT ); Fri, 6 Aug 2021 07:12:07 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:47118 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232079AbhHFLMG (ORCPT ); Fri, 6 Aug 2021 07:12:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1628248312; x=1659784312; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=T5iQtR+m8wm/ph6xRjNe4reIj5HsO8pLsUVsDBnawno=; b=F6DZtJM8uL+UU2ntH0EgLrejaoFz8w8WDaK2O6pf/aGb4toebd3aER49 hjlANpYw6llPFzi0KKUlezah4cMttRcM1qW4UYPyH8vbXHEWKz4Xqbe5Q zJZGlg/y+4bCA8tYD9Dywx1uEjLnGAVpjTQ8TPezL8R483CWLJaV4nWCt qzi1glXCor2wlM5sTL6R0Gwpz5oxh6r6SIcLz/8/BRx1AKCgylUOzr1nk 4Ws9sdBbfQEq6rdAeSEIkCLy+lkJstsQD64+sclvOdrQli7SjR8sPLduJ UEzPTDfmAj3mJkZMlAX4nYsl+bQ8Hd6CZSzwdXMryWMQ2IzTnRAS79AGr w==; X-IronPort-AV: E=Sophos;i="5.84,300,1620662400"; d="scan'208";a="177055539" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 06 Aug 2021 19:11:51 +0800 IronPort-SDR: UnJhJ08Wi/rXK4bsnbmQpO1D8MdQNO37wksJk3hSOY8iVS74fWEEdGp1+vLsuenpOz8IWKLjDD 3Tjr/KKCUsXWU51P0Q8pOhV1jm/FwcKXlsV5s0wtu8VCaATBHt3r5MkLu3Q1yzrmi4AFye8OIO vt3L/rFTnoCrCLkTKLRZ99DUDOJScSlDOh19Rosi8fa1Hbc/LVDMTdJO9/zYRUM6yk7RVGlVnS m182VBgHyeJ1LHR8e1IcUgPahosFHT7uPO/bWoRARDv8X5lXiyB15rbogqJDEY0MXdYvftPzbg Kgp8VAIjYQUruoqY0re6Ib1t Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Aug 2021 03:47:26 -0700 IronPort-SDR: Se+NN54bWB7PzSZkzW28YlNJP6Cl+N3Tt2KVvwFk39RdRPrGUmEbOvzoZC8GEBwSRS+5iXxoQy 3wOl/yZ0t/T56RBfR76UqVK7fhaDW8E3KuX3FXI1MvmK+D3XP5ggwQ/xZN0i8DjHA38SxJEz62 Eco/HeirkpKGjPTsxXdggfkFNb9rMcOC0j0ToSofiFK0wBZvTRQG3bHdnktq1Wv8FqpG6lyDNd /nTDCdaZDcxiB/RBV4z5QTpehSD6kb1haGP1jn87AhB6BLBafRgNq+ye6V+6By5V1f86rCS9QE Jvw= WDCIronportException: Internal Received: from washi.fujisawa.hgst.com ([10.149.53.254]) by uls-op-cesaip02.wdc.com with ESMTP; 06 Aug 2021 04:11:50 -0700 From: Damien Le Moal To: Jens Axboe , linux-block@vger.kernel.org, linux-ide@vger.kernel.org, "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Sathya Prakash , Sreekanth Reddy , Suganath Prabu Subramani Subject: [PATCH v3 1/9] libata: fix ata_host_alloc_pinfo() Date: Fri, 6 Aug 2021 20:11:37 +0900 Message-Id: <20210806111145.445697-2-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210806111145.445697-1-damien.lemoal@wdc.com> References: <20210806111145.445697-1-damien.lemoal@wdc.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Avoid a potential NULL pointer dereference by testing that the ATA port info variable "pi". Reported-by: kernel test robot Signed-off-by: Damien Le Moal Reviewed-by: Hannes Reinecke --- drivers/ata/libata-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 61c762961ca8..ea8b91297f12 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -5458,7 +5458,7 @@ struct ata_host *ata_host_alloc_pinfo(struct device *dev, ap->link.flags |= pi->link_flags; ap->ops = pi->port_ops; - if (!host->ops && (pi->port_ops != &ata_dummy_port_ops)) + if (!host->ops && pi && pi->port_ops != &ata_dummy_port_ops) host->ops = pi->port_ops; } From patchwork Fri Aug 6 11:11:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 1514292 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=hPlKBo/6; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4Gh2qc1Fx8z9sRR for ; Fri, 6 Aug 2021 21:11:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245336AbhHFLMK (ORCPT ); Fri, 6 Aug 2021 07:12:10 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:47118 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232079AbhHFLMH (ORCPT ); Fri, 6 Aug 2021 07:12:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1628248313; x=1659784313; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=uUZ1+YSkY07S1sOnW9DMCk0sb8DSqpYgvgs5GZz3c34=; b=hPlKBo/6Od7CbghNo3sqXDU2vxczim+9iWKZTenXWO800VGUHm3DUBCM t2O1HyK6AOKESDVEE5vHLSaGuhjoFbdJA0YryD7usVVhmQwhpJahnF901 iR8e/GRt1SsyQzWILfCF4OeSqMHWko8VMaueGi1JV8mzTacMWke6daaUt ACrisa22m8wD4fK7jct55MfvVIIq2apOVCRskpydy4/qh/zDQfUigXt2r UNxaNWXg8pYd1h0Lno2BpP5lECp9wIVI/rUwpkXrHpKUsfhOSHSmi2fa1 w5WJxKynAqNCW93fMmbC8UOL4wdIbg6SzJZbF1T6S9O/TfzFegGUYxG4l w==; X-IronPort-AV: E=Sophos;i="5.84,300,1620662400"; d="scan'208";a="177055542" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 06 Aug 2021 19:11:53 +0800 IronPort-SDR: OCHyHL7fk+QXyt4f9WbHAmqSAtFxrwlg31L/EZgHOtuTwHgUF8QA7N2BzLjvCShj7dmsWbAOd8 8gEBfxJPw1Tfe7r3jrlqUEKxvZzUpdLsUmHoVebSvfaR/4sC8pIiITCduDvryvYPvqAbriWlby s+t+KvJhN1zjdJ0/zEv/WDk7thSwI0h0KvKxv7XLIaQ7h4nQ3NldZODTLdeUSkLv/DvpqWNwJD IADfziuNnTnA90bzHsCwCZ2oE5sIVKW5ZuPX63zx/go/KdEd2v5JX7x+ijjuQ19E3s+0VfMktA BDvWCxGHQn/i/siZU9l6XMhA Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Aug 2021 03:47:28 -0700 IronPort-SDR: 7P/QsreECFL24yf6c16ivDSqmJDfjQVSO6xjp8HBcTljsoUGnCfjLivyCcvwiEcpZ1NEkcdugM mwuHgrnsQUnkM/nb0FdhqXdQT4EkVBh6Wg2zyI3zKmC4fCshes71+QISy7jaevXvyzDS29gE2j v8St3UDekvsavAQIZXi6ZvKMWy4SkItJs2+3cNUCAC69U4jdFcHWdVE+pW22ombYTydhbBX/kn n+gEG00Mf2FAnpUmAqApdPiJseQRkQQFgDtgWgWboVjzN3pB7M0jdgUG+qE4SPjmiumyoTwlPC qOI= WDCIronportException: Internal Received: from washi.fujisawa.hgst.com ([10.149.53.254]) by uls-op-cesaip02.wdc.com with ESMTP; 06 Aug 2021 04:11:51 -0700 From: Damien Le Moal To: Jens Axboe , linux-block@vger.kernel.org, linux-ide@vger.kernel.org, "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Sathya Prakash , Sreekanth Reddy , Suganath Prabu Subramani Subject: [PATCH v3 2/9] libata: fix ata_host_start() Date: Fri, 6 Aug 2021 20:11:38 +0900 Message-Id: <20210806111145.445697-3-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210806111145.445697-1-damien.lemoal@wdc.com> References: <20210806111145.445697-1-damien.lemoal@wdc.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org The loop on entry of ata_host_start() may not initialize host->ops to a non NULL value. The test on the host_stop field of host->ops must then be preceded by a check that host->ops is not NULL. Reported-by: kernel test robot Signed-off-by: Damien Le Moal Reviewed-by: Hannes Reinecke --- drivers/ata/libata-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index ea8b91297f12..fe49197caf99 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -5573,7 +5573,7 @@ int ata_host_start(struct ata_host *host) have_stop = 1; } - if (host->ops->host_stop) + if (host->ops && host->ops->host_stop) have_stop = 1; if (have_stop) { From patchwork Fri Aug 6 11:11:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 1514293 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=HjRpYG1p; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4Gh2qc4CPnz9sWX for ; Fri, 6 Aug 2021 21:11:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232079AbhHFLML (ORCPT ); Fri, 6 Aug 2021 07:12:11 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:47128 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245322AbhHFLMJ (ORCPT ); Fri, 6 Aug 2021 07:12:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1628248315; x=1659784315; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vHcGZ73V/R4Q8ziXdS6jpoinqApQHXcoTZdx3/d+YEs=; b=HjRpYG1p8F2Wn/42Udz2+/ElOvUpn0xcZ61KqpWa6JBAubq9NyMMlVEj LUl9hwC0BOEarNbegjDYhHjD/CUT617bMnDEWHCO2OoJwhaYlEfxReVIK 9V6KGY00txCNDOLooXVoXOSTJrRvyaMO/5C9mPOY9QtwmmqK+QDUhc5iI X/j9GEaTJcznjhhI/xT2vFUHLE6QuEqB6YIPXj22QX1iPcMQxmiZFYcEK eAy/S9BtOGMe/Y8/2GIuCc9MJ2g6wwSN3ONsInASBe2Hky8Oz3GfZtjZs G14T+M461W5/KOJepsl1rT6EvGIgmvyoRlUf/pVNZPvCAngwf/IazVfhQ w==; X-IronPort-AV: E=Sophos;i="5.84,300,1620662400"; d="scan'208";a="177055551" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 06 Aug 2021 19:11:54 +0800 IronPort-SDR: KpfjRcOrqq43grPMDFiIP2KwiqLRn8EZ3vS/QrTbOSUrMFm/nE0RGm1/p14YuUd2mvKRETYBQc 3jLX7uULlnkRH+Xv42bDOHe/J+iD3I4eTgq6CtEwG3mkJWW5B3BXyIY0y4PTlqQxDn5vedxTNP f6RTQGOtGe6gdSCyZ6kpmvWPgqsS9jfZh9nqxT6W8akGuByFI7wgJ24NUgnxv5BbN9kBcpxtPw yoc4Q/NMUe+FdaSmyLQpl2AX58SPdvU02gc2FTVD9bmBhQaCLTlCw8m5UAcV/boHdDl6xX50oG hyqitb9pMQvFThNxW/3sHfi7 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Aug 2021 03:47:29 -0700 IronPort-SDR: lgmijqd75EPJrzm/UMNTW4gdk/zPTfLNGCp5AOXSpXwIpKZq0wlhhWQQ7aw+LYA4MQvqNvmFJX UpSJZn40ENJ1uj2OkMr9gjz0MSL5fA3UTiRuzEygbBfvWrXNLpsHBH+a5TcsirRf0InAp0q2HA eEz+jl0j0uOBfBPbFjBjIZv3HuPb3eyoAReDkmS2oyOd7/I7GBBwRVfC4rek+LR0Ywnt/2GDNm RaZAmcvaYov93UXSuqDa1vK7430YjNYzbzm/QmsICQ/gGwKbd3/nOvMD5+XIFXyQW8zQLOqBMB xT8= WDCIronportException: Internal Received: from washi.fujisawa.hgst.com ([10.149.53.254]) by uls-op-cesaip02.wdc.com with ESMTP; 06 Aug 2021 04:11:53 -0700 From: Damien Le Moal To: Jens Axboe , linux-block@vger.kernel.org, linux-ide@vger.kernel.org, "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Sathya Prakash , Sreekanth Reddy , Suganath Prabu Subramani Subject: [PATCH v3 3/9] libata: cleanup device sleep capability detection Date: Fri, 6 Aug 2021 20:11:39 +0900 Message-Id: <20210806111145.445697-4-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210806111145.445697-1-damien.lemoal@wdc.com> References: <20210806111145.445697-1-damien.lemoal@wdc.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Move the code to retrieve the device sleep capability and timings out of ata_dev_configure() into the helper function ata_dev_config_devslp(). While at it, mark the device as supporting the device sleep capability only if the sata settings page was retrieved successfully to ensure that the timing information is correctly initialized. Signed-off-by: Damien Le Moal Reviewed-by: Hannes Reinecke --- drivers/ata/libata-core.c | 55 +++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index fe49197caf99..b13194432e5a 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -2363,6 +2363,37 @@ static void ata_dev_config_trusted(struct ata_device *dev) dev->flags |= ATA_DFLAG_TRUSTED; } +static void ata_dev_config_devslp(struct ata_device *dev) +{ + u8 *sata_setting = dev->link->ap->sector_buf; + unsigned int err_mask; + int i, j; + + /* + * Check device sleep capability. Get DevSlp timing variables + * from SATA Settings page of Identify Device Data Log. + */ + if (!ata_id_has_devslp(dev->id)) + return; + + err_mask = ata_read_log_page(dev, + ATA_LOG_IDENTIFY_DEVICE, + ATA_LOG_SATA_SETTINGS, + sata_setting, 1); + if (err_mask) { + ata_dev_dbg(dev, + "failed to get SATA Settings Log, Emask 0x%x\n", + err_mask); + return; + } + + dev->flags |= ATA_DFLAG_DEVSLP; + for (i = 0; i < ATA_LOG_DEVSLP_SIZE; i++) { + j = ATA_LOG_DEVSLP_OFFSET + i; + dev->devslp_timing[i] = sata_setting[j]; + } +} + /** * ata_dev_configure - Configure the specified ATA/ATAPI device * @dev: Target device to configure @@ -2565,29 +2596,7 @@ int ata_dev_configure(struct ata_device *dev) } } - /* Check and mark DevSlp capability. Get DevSlp timing variables - * from SATA Settings page of Identify Device Data Log. - */ - if (ata_id_has_devslp(dev->id)) { - u8 *sata_setting = ap->sector_buf; - int i, j; - - dev->flags |= ATA_DFLAG_DEVSLP; - err_mask = ata_read_log_page(dev, - ATA_LOG_IDENTIFY_DEVICE, - ATA_LOG_SATA_SETTINGS, - sata_setting, - 1); - if (err_mask) - ata_dev_dbg(dev, - "failed to get Identify Device Data, Emask 0x%x\n", - err_mask); - else - for (i = 0; i < ATA_LOG_DEVSLP_SIZE; i++) { - j = ATA_LOG_DEVSLP_OFFSET + i; - dev->devslp_timing[i] = sata_setting[j]; - } - } + ata_dev_config_devslp(dev); ata_dev_config_sense_reporting(dev); ata_dev_config_zac(dev); ata_dev_config_trusted(dev); From patchwork Fri Aug 6 11:11:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 1514294 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=cSE1A8Jw; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4Gh2qg6qnSz9sWX for ; Fri, 6 Aug 2021 21:11:59 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245322AbhHFLML (ORCPT ); Fri, 6 Aug 2021 07:12:11 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:47118 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245330AbhHFLMK (ORCPT ); Fri, 6 Aug 2021 07:12:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1628248316; x=1659784316; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=pVcHlmpRoWuO37/J7WKk29Grb6YsuafHSBbKZmTx2+Q=; b=cSE1A8Jwwkl/gJRjRHv3wdRADdJmVxaeYEOmjOOtxv6nlJ89lX7cog72 qB01/fGtOTslEP40utNQw2B5n+kbf6a5OKi1++guNnFViq2+4OPLFNzG1 8zFn/a6MNNUfDv9oXYQTNZGKDhTtcLQ+Jrk+emt8CC2k1Gtlb9xjCYl5J sE5lW6FP9j5bFMhN4C4dkNGHvm7ECWc3QX6LjnXVdzqzBUvyT3+0wDNRM RQNzFW5Kb1qdFpq17Ee9vK3rIq+F/sRRXzTN8Db3YDXhuKX52G09UZdkF mTxF3jXJnUeRslPUFRGIo7dSrXVDNK/4/6O0uNHElxalocaDteosI/4c6 g==; X-IronPort-AV: E=Sophos;i="5.84,300,1620662400"; d="scan'208";a="177055554" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 06 Aug 2021 19:11:56 +0800 IronPort-SDR: 7U+dBcQ43mhsqRQGfCOdEM9Jfz9ok1q+iSIt3EJ8I8HVLgaTEVOTvkul1ZHPsBS0q25W68CT1r uHh8IxJu0n1JxYF+hUXVQojTIdO5e6KM5Qrdzi63iJYbV7/DzIqBvNz7LvhhNoDDCA9O01I9n7 Y6ElP1gdlNXWH/hrbjukw8//HcdlVTmNDkxmECIgIA++vcvqUHIs05nyY/eOZ5s8bFchihpoiH aHZl41EgLmlZCpuwsyF5yoYfcd+pcuD5ONDor4bL52i/YpM3eGvwcHieAUza9xnavWdVBGTFyp Ypaidz9cYHIOnh89stqGI8YM Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Aug 2021 03:47:31 -0700 IronPort-SDR: 6gChgECcAZRXhIbYrmfT7f6uI1LWL7fDf3Vn6OCNymRjRbZEjcLgtdaoy+HZYw/GEACTpn30z0 ZWstvCrj51pbOXpCsjG1e4Wtq5AbsYT8IBLrFKSY4ol5snsJkmYQAI3iVKLjlUUMSBxTRgsosh J6Wb85P3ncBTS5lL2fbLiXBrDoTNvCGQdgrUVaXW4lYCTBNLKIOA4ihk3Djf27+WmHSXzAmEsg Qc6Lzu500TcNHmpIRKlmX+aEeCHN0Zk5oTonCTicUuqXtg7SppCgzBFabih+GHxayFCRXkpLDG pkw= WDCIronportException: Internal Received: from washi.fujisawa.hgst.com ([10.149.53.254]) by uls-op-cesaip02.wdc.com with ESMTP; 06 Aug 2021 04:11:54 -0700 From: Damien Le Moal To: Jens Axboe , linux-block@vger.kernel.org, linux-ide@vger.kernel.org, "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Sathya Prakash , Sreekanth Reddy , Suganath Prabu Subramani Subject: [PATCH v3 4/9] libata: cleanup ata_dev_configure() Date: Fri, 6 Aug 2021 20:11:40 +0900 Message-Id: <20210806111145.445697-5-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210806111145.445697-1-damien.lemoal@wdc.com> References: <20210806111145.445697-1-damien.lemoal@wdc.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Introduce the helper functions ata_dev_config_lba() and ata_dev_config_chs() to configure the addressing capabilities of a device. To control message printing in these new helpers, as well as in ata_dev_configure() and in ata_hpa_resize(), add the helper function ata_dev_print_info() to avoid open coding for the eh context ATA_EHI_PRINTINFO flag in multiple functions. Signed-off-by: Damien Le Moal Reviewed-by: Hannes Reinecke --- drivers/ata/libata-core.c | 131 ++++++++++++++++++++++---------------- 1 file changed, 75 insertions(+), 56 deletions(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index b13194432e5a..d3076283f9ce 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -159,6 +159,12 @@ MODULE_DESCRIPTION("Library module for ATA devices"); MODULE_LICENSE("GPL"); MODULE_VERSION(DRV_VERSION); +static inline bool ata_dev_print_info(struct ata_device *dev) +{ + struct ata_eh_context *ehc = &dev->link->eh_context; + + return ehc->i.flags & ATA_EHI_PRINTINFO; +} static bool ata_sstatus_online(u32 sstatus) { @@ -1266,8 +1272,7 @@ static int ata_set_max_sectors(struct ata_device *dev, u64 new_sectors) */ static int ata_hpa_resize(struct ata_device *dev) { - struct ata_eh_context *ehc = &dev->link->eh_context; - int print_info = ehc->i.flags & ATA_EHI_PRINTINFO; + bool print_info = ata_dev_print_info(dev); bool unlock_hpa = ata_ignore_hpa || dev->flags & ATA_DFLAG_UNLOCK_HPA; u64 sectors = ata_id_n_sectors(dev->id); u64 native_sectors; @@ -2363,6 +2368,65 @@ static void ata_dev_config_trusted(struct ata_device *dev) dev->flags |= ATA_DFLAG_TRUSTED; } +static int ata_dev_config_lba(struct ata_device *dev) +{ + struct ata_port *ap = dev->link->ap; + const u16 *id = dev->id; + const char *lba_desc; + char ncq_desc[24]; + int ret; + + dev->flags |= ATA_DFLAG_LBA; + + if (ata_id_has_lba48(id)) { + lba_desc = "LBA48"; + dev->flags |= ATA_DFLAG_LBA48; + if (dev->n_sectors >= (1UL << 28) && + ata_id_has_flush_ext(id)) + dev->flags |= ATA_DFLAG_FLUSH_EXT; + } else { + lba_desc = "LBA"; + } + + /* config NCQ */ + ret = ata_dev_config_ncq(dev, ncq_desc, sizeof(ncq_desc)); + + /* print device info to dmesg */ + if (ata_msg_drv(ap) && ata_dev_print_info(dev)) + ata_dev_info(dev, + "%llu sectors, multi %u: %s %s\n", + (unsigned long long)dev->n_sectors, + dev->multi_count, lba_desc, ncq_desc); + + return ret; +} + +static void ata_dev_config_chs(struct ata_device *dev) +{ + struct ata_port *ap = dev->link->ap; + const u16 *id = dev->id; + + if (ata_id_current_chs_valid(id)) { + /* Current CHS translation is valid. */ + dev->cylinders = id[54]; + dev->heads = id[55]; + dev->sectors = id[56]; + } else { + /* Default translation */ + dev->cylinders = id[1]; + dev->heads = id[3]; + dev->sectors = id[6]; + } + + /* print device info to dmesg */ + if (ata_msg_drv(ap) && ata_dev_print_info(dev)) + ata_dev_info(dev, + "%llu sectors, multi %u, CHS %u/%u/%u\n", + (unsigned long long)dev->n_sectors, + dev->multi_count, dev->cylinders, + dev->heads, dev->sectors); +} + static void ata_dev_config_devslp(struct ata_device *dev) { u8 *sata_setting = dev->link->ap->sector_buf; @@ -2410,8 +2474,7 @@ static void ata_dev_config_devslp(struct ata_device *dev) int ata_dev_configure(struct ata_device *dev) { struct ata_port *ap = dev->link->ap; - struct ata_eh_context *ehc = &dev->link->eh_context; - int print_info = ehc->i.flags & ATA_EHI_PRINTINFO; + bool print_info = ata_dev_print_info(dev); const u16 *id = dev->id; unsigned long xfer_mask; unsigned int err_mask; @@ -2538,62 +2601,18 @@ int ata_dev_configure(struct ata_device *dev) dev->multi_count = cnt; } - if (ata_id_has_lba(id)) { - const char *lba_desc; - char ncq_desc[24]; - - lba_desc = "LBA"; - dev->flags |= ATA_DFLAG_LBA; - if (ata_id_has_lba48(id)) { - dev->flags |= ATA_DFLAG_LBA48; - lba_desc = "LBA48"; - - if (dev->n_sectors >= (1UL << 28) && - ata_id_has_flush_ext(id)) - dev->flags |= ATA_DFLAG_FLUSH_EXT; - } + /* print device info to dmesg */ + if (ata_msg_drv(ap) && print_info) + ata_dev_info(dev, "%s: %s, %s, max %s\n", + revbuf, modelbuf, fwrevbuf, + ata_mode_string(xfer_mask)); - /* config NCQ */ - rc = ata_dev_config_ncq(dev, ncq_desc, sizeof(ncq_desc)); + if (ata_id_has_lba(id)) { + rc = ata_dev_config_lba(dev); if (rc) return rc; - - /* print device info to dmesg */ - if (ata_msg_drv(ap) && print_info) { - ata_dev_info(dev, "%s: %s, %s, max %s\n", - revbuf, modelbuf, fwrevbuf, - ata_mode_string(xfer_mask)); - ata_dev_info(dev, - "%llu sectors, multi %u: %s %s\n", - (unsigned long long)dev->n_sectors, - dev->multi_count, lba_desc, ncq_desc); - } } else { - /* CHS */ - - /* Default translation */ - dev->cylinders = id[1]; - dev->heads = id[3]; - dev->sectors = id[6]; - - if (ata_id_current_chs_valid(id)) { - /* Current CHS translation is valid. */ - dev->cylinders = id[54]; - dev->heads = id[55]; - dev->sectors = id[56]; - } - - /* print device info to dmesg */ - if (ata_msg_drv(ap) && print_info) { - ata_dev_info(dev, "%s: %s, %s, max %s\n", - revbuf, modelbuf, fwrevbuf, - ata_mode_string(xfer_mask)); - ata_dev_info(dev, - "%llu sectors, multi %u, CHS %u/%u/%u\n", - (unsigned long long)dev->n_sectors, - dev->multi_count, dev->cylinders, - dev->heads, dev->sectors); - } + ata_dev_config_chs(dev); } ata_dev_config_devslp(dev); From patchwork Fri Aug 6 11:11:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 1514295 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=pGirjBTv; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4Gh2qn5x2Lz9sRR for ; Fri, 6 Aug 2021 21:12:05 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245403AbhHFLMU (ORCPT ); Fri, 6 Aug 2021 07:12:20 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:47118 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245365AbhHFLMM (ORCPT ); Fri, 6 Aug 2021 07:12:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1628248318; x=1659784318; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=soC5qKjs6HcnaOU7WHgJkTyCmuz0NoEeZLniXtNDGi0=; b=pGirjBTvrFVD3VhRRKUT7Vyu6mRcBc4A8d1WKD3OFHEOtNlZEY8pZr1d 4INxUbgVa1jHmayXz2RZqTERKdu2iMUqsUMuvPepq0WuxOXumz1Xnnpa/ s9djb05v75xmPaVQpzUFPz1NF0iaIldFJPP/zCXNKf2zVxEGrr5gHFIBo VbTgckauojjHkKtvkqarptHAOLAZn0GSEOV64MVB/hcrlEQ9lgralgR+c 5oxlKQSPKE0KJBQcY9apyHGl4G0wE6Ws+orY1ItamGhM4fNBpBfztliKw D4ycgNEcfVT7PPp2A3JVuftrKjKUSA2HrSiEKxSnsnxG3g+oTb2RCojCd A==; X-IronPort-AV: E=Sophos;i="5.84,300,1620662400"; d="scan'208";a="177055558" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 06 Aug 2021 19:11:58 +0800 IronPort-SDR: s6Yb/LiGwi2lnfdHfmW8KI37LbZNbqxYWFur7qOeuqvIWlpiZZSMn1uIAnYmwHwPzuLftUtzxK ODI6cD0JfEvzXNfkWljR2GU9FZ2NtPh4qpr9XBjp7J7ABxAkMp7zrFozwkPRIbrmzicwtZBJOX ncP/T+jIphruCJjNQNq+qx9dokdPYqZ1sd4a3e7FdcvxurxIjRXHu2746jUNJRNvBbTBiPB7Rq eOOS5E+OCpQ+5+jjx4ASiu+zaC24kWEkk4ddTiHk2ZmXtgJQQugN83iUrYVCz7AQXN6/DF3hMl mMTbZSKeDQj+xZcZTTJztbzc Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Aug 2021 03:47:33 -0700 IronPort-SDR: 0kPkzAmVo7P//TneA/LJqWwmhKs7wd80skqW1OiKG6t3mUpFOvfeLFhUUP3ueV0LTzzfj/NXuN ptAezV9OjX7pS21Y1sx8/zeXJtJlRTwYZBUcSGjmC5FcGhYALO5BqM6wFydPay8/DrkczAxXMO 4+pUbyRWYu3hti8C58sdq/sQyRVZAbGeumxRXyJC8SK2O0mM81JAX8snvpSw08R8O1mX2BnuWn 4MAsd4F9vRI2dGtAKrnaeANhOxzEj8u2x/c0t031/212eZyUSY/r9i6WMKwILSG7WrxuWrvz7A oJ8= WDCIronportException: Internal Received: from washi.fujisawa.hgst.com ([10.149.53.254]) by uls-op-cesaip02.wdc.com with ESMTP; 06 Aug 2021 04:11:56 -0700 From: Damien Le Moal To: Jens Axboe , linux-block@vger.kernel.org, linux-ide@vger.kernel.org, "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Sathya Prakash , Sreekanth Reddy , Suganath Prabu Subramani Subject: [PATCH v3 5/9] libata: cleanup NCQ priority handling Date: Fri, 6 Aug 2021 20:11:41 +0900 Message-Id: <20210806111145.445697-6-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210806111145.445697-1-damien.lemoal@wdc.com> References: <20210806111145.445697-1-damien.lemoal@wdc.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org The ata device flag ATA_DFLAG_NCQ_PRIO indicates if a device supports the NCQ Priority feature while the ATA_DFLAG_NCQ_PRIO_ENABLE device flag indicates if the feature is enabled. Enabling NCQ priority use is controlled by the user through the device sysfs attribute ncq_prio_enable. As a result, the ATA_DFLAG_NCQ_PRIO flag should not be cleared when ATA_DFLAG_NCQ_PRIO_ENABLE is not set as the device still supports the feature even after the user disables it. This leads to the following cleanups: - In ata_build_rw_tf(), set a command high priority bit based on the ATA_DFLAG_NCQ_PRIO_ENABLE flag, not on the ATA_DFLAG_NCQ flag. That is, set a command high priority only if the user enabled NCQ priority use. - In ata_dev_config_ncq_prio(), ATA_DFLAG_NCQ_PRIO should not be cleared if ATA_DFLAG_NCQ_PRIO_ENABLE is not set. If the device does not support NCQ priority, both ATA_DFLAG_NCQ_PRIO and ATA_DFLAG_NCQ_PRIO_ENABLE must be cleared. With the above ata_dev_config_ncq_prio() change, ATA_DFLAG_NCQ_PRIO flag is set on device scan and revalidation. There is no need to trigger a device revalidation in ata_ncq_prio_enable_store() when the user enables the use of NCQ priority. Remove the revalidation code from that funciton to simplify it. Also change the return value from -EIO to -EINVAL when a user tries to enable NCQ priority for a device that does not support this feature. While at it, also simplify ata_ncq_prio_enable_show(). Overall, there is no functional change introduced by this patch. Signed-off-by: Damien Le Moal Reviewed-by: Hannes Reinecke --- drivers/ata/libata-core.c | 32 ++++++++++++++------------------ drivers/ata/libata-sata.c | 37 ++++++++++++------------------------- 2 files changed, 26 insertions(+), 43 deletions(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index d3076283f9ce..3e574e29ee37 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -712,11 +712,9 @@ int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev, if (tf->flags & ATA_TFLAG_FUA) tf->device |= 1 << 7; - if (dev->flags & ATA_DFLAG_NCQ_PRIO) { - if (class == IOPRIO_CLASS_RT) - tf->hob_nsect |= ATA_PRIO_HIGH << - ATA_SHIFT_PRIO; - } + if (dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE && + class == IOPRIO_CLASS_RT) + tf->hob_nsect |= ATA_PRIO_HIGH << ATA_SHIFT_PRIO; } else if (dev->flags & ATA_DFLAG_LBA) { tf->flags |= ATA_TFLAG_LBA; @@ -2178,11 +2176,6 @@ static void ata_dev_config_ncq_prio(struct ata_device *dev) struct ata_port *ap = dev->link->ap; unsigned int err_mask; - if (!(dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE)) { - dev->flags &= ~ATA_DFLAG_NCQ_PRIO; - return; - } - err_mask = ata_read_log_page(dev, ATA_LOG_IDENTIFY_DEVICE, ATA_LOG_SATA_SETTINGS, @@ -2190,18 +2183,21 @@ static void ata_dev_config_ncq_prio(struct ata_device *dev) 1); if (err_mask) { ata_dev_dbg(dev, - "failed to get Identify Device data, Emask 0x%x\n", + "failed to get SATA settings log, Emask 0x%x\n", err_mask); - return; + goto not_supported; } - if (ap->sector_buf[ATA_LOG_NCQ_PRIO_OFFSET] & BIT(3)) { - dev->flags |= ATA_DFLAG_NCQ_PRIO; - } else { - dev->flags &= ~ATA_DFLAG_NCQ_PRIO; - ata_dev_dbg(dev, "SATA page does not support priority\n"); - } + if (!(ap->sector_buf[ATA_LOG_NCQ_PRIO_OFFSET] & BIT(3))) + goto not_supported; + + dev->flags |= ATA_DFLAG_NCQ_PRIO; + + return; +not_supported: + dev->flags &= ~ATA_DFLAG_NCQ_PRIO_ENABLE; + dev->flags &= ~ATA_DFLAG_NCQ_PRIO; } static int ata_dev_config_ncq(struct ata_device *dev, diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c index 8adeab76dd38..dc397ebda089 100644 --- a/drivers/ata/libata-sata.c +++ b/drivers/ata/libata-sata.c @@ -839,23 +839,17 @@ static ssize_t ata_ncq_prio_enable_show(struct device *device, char *buf) { struct scsi_device *sdev = to_scsi_device(device); - struct ata_port *ap; + struct ata_port *ap = ata_shost_to_port(sdev->host); struct ata_device *dev; bool ncq_prio_enable; int rc = 0; - ap = ata_shost_to_port(sdev->host); - spin_lock_irq(ap->lock); dev = ata_scsi_find_dev(ap, sdev); - if (!dev) { + if (!dev) rc = -ENODEV; - goto unlock; - } - - ncq_prio_enable = dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE; - -unlock: + else + ncq_prio_enable = dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE; spin_unlock_irq(ap->lock); return rc ? rc : snprintf(buf, 20, "%u\n", ncq_prio_enable); @@ -869,7 +863,7 @@ static ssize_t ata_ncq_prio_enable_store(struct device *device, struct ata_port *ap; struct ata_device *dev; long int input; - int rc; + int rc = 0; rc = kstrtol(buf, 10, &input); if (rc) @@ -883,27 +877,20 @@ static ssize_t ata_ncq_prio_enable_store(struct device *device, return -ENODEV; spin_lock_irq(ap->lock); + + if (!(dev->flags & ATA_DFLAG_NCQ_PRIO)) { + rc = -EINVAL; + goto unlock; + } + if (input) dev->flags |= ATA_DFLAG_NCQ_PRIO_ENABLE; else dev->flags &= ~ATA_DFLAG_NCQ_PRIO_ENABLE; - dev->link->eh_info.action |= ATA_EH_REVALIDATE; - dev->link->eh_info.flags |= ATA_EHI_QUIET; - ata_port_schedule_eh(ap); +unlock: spin_unlock_irq(ap->lock); - ata_port_wait_eh(ap); - - if (input) { - spin_lock_irq(ap->lock); - if (!(dev->flags & ATA_DFLAG_NCQ_PRIO)) { - dev->flags &= ~ATA_DFLAG_NCQ_PRIO_ENABLE; - rc = -EIO; - } - spin_unlock_irq(ap->lock); - } - return rc ? rc : len; } From patchwork Fri Aug 6 11:11:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 1514296 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=p5X4kxhY; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4Gh2qr4zhMz9sRR for ; Fri, 6 Aug 2021 21:12:08 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245365AbhHFLMU (ORCPT ); Fri, 6 Aug 2021 07:12:20 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:47134 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245327AbhHFLMO (ORCPT ); Fri, 6 Aug 2021 07:12:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1628248319; x=1659784319; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=AW+WeAAVoWBZ5Xzke7ckGr0pia2nd7Z3obDvplpfqaM=; b=p5X4kxhYuLOhLYLGjj8rtWctkAfQL9NLPmHMzUz3UdvjR9KxQUTp234S FmxHRpSCPbaV9oXYW5bdkaQFcn8a8Wv1aB+YcsoQweRJDAkxHJUAAIHLD VOXNxe0IQ64KHqFxxjKXlKfbbXtfn8MHrzsVjR6NDkUo+/rnW9gSnWVbr EO2syQBIVYaAaxGWydA4eWfQnHuGv+Q7QZZzRkHjkOj9gRxY1BLROcL85 9bYMKGRXoFFHA55EUbbZRgcGbJ4bGyaZ6J0s+GCA9zbK1Ekc/amB7u+j/ 9ZrkP8c7DK2spD5mGj5RWK/0XrBOp17PrecHC0nkBFAA/ffpd6FQGQ3dN A==; X-IronPort-AV: E=Sophos;i="5.84,300,1620662400"; d="scan'208";a="177055560" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 06 Aug 2021 19:11:59 +0800 IronPort-SDR: SE3Bu0f/Sbf+1Z192Ky+lUurC4K92qKHzAYluwxMN+rSU0vdNFRUp0+oJwEg6L6QmVrKQn2HGT Lv8XGHOcE+dGo+FaTwAQbq8ynhxnvCivrL0Ggtf/5kLYNgILXOS05kDoZEp2ewhmDZvDtDUW4e YBo6UF3T+QX0qMq4XggejO+AtdH7ZgEP5SdDklRq74HGaLh9WPhM9qKIuvEHunwatY1814cROy v8mXIBdJ/CaBQSBqSK91mdN7FRkMx88umuze0ENxXU4S22QGSEQAr0zpApSnHEVS24QPXE4jp+ j6NNSx3m80rLCXazyXH083cY Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Aug 2021 03:47:34 -0700 IronPort-SDR: 42pkL+znsmzjRO7FYmL90I20wu07z1dG0mXXS1Q2yAt/MlvUwXVA3qL9F6ihPZKOw1RPTnzBQG S9WnOcGH3sUYPDEkg35m4t28aCGr+Wzkf/ruYZdqSkO3VvhsfjyyRS6JC/7/KuMA9fKg3zcvdF 1Q83wePpMhe3YLcUpkggMSmHO1NyjMfboli9UxBHXARjAVWYOLlYOBq8AiQ9IeNnbTdk3YSof/ 6R8n3eTdggGwXQochBP2w25EYepch/m7/H9/RQp5a+cdvICIErbYERd+RJ41610yUZoDOfcLlP rbw= WDCIronportException: Internal Received: from washi.fujisawa.hgst.com ([10.149.53.254]) by uls-op-cesaip02.wdc.com with ESMTP; 06 Aug 2021 04:11:57 -0700 From: Damien Le Moal To: Jens Axboe , linux-block@vger.kernel.org, linux-ide@vger.kernel.org, "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Sathya Prakash , Sreekanth Reddy , Suganath Prabu Subramani Subject: [PATCH v3 6/9] libata: fix ata_read_log_page() warning Date: Fri, 6 Aug 2021 20:11:42 +0900 Message-Id: <20210806111145.445697-7-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210806111145.445697-1-damien.lemoal@wdc.com> References: <20210806111145.445697-1-damien.lemoal@wdc.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Support for the READ LOG PAGE DMA EXT command is indicated by words 119 and 120 of a device identify data. This is tested in ata_read_log_page() with ata_id_has_read_log_dma_ext() and the READ LOG PAGE DMA command used if the device reports supports for it. However, some devices lie about this support and using the DMA version of the command fails, generating the warning message "READ LOG DMA EXT failed, trying PIO". Since READ LOG PAGE DMA EXT is an optional command, this warning is not at all important but may be scary for the user. Change ata_read_log_page() to suppres this warning and to print an error message if both DMA and PIO attempts failed. With this change, there is no need to print again an error message when ata_read_log_page() returns an error. So simplify the users of this function. Signed-off-by: Damien Le Moal Reviewed-by: Hannes Reinecke --- drivers/ata/libata-core.c | 47 +++++++++++---------------------------- 1 file changed, 13 insertions(+), 34 deletions(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 3e574e29ee37..e0ab03f59a8f 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -2026,13 +2026,15 @@ unsigned int ata_read_log_page(struct ata_device *dev, u8 log, err_mask = ata_exec_internal(dev, &tf, NULL, DMA_FROM_DEVICE, buf, sectors * ATA_SECT_SIZE, 0); - if (err_mask && dma) { - dev->horkage |= ATA_HORKAGE_NO_DMA_LOG; - ata_dev_warn(dev, "READ LOG DMA EXT failed, trying PIO\n"); - goto retry; + if (err_mask) { + if (dma) { + dev->horkage |= ATA_HORKAGE_NO_DMA_LOG; + goto retry; + } + ata_dev_err(dev, "Read log page 0x%02x failed, Emask 0x%x\n", + (unsigned int)page, err_mask); } - DPRINTK("EXIT, err_mask=%x\n", err_mask); return err_mask; } @@ -2061,12 +2063,8 @@ static bool ata_identify_page_supported(struct ata_device *dev, u8 page) */ err = ata_read_log_page(dev, ATA_LOG_IDENTIFY_DEVICE, 0, ap->sector_buf, 1); - if (err) { - ata_dev_info(dev, - "failed to get Device Identify Log Emask 0x%x\n", - err); + if (err) return false; - } for (i = 0; i < ap->sector_buf[8]; i++) { if (ap->sector_buf[9 + i] == page) @@ -2130,11 +2128,7 @@ static void ata_dev_config_ncq_send_recv(struct ata_device *dev) } err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_SEND_RECV, 0, ap->sector_buf, 1); - if (err_mask) { - ata_dev_dbg(dev, - "failed to get NCQ Send/Recv Log Emask 0x%x\n", - err_mask); - } else { + if (!err_mask) { u8 *cmds = dev->ncq_send_recv_cmds; dev->flags |= ATA_DFLAG_NCQ_SEND_RECV; @@ -2160,11 +2154,7 @@ static void ata_dev_config_ncq_non_data(struct ata_device *dev) } err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_NON_DATA, 0, ap->sector_buf, 1); - if (err_mask) { - ata_dev_dbg(dev, - "failed to get NCQ Non-Data Log Emask 0x%x\n", - err_mask); - } else { + if (!err_mask) { u8 *cmds = dev->ncq_non_data_cmds; memcpy(cmds, ap->sector_buf, ATA_LOG_NCQ_NON_DATA_SIZE); @@ -2181,12 +2171,8 @@ static void ata_dev_config_ncq_prio(struct ata_device *dev) ATA_LOG_SATA_SETTINGS, ap->sector_buf, 1); - if (err_mask) { - ata_dev_dbg(dev, - "failed to get SATA settings log, Emask 0x%x\n", - err_mask); + if (err_mask) goto not_supported; - } if (!(ap->sector_buf[ATA_LOG_NCQ_PRIO_OFFSET] & BIT(3))) goto not_supported; @@ -2347,11 +2333,8 @@ static void ata_dev_config_trusted(struct ata_device *dev) err = ata_read_log_page(dev, ATA_LOG_IDENTIFY_DEVICE, ATA_LOG_SECURITY, ap->sector_buf, 1); - if (err) { - ata_dev_dbg(dev, - "failed to read Security Log, Emask 0x%x\n", err); + if (err) return; - } trusted_cap = get_unaligned_le64(&ap->sector_buf[40]); if (!(trusted_cap & (1ULL << 63))) { @@ -2440,12 +2423,8 @@ static void ata_dev_config_devslp(struct ata_device *dev) ATA_LOG_IDENTIFY_DEVICE, ATA_LOG_SATA_SETTINGS, sata_setting, 1); - if (err_mask) { - ata_dev_dbg(dev, - "failed to get SATA Settings Log, Emask 0x%x\n", - err_mask); + if (err_mask) return; - } dev->flags |= ATA_DFLAG_DEVSLP; for (i = 0; i < ATA_LOG_DEVSLP_SIZE; i++) { From patchwork Fri Aug 6 11:11:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 1514297 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=P2DoOAXV; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4Gh2qs0N54z9sWX for ; Fri, 6 Aug 2021 21:12:09 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245406AbhHFLMV (ORCPT ); Fri, 6 Aug 2021 07:12:21 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:47136 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245377AbhHFLMP (ORCPT ); Fri, 6 Aug 2021 07:12:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1628248321; x=1659784321; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=pk+lhm8JBHwvIjXHR2WChMXDt5SKOnHmtBL2xd0eUh0=; b=P2DoOAXVWQ3FsqsDODX66Ho8kxaR5GqheDYbSvWrGB19auv0JB/dAOGc Xd7T4yHft+/N9ENKXILb62PlJ6O8OT2h/tDEniQYeTyVc1tJ4irT9vsUe YpYCWK4mCn25i786Wp1QvQSER0EKs+DyqpnGb6tonuka4KPxhETyGyIVJ tlgqDKQEPLql0w89ZgIsj2GyXCdIcD4yTNu/VXSgVsejYjmt2sgI6PBn5 KHwMglYUSPRV1qSOGgAJZwu06VGQvvasgPXk6R72/U74dMa27+UZFr+Do vHwYAN2lOJZvNcWv+5W8oCRPctLoNAzhrOj4NnSc2zvTH8UR7kWLPpyHa Q==; X-IronPort-AV: E=Sophos;i="5.84,300,1620662400"; d="scan'208";a="177055562" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 06 Aug 2021 19:12:01 +0800 IronPort-SDR: aSvM1abw8ufBwtaElj6qhfJMxbjEJ3VkEtnkHvI8Bx8gD4TTw3jfjapd6V9CW8/LonMnPV3f/E ghJxbuyVa0WdHVMVT9Rsetm9O+/wNpeqrsV8lzuItaU7KdSGn1INDdmzZGse2iJMfC3a75emf2 wrYVD4GFlDFbzgP8PwgOKMO/MKRUSWokT+iS2K6BjhpfjXTGPsnCc4RcpTSxcEva2SD/bQHlo6 hKoW1ULIC9l6ov34UCCEDTg2f+OhnuUo2hDL906HkrCs6y0+vbcErwhRYL1+gSTl/isFRSHKK/ FCBGrsRASZIding396bVV0cM Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Aug 2021 03:47:36 -0700 IronPort-SDR: yhbEO0YFw9ohBBAnSkl3gZHdCyBirIv+Ci6aBCsN4SmFao1G5bIrrc3Jkg4ipRLihByQ/oVf8t 0F0GKFp8Y6Izqm9I705o5APrqCjzl8Y11jSSz7vU9lmCEkllfDWE+l5/tPHeS+nzXHfukaOqsu C9OqWkNPVglW0ez9vnq99YQi5LL8LafiK/kagLvrMb6FXl8S1pQ34sd9acB3z6cusowM7e2hUs VnRXaZVWLO5XdbeUHGKRfHIPpsNfpF/rTNBHtYsTFpgSI4gkpwzGWUW3ILWEvQKqM8YAIlM97q 3HY= WDCIronportException: Internal Received: from washi.fujisawa.hgst.com ([10.149.53.254]) by uls-op-cesaip02.wdc.com with ESMTP; 06 Aug 2021 04:11:59 -0700 From: Damien Le Moal To: Jens Axboe , linux-block@vger.kernel.org, linux-ide@vger.kernel.org, "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Sathya Prakash , Sreekanth Reddy , Suganath Prabu Subramani Subject: [PATCH v3 7/9] libata: print feature list on device scan Date: Fri, 6 Aug 2021 20:11:43 +0900 Message-Id: <20210806111145.445697-8-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210806111145.445697-1-damien.lemoal@wdc.com> References: <20210806111145.445697-1-damien.lemoal@wdc.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Print a list of features supported by a drive when it is configured in ata_dev_configure() using the new function ata_dev_print_features(). The features printed are not already advertized and are: trusted send-recev support, device attention support, device sleep support, NCQ send-recv support and NCQ priority support. Signed-off-by: Damien Le Moal Reviewed-by: Hannes Reinecke --- drivers/ata/libata-core.c | 17 +++++++++++++++++ include/linux/libata.h | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index e0ab03f59a8f..6d5d99ccbff3 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -2433,6 +2433,20 @@ static void ata_dev_config_devslp(struct ata_device *dev) } } +static void ata_dev_print_features(struct ata_device *dev) +{ + if (!(dev->flags & ATA_DFLAG_FEATURES_MASK)) + return; + + ata_dev_info(dev, + "Features:%s%s%s%s%s\n", + dev->flags & ATA_DFLAG_TRUSTED ? " Trust" : "", + dev->flags & ATA_DFLAG_DA ? " Dev-Attention" : "", + dev->flags & ATA_DFLAG_DEVSLP ? " Dev-Sleep" : "", + dev->flags & ATA_DFLAG_NCQ_SEND_RECV ? " NCQ-sndrcv" : "", + dev->flags & ATA_DFLAG_NCQ_PRIO ? " NCQ-prio" : ""); +} + /** * ata_dev_configure - Configure the specified ATA/ATAPI device * @dev: Target device to configure @@ -2595,6 +2609,9 @@ int ata_dev_configure(struct ata_device *dev) ata_dev_config_zac(dev); ata_dev_config_trusted(dev); dev->cdb_len = 32; + + if (ata_msg_drv(ap) && print_info) + ata_dev_print_features(dev); } /* ATAPI-specific feature tests */ diff --git a/include/linux/libata.h b/include/linux/libata.h index 3fcd24236793..b23f28cfc8e0 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -161,6 +161,10 @@ enum { ATA_DFLAG_D_SENSE = (1 << 29), /* Descriptor sense requested */ ATA_DFLAG_ZAC = (1 << 30), /* ZAC device */ + ATA_DFLAG_FEATURES_MASK = ATA_DFLAG_TRUSTED | ATA_DFLAG_DA | \ + ATA_DFLAG_DEVSLP | ATA_DFLAG_NCQ_SEND_RECV | \ + ATA_DFLAG_NCQ_PRIO, + ATA_DEV_UNKNOWN = 0, /* unknown device */ ATA_DEV_ATA = 1, /* ATA device */ ATA_DEV_ATA_UNSUP = 2, /* ATA device (unsupported) */ From patchwork Fri Aug 6 11:11:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 1514298 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=au1wQGUy; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4Gh2qw3MRvz9sWX for ; Fri, 6 Aug 2021 21:12:12 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245389AbhHFLM0 (ORCPT ); Fri, 6 Aug 2021 07:12:26 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:47134 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245395AbhHFLMT (ORCPT ); Fri, 6 Aug 2021 07:12:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1628248325; x=1659784325; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dxUqBpMfBGL8QgT/G4aYqB14OK8eppkoSmc37wpGAVA=; b=au1wQGUyU6en67ig4kqRa/K6m3sw85gvO4uMFiDIArQ8JPK8x/DWrLsf EMnPe4AOvT1w9Z9OWB0tMKcJ1KnE6TYul3DD3sRCwU6aivGVvy3omoCbm V2BSfxhdC8KSg4keeZBnH4QUzkI45agv3UBzlA/U7EWpsz0AEBKiVZboh xhQGtUazem/ivmzYHt0z+gIJHpyErnpmsCOnzh838/f/GQ+8ChRSwQDwJ U5/EreDA57o4oe7ke4uNdW7Wup7cNIIWIxPXBsM/rJRQg0svAQwhF9MOG hAUOOMnFP8DUUZtwCccmy4GTSndwvfu3BjlIdXEYYvpTJhWYwRonAUpLe g==; X-IronPort-AV: E=Sophos;i="5.84,300,1620662400"; d="scan'208";a="177055563" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 06 Aug 2021 19:12:02 +0800 IronPort-SDR: QXbh5YTgbL5QMQrp8Ng/Lj3DhTKqNg6fKxJVAZPiX9jYoRt3Uef4HJcaiJEncopB17BYaed9i4 Kwxd+1QTCnLcjFyxa7MCJe9bQXr+s8Drj8e+lk8mF3Y5gn5pc4Dcf9XxLidDJFxNsmvoZk9aEu FQ+MHnNv24IQwY1Js0XmDjrwB0mpv7o0nMvDx6+X2P1fq79JSQPhD6FfmhpW63FKOC1+1dIcOx rrc73Ink2wYTZliD9PjBBEsHfh/nQmde6WfZHOC8acsT+lKGUH4m9Cnkq4pj7IoYaWbKWbNk0I /D/iWYH420s16B/4RvXY1EZD Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Aug 2021 03:47:37 -0700 IronPort-SDR: AWMpyBiZhzbGjGjZydmfsg3id2MCFAeAir1gFuQfJ04kO5o2LIp0RifK713IbMHvhjKUR36SYy c8i/oBoV2pIBT8PMPwpfUu3E8Xuyu9Vq9mhxILbj6AmbRMQ7BK0SNuqA6V3qp7DKg1caiwOSBs 7iu04vTWXr2zaSahD6HnGhxGcUHt8T5CcHSW7u1bcWXqlR/EVd2ocXd8l/dsIl/Co3hxRO5Dhn 5F/8mjHw/Zk1GZym6liANH96pUeiqz6kWc+FFJcknax3985k5NlYt/sXcdRtKlcZ5WnalPviPn kj4= WDCIronportException: Internal Received: from washi.fujisawa.hgst.com ([10.149.53.254]) by uls-op-cesaip02.wdc.com with ESMTP; 06 Aug 2021 04:12:01 -0700 From: Damien Le Moal To: Jens Axboe , linux-block@vger.kernel.org, linux-ide@vger.kernel.org, "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Sathya Prakash , Sreekanth Reddy , Suganath Prabu Subramani Subject: [PATCH v3 8/9] libahci: Introduce ncq_prio_supported sysfs sttribute Date: Fri, 6 Aug 2021 20:11:44 +0900 Message-Id: <20210806111145.445697-9-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210806111145.445697-1-damien.lemoal@wdc.com> References: <20210806111145.445697-1-damien.lemoal@wdc.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Currently, the only way a user can determine if a SATA device supports NCQ priority is to try to enable the use of this feature using the ncq_prio_enable sysfs device attribute. If enabling the feature fails, it is because the device does not support NCQ priority. Otherwise, the feature is enabled and indicates that the device supports NCQ priority. Improve this odd interface by introducing the read-only ncq_prio_supported sysfs device attribute to indicate if a SATA device supports NCQ priority. The value of this attribute reflects if the device flag ATA_DFLAG_NCQ_PRIO is set or cleared. Signed-off-by: Damien Le Moal Reviewed-by: Hannes Reinecke --- drivers/ata/libahci.c | 1 + drivers/ata/libata-sata.c | 24 ++++++++++++++++++++++++ include/linux/libata.h | 1 + 3 files changed, 26 insertions(+) diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index fec2e9754aed..5b3fa2cbe722 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -125,6 +125,7 @@ EXPORT_SYMBOL_GPL(ahci_shost_attrs); struct device_attribute *ahci_sdev_attrs[] = { &dev_attr_sw_activity, &dev_attr_unload_heads, + &dev_attr_ncq_prio_supported, &dev_attr_ncq_prio_enable, NULL }; diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c index dc397ebda089..5566fd4bb38f 100644 --- a/drivers/ata/libata-sata.c +++ b/drivers/ata/libata-sata.c @@ -834,6 +834,30 @@ DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR, ata_scsi_lpm_show, ata_scsi_lpm_store); EXPORT_SYMBOL_GPL(dev_attr_link_power_management_policy); +static ssize_t ata_ncq_prio_supported_show(struct device *device, + struct device_attribute *attr, + char *buf) +{ + struct scsi_device *sdev = to_scsi_device(device); + struct ata_port *ap = ata_shost_to_port(sdev->host); + struct ata_device *dev; + bool ncq_prio_supported; + int rc = 0; + + spin_lock_irq(ap->lock); + dev = ata_scsi_find_dev(ap, sdev); + if (!dev) + rc = -ENODEV; + else + ncq_prio_supported = dev->flags & ATA_DFLAG_NCQ_PRIO; + spin_unlock_irq(ap->lock); + + return rc ? rc : sysfs_emit(buf, "%u\n", ncq_prio_supported); +} + +DEVICE_ATTR(ncq_prio_supported, S_IRUGO, ata_ncq_prio_supported_show, NULL); +EXPORT_SYMBOL_GPL(dev_attr_ncq_prio_supported); + static ssize_t ata_ncq_prio_enable_show(struct device *device, struct device_attribute *attr, char *buf) diff --git a/include/linux/libata.h b/include/linux/libata.h index b23f28cfc8e0..a2d1bae7900b 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -539,6 +539,7 @@ typedef void (*ata_postreset_fn_t)(struct ata_link *link, unsigned int *classes) extern struct device_attribute dev_attr_unload_heads; #ifdef CONFIG_SATA_HOST extern struct device_attribute dev_attr_link_power_management_policy; +extern struct device_attribute dev_attr_ncq_prio_supported; extern struct device_attribute dev_attr_ncq_prio_enable; extern struct device_attribute dev_attr_em_message_type; extern struct device_attribute dev_attr_em_message; From patchwork Fri Aug 6 11:11:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 1514299 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-ide-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=erlzAz2l; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4Gh2qx0V7gz9sWc for ; Fri, 6 Aug 2021 21:12:13 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245395AbhHFLM1 (ORCPT ); Fri, 6 Aug 2021 07:12:27 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:47118 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245396AbhHFLMT (ORCPT ); Fri, 6 Aug 2021 07:12:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1628248325; x=1659784325; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=v0axotK745BOmKq1hqhT1UMPhW1oSJVk5yL66WtuDMY=; b=erlzAz2lDZ3965euaEZQlacWHwpk7EFCO0zBgLyqFU6KfcVtvtHJsODG 6dPKGKzZo0EoQ4wQgMQBEumQy/Bj5aa1X4EEqJY9a36KrpsQdICwMISkT BWWh1JraLn0DG/DnZFDsJ4PBHylnaI8q+2W924LOauHfjnec1nHTauuCn 545xLLWjS07WsoYeO42FoqRiiCb0EoTIJM3ZahFYQhMsAZr1S+gWT2RHe /oQY7/6u0Xnt1H0OTLkVSitPF0GEc6QX86CaVvhoqId8qn6aEku8UpY3Q a3U47Kdt7vCqwcX6DW1NG0AyN1AmGVGQ7+tpRT/QP1Mc+Lhf5BmCheIhZ Q==; X-IronPort-AV: E=Sophos;i="5.84,300,1620662400"; d="scan'208";a="177055568" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 06 Aug 2021 19:12:04 +0800 IronPort-SDR: KTaKKAuxVbRs2y53ZPO6heWYS0R/XuqE6zt5GHiaKfN8HeJS4yZqplcSqAVPzIDB0RONQi7GlD dlGffleNl+ZeyUHXNjO6d7UU5dlW7dk8qU+jNXBy+odRcqobgElZyDxG+NN07RqhfoI4Bw3KxD 5VFQlKy4k/X1yfi4YJ+IJlrgsbrA+sJIuL5Wos3l6u6bryRrwXRaNJoufJklYe2J4MxH7zGPim x7nCNVY7ZtBTvFjBmOW3BQpu7tS//an/dhXmt2y9eY3D9RHWdDQmE1bTJrIEZCI/WKg6e3LLfp 3V3TAmBWduWXfGqKEwyVBJGx Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Aug 2021 03:47:39 -0700 IronPort-SDR: xUdRLdaF8Z1wH2PxSgxa8xDUk+opTC5ZVk52K0P3Rz17/ojCUYPqu86ToEih30t7uatRGKv1yH NV6d/IU9rVO7h1jMDziL+sbHVvNQl4ukolPRT97FNcaeVV7tIXO4cR9N7VCP3gem/W7QbL9Ngz G+kveD2HxQluQl8JxlsOQd2v4OqlLJR/waZQM5AfAXVlImZOJwbBbs89urbWnG9qWqyW6vEhvb 1FVcvCYRKX/ccmqsPtHjjGr9g56hItWVKnS2Z+pjNdeylu2HcyR5a36lvauwMzxE3rF3I2fj3q xA0= WDCIronportException: Internal Received: from washi.fujisawa.hgst.com ([10.149.53.254]) by uls-op-cesaip02.wdc.com with ESMTP; 06 Aug 2021 04:12:02 -0700 From: Damien Le Moal To: Jens Axboe , linux-block@vger.kernel.org, linux-ide@vger.kernel.org, "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Sathya Prakash , Sreekanth Reddy , Suganath Prabu Subramani Subject: [PATCH v3 9/9] scsi: mpt3sas: Introduce sas_ncq_prio_supported sysfs sttribute Date: Fri, 6 Aug 2021 20:11:45 +0900 Message-Id: <20210806111145.445697-10-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210806111145.445697-1-damien.lemoal@wdc.com> References: <20210806111145.445697-1-damien.lemoal@wdc.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org Similarly to AHCI, introduce the device sysfs attribute sas_ncq_prio_supported to advertize if a SATA device supports the NCQ priority feature. Without this new attribute, the user can only discover if a SATA device supports NCQ priority by trying to enable the feature use with the sas_ncq_prio_enable sysfs device attribute, which fails when the device does not support high priroity commands. Signed-off-by: Damien Le Moal Reviewed-by: Hannes Reinecke --- drivers/scsi/mpt3sas/mpt3sas_ctl.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c index b66140e4c370..f83d4d32d459 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c +++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c @@ -3918,6 +3918,24 @@ sas_device_handle_show(struct device *dev, struct device_attribute *attr, } static DEVICE_ATTR_RO(sas_device_handle); +/** + * sas_ncq_prio_supported_show - Indicate if device supports NCQ priority + * @dev: pointer to embedded device + * @attr: sas_ncq_prio_supported attribute descriptor + * @buf: the buffer returned + * + * A sysfs 'read-only' sdev attribute, only works with SATA + */ +static ssize_t +sas_ncq_prio_supported_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct scsi_device *sdev = to_scsi_device(dev); + + return sysfs_emit(buf, "%d\n", scsih_ncq_prio_supp(sdev)); +} +static DEVICE_ATTR_RO(sas_ncq_prio_supported); + /** * sas_ncq_prio_enable_show - send prioritized io commands to device * @dev: pointer to embedded device @@ -3960,6 +3978,7 @@ static DEVICE_ATTR_RW(sas_ncq_prio_enable); struct device_attribute *mpt3sas_dev_attrs[] = { &dev_attr_sas_address, &dev_attr_sas_device_handle, + &dev_attr_sas_ncq_prio_supported, &dev_attr_sas_ncq_prio_enable, NULL, };