Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1636962ybt; Mon, 15 Jun 2020 05:47:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzkBGTdhUsT1WDJ/x0eAys4VJTI7ojZB0TlDQZmeBqstUh9WE7kTrNHoKvr4MCBh1bsY3Zi X-Received: by 2002:a17:906:2c1a:: with SMTP id e26mr12673075ejh.514.1592225235075; Mon, 15 Jun 2020 05:47:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592225235; cv=none; d=google.com; s=arc-20160816; b=lOZQkpxFG4OIWe99gJ+QCGzdQomevESi1kcQevzUj5vG9ByWcl72EW1Q/VBnj0aOAb /zlztT54l+HSZfiWMuvFYwEbYOPfoOXQhvbGRhNy/ALkK2RXDFQYHkD0jEohQEKjxPJG 1FRd5IKjY0uv9cFhL4r+nM/HGxztMbiItrlvb8m6+xK12fKE9XNyoJKjNUVJodnfRNPs pWHOb1GAXlyFdt+tFaTGF4mkH0o8yyQDyOD6dU3o8dWyYo2Jq6d5bk1IqLPYzOj2Idiv n1kDBGwRuqFtbmTwXQIV8UumZb0jwLdOXuofY0ikgjQAgNSWq12uoOjjoqZnNqtLWdf8 renQ== 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:subject:cc:to:from; bh=PIyvcdpk5g4BjajWLnmlWlPJsGzqcnjRP61RBmkuqSs=; b=NhfKqEmeZK99hTImDT82pmmS8D0pueJaic47aa+hdFg9jJPu+fElvCTxX8I98BF+Wz hH0lpyZkwBT6/Dq+S1j0DLPcwgE5lc7yyQLBaSgh9Tsi6OpV+RdWTUXXwhccFztqJtPn jpLgZUrwfxcYyi5qnDEBOB53hrENPJhRkhvCZWZiqEefLaLtwXdz5BYPMIpuUWc8PbKM EpbEcmirbTxqgHe/Wb/WoknyeqVP35vs+OzCiiVwM1KlkJalS28HkguqN7I5L8ZgmPjr gTrBozS1iSb3kTYWqspZngbBQz7uR3H78EfcMx89MAY6ntNYuU7B+VXg5kRH2vqVJ2tb UJ9w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y2si9021968edp.396.2020.06.15.05.46.53; Mon, 15 Jun 2020 05:47:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729975AbgFOMpE (ORCPT + 99 others); Mon, 15 Jun 2020 08:45:04 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:53268 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729666AbgFOMpD (ORCPT ); Mon, 15 Jun 2020 08:45:03 -0400 Received: from pps.filterd (m0098420.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 05FCHXpC030709; Mon, 15 Jun 2020 08:44:26 -0400 Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com with ESMTP id 31p8v5rr8e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 Jun 2020 08:44:26 -0400 Received: from m0098420.ppops.net (m0098420.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 05FCXJFP075107; Mon, 15 Jun 2020 08:44:25 -0400 Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0b-001b2d01.pphosted.com with ESMTP id 31p8v5rr7n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 Jun 2020 08:44:25 -0400 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 05FCfbbw015382; Mon, 15 Jun 2020 12:44:24 GMT Received: from b06avi18626390.portsmouth.uk.ibm.com (b06avi18626390.portsmouth.uk.ibm.com [9.149.26.192]) by ppma04ams.nl.ibm.com with ESMTP id 31mpe7uk1r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 Jun 2020 12:44:23 +0000 Received: from d06av24.portsmouth.uk.ibm.com (d06av24.portsmouth.uk.ibm.com [9.149.105.60]) by b06avi18626390.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 05FCh4Gh66060756 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 15 Jun 2020 12:43:04 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 19B3C42041; Mon, 15 Jun 2020 12:44:21 +0000 (GMT) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CF0A342045; Mon, 15 Jun 2020 12:44:17 +0000 (GMT) Received: from vajain21-in-ibm-com (unknown [9.85.96.47]) by d06av24.portsmouth.uk.ibm.com (Postfix) with SMTP; Mon, 15 Jun 2020 12:44:17 +0000 (GMT) Received: by vajain21-in-ibm-com (sSMTP sendmail emulation); Mon, 15 Jun 2020 18:14:16 +0530 From: Vaibhav Jain To: linuxppc-dev@lists.ozlabs.org, linux-nvdimm@lists.01.org, linux-kernel@vger.kernel.org Cc: Vaibhav Jain , Dan Williams , "Aneesh Kumar K . V" , Michael Ellerman , "Oliver O'Halloran" , Santosh Sivaraj , Steven Rostedt , Ira Weiny Subject: [PATCH v13 0/6] powerpc/papr_scm: Add support for reporting nvdimm health Date: Mon, 15 Jun 2020 18:14:01 +0530 Message-Id: <20200615124407.32596-1-vaibhav@linux.ibm.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.216,18.0.687 definitions=2020-06-15_02:2020-06-15,2020-06-15 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 cotscore=-2147483648 priorityscore=1501 impostorscore=0 bulkscore=0 phishscore=0 adultscore=0 clxscore=1015 mlxlogscore=999 spamscore=0 mlxscore=0 malwarescore=0 suspectscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2006150098 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Changes since v12 [1]: * Fixed the clang warning regarding variable length object' being not at the end of the 'struct nd_pdsm_cmd_pkg' by introducing a new layout. * Removed instance of 'struct nd_cmd_pkg hdr' from 'struct nd_pdsm_cmd_pkg' and renamed the struct to 'struct nd_pkg_pdsm' to match the libndctl naming convention. * Introduced 'union nd_pdsm_payload' thats a maximal union of all possible payload structs and use it instead of having flexible 'payload' member 'struct nd_pdsm_cmd_pkg'. * Introduce pdsm descriptor 'struct pdsm_cmd_desc' and its array __pdsm_cmd_descriptors[] that holds a payload 'size_[in|out]' and service function for each pdsm. This is analogues to '__nd_cmd_dimm_descs[]' * Introduce function 'pdsm_cmd_desc()' to fetch the corresponding pdsm descriptor for each valid pdsm. * Updated papr_scm_service_pdsm() to use 'pdsm_cmd_desc()' and apply checks on 'nd_cmd_pkg' payload based on psdm descriptor members and finally service the pdsm using the 'service' member of the descriptor. * Updated Patch-5 that to use the updated 'struct nd_pkg_pdsm' definition. [1] https://lore.kernel.org/linux-nvdimm/20200608211026.67573-1-vaibhav@linux.ibm.com --- The PAPR standard[2][4] provides mechanisms to query the health and performance stats of an NVDIMM via various hcalls as described in Ref[3]. Until now these stats were never available nor exposed to the user-space tools like 'ndctl'. This is partly due to PAPR platform not having support for ACPI and NFIT. Hence 'ndctl' is unable to query and report the dimm health status and a user had no way to determine the current health status of a NDVIMM. To overcome this limitation, this patch-set updates papr_scm kernel module to query and fetch NVDIMM health stats using hcalls described in Ref[3]. This health and performance stats are then exposed to userspace via sysfs and PAPR-NVDIMM-Specific-Methods(PDSM) issued by libndctl. These changes coupled with proposed ndtcl changes located at Ref[5] should provide a way for the user to retrieve NVDIMM health status using ndtcl. Below is a sample output using proposed kernel + ndctl for PAPR NVDIMM in a emulation environment: # ndctl list -DH [ { "dev":"nmem0", "health":{ "health_state":"fatal", "shutdown_state":"dirty" } } ] Dimm health report output on a pseries guest lpar with vPMEM or HMS based NVDIMMs that are in perfectly healthy conditions: # ndctl list -d nmem0 -H [ { "dev":"nmem0", "health":{ "health_state":"ok", "shutdown_state":"clean" } } ] PAPR NVDIMM-Specific-Methods(PDSM) ================================== PDSM requests are issued by vendor specific code in libndctl to execute certain operations or fetch information from NVDIMMS. PDSMs requests can be sent to papr_scm module via libndctl(userspace) and libnvdimm (kernel) using the ND_CMD_CALL ioctl command which can be handled in the dimm control function papr_scm_ndctl(). Current patchset proposes a single PDSM to retrieve NVDIMM health, defined in the newly introduced uapi header named 'papr_pdsm.h'. Support for more PDSMs will be added in future. Structure of the patch-set ========================== The patch-set starts with a doc patch documenting details of hcall H_SCM_HEALTH. Second patch exports kernel symbol seq_buf_printf() thats used in subsequent patches to generate sysfs attribute content. Third patch implements support for fetching NVDIMM health information from PHYP and partially exposing it to user-space via a NVDIMM sysfs flag. Fourth patch updates papr_scm_ndctl() to handle a possible error case and also improve debug logging. Fifth patch deals with implementing support for servicing PDSM commands in papr_scm module. Finally the last patch implements support for servicing PDSM 'PAPR_PDSM_HEALTH' that returns the NVDIMM health information to libndctl. References: [2] "Power Architecture Platform Reference" https://en.wikipedia.org/wiki/Power_Architecture_Platform_Reference [3] commit 58b278f568f0 ("powerpc: Provide initial documentation for PAPR hcalls") [4] "Linux on Power Architecture Platform Reference" https://members.openpowerfoundation.org/document/dl/469 [5] https://github.com/vaibhav92/ndctl/tree/papr_scm_health_v13 --- Vaibhav Jain (6): powerpc: Document details on H_SCM_HEALTH hcall seq_buf: Export seq_buf_printf powerpc/papr_scm: Fetch nvdimm health information from PHYP powerpc/papr_scm: Improve error logging and handling papr_scm_ndctl() ndctl/papr_scm,uapi: Add support for PAPR nvdimm specific methods powerpc/papr_scm: Implement support for PAPR_PDSM_HEALTH Documentation/ABI/testing/sysfs-bus-papr-pmem | 27 ++ Documentation/powerpc/papr_hcalls.rst | 46 +- arch/powerpc/include/uapi/asm/papr_pdsm.h | 132 ++++++ arch/powerpc/platforms/pseries/papr_scm.c | 420 +++++++++++++++++- include/uapi/linux/ndctl.h | 1 + lib/seq_buf.c | 1 + 6 files changed, 616 insertions(+), 11 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-bus-papr-pmem create mode 100644 arch/powerpc/include/uapi/asm/papr_pdsm.h -- 2.26.2