From patchwork Thu Dec 15 21:17:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alison Schofield X-Patchwork-Id: 33818 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp607437wrn; Thu, 15 Dec 2022 13:19:18 -0800 (PST) X-Google-Smtp-Source: AA0mqf6svNz+3VPZ5fZDpqvXKb1Fj2Pi6/e/nVt35i0uBPA2UV4dDEOurYIgkW4faEtnFHDjcXX2 X-Received: by 2002:a17:902:8349:b0:189:bc50:b93b with SMTP id z9-20020a170902834900b00189bc50b93bmr28225389pln.3.1671139157707; Thu, 15 Dec 2022 13:19:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671139157; cv=none; d=google.com; s=arc-20160816; b=a8iT6mdNwL0uofwf9mjkbkz4CFjixayAGLI4vyrdycxShQKhvUReONciyt4Wuit8vk Pmt9+PdNYY8y1e+g1gkG91AdYFNY3FfDMXxw0Ag62Fgq4GvaYhQEY4oA+1GL6j11MUYZ qCfdDqR9x6d28QLsG60k8v6rL4RbzQPTkTcsXqFamGWFV5DuymunrlLVFJOOIk6U+MiI EIgKukzRw/fyciAJlpq/ktTbInO7bjjm6jflHAfwxgNG6gOjtS8/wGzndIfP/iLeZV+B KsKGmyoDvyzMPbfiD9wsE3Km73Zh7LXAdKmISxCwyBNmYb7yyXIXlySdvE8iX7Lu+7Ev NwRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=hj5cPCSmecKMrdWVThfz89SifymHuklmy10bHaeg49Y=; b=V83jPcDauqCLyHQYAMgfTDc4JZRsnNORQsHCqnium59NLk8qog6eMXfb1CMhgjxr39 k0VJNmON5Rdm/U/gN2PD+5Pc+dAdrLM/37EAtOB6xdye+qIqXlGj0hLBGbw1HBVTJEML ne2tdAW8TaOB4EW4BaFj7TNUqtWPWo2j25Df+VPIE1RuG+Ng3Rc89xGDE1dsv7+VmWKE ch5s8n4Kmr1bKv2aVxMth8T//JwTEnyqbhneD0D+n5wymqBTiXmrHLeKky9ZG2UqN/0Y 9rCKhj2nnFuRnx+ViViJZal03uuzAuHDQMIG0oOzhLJR0M+KNhfff6ryjVYVsARC5iX+ 5hcA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=JAUZ7DCz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e20-20020a170902f11400b001869fd74e0csi287754plb.311.2022.12.15.13.19.04; Thu, 15 Dec 2022 13:19:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=JAUZ7DCz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230051AbiLOVSP (ORCPT + 99 others); Thu, 15 Dec 2022 16:18:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55802 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229822AbiLOVSD (ORCPT ); Thu, 15 Dec 2022 16:18:03 -0500 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8325259142; Thu, 15 Dec 2022 13:18:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1671139082; x=1702675082; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=aRw8JrUibr2BZHp3e7ft45UdfvnTap5W0KSsdC4zYxU=; b=JAUZ7DCzF3bxV53TocT9ZlGnMyLX0en/O2G5eHnAZl17QEsFpH98FxCn jDTsiuEAymdICB6WhdYragYEffE7tSBdVtwLPUwW+a6R8w4z5d1uKU9+U ghp/IBEE/YZY8FNlritXaxyL+ABM7mhQmN2AW9lzN3tDPmzrdx+Vv/peU SsvYsHLqWQd290qRqPb5xsuszL/FegNMS0LpKOTY3If1MltjcrUNxYd1W +WarGG/aIekXe8cG5eLL9LQA3B//v8+xyeZ5mQjmqzXlV7sWFbmjb0EiD A/oTOpyubPF4w4AG3QxaANVgp39t9y1xCfoLLzP1rQEXqtsMvZoY363KF w==; X-IronPort-AV: E=McAfee;i="6500,9779,10562"; a="302230307" X-IronPort-AV: E=Sophos;i="5.96,248,1665471600"; d="scan'208";a="302230307" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Dec 2022 13:17:53 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10562"; a="649570086" X-IronPort-AV: E=Sophos;i="5.96,248,1665471600"; d="scan'208";a="649570086" Received: from aschofie-mobl2.amr.corp.intel.com (HELO localhost) ([10.209.55.178]) by orsmga002-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Dec 2022 13:17:52 -0800 From: alison.schofield@intel.com To: Dan Williams , Ira Weiny , Vishal Verma , Dave Jiang , Ben Widawsky , Steven Rostedt Cc: Alison Schofield , linux-cxl@vger.kernel.org, linux-kernel@vger.kernel.org, Jonathan Cameron Subject: [PATCH v4 4/5] cxl/region: Add trigger_poison_list sysfs attribute Date: Thu, 15 Dec 2022 13:17:46 -0800 Message-Id: <35395936fc9b8fdcb1d75bf13c770dab3b2f94a9.1671135967.git.alison.schofield@intel.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752316413520301878?= X-GMAIL-MSGID: =?utf-8?q?1752316413520301878?= From: Alison Schofield When a boolean 'true' is written to this attribute the region driver retrieves the poison list for the capacity each device contributes to this region. The list consists of addresses that are poisoned, or would result in poison if accessed, and the source of the poison. The retrieved errors are logged as kernel trace events with the label 'cxl_poison'. Devices not supporting the poison list capability are ignored. Reviewed-by: Jonathan Cameron Signed-off-by: Alison Schofield --- Documentation/ABI/testing/sysfs-bus-cxl | 14 +++++++++++ drivers/cxl/core/region.c | 33 +++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-bus-cxl b/Documentation/ABI/testing/sysfs-bus-cxl index df40ed09ea67..b715a4609718 100644 --- a/Documentation/ABI/testing/sysfs-bus-cxl +++ b/Documentation/ABI/testing/sysfs-bus-cxl @@ -402,3 +402,17 @@ Description: attribute is only visible for devices supporting the capability. The retrieved errors are logged as kernel trace events with the label 'cxl_poison'. + + +What: /sys/bus/cxl/devices/regionZ/trigger_poison_list +Date: November, 2022 +KernelVersion: v6.2 +Contact: linux-cxl@vger.kernel.org +Description: + (WO) When a boolean 'true' is written to this attribute the + region driver retrieves the poison list for the capacity + each device contributes to this region. The list consists + of addresses that are poisoned, or would result in poison + if accessed, and the source of the poison. The retrieved + errors are logged as kernel trace events with the label + 'cxl_poison'. diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index 02f28da519e3..62ba9aa6bbf8 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -72,6 +72,38 @@ static int is_dup(struct device *match, void *data) return 0; } +static ssize_t trigger_poison_list_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + struct cxl_region *cxlr = to_cxl_region(dev); + struct cxl_region_params *p = &cxlr->params; + struct cxl_endpoint_decoder *cxled; + struct cxl_memdev *cxlmd; + u64 offset, length; + int rc, i; + bool tmp; + + if (kstrtobool(buf, &tmp)) + return -EINVAL; + + for (i = 0; i < p->nr_targets; i++) { + cxled = p->targets[i]; + cxlmd = cxled_to_memdev(cxled); + if (!test_bit(CXL_MEM_COMMAND_ID_GET_POISON, + cxlmd->cxlds->enabled_cmds)) + continue; + + offset = cxl_dpa_resource_start(cxled); + length = cxl_dpa_size(cxled); + rc = cxl_mem_get_poison(cxlmd, offset, length, cxlr); + if (rc) + return rc; + } + return len; +} +static DEVICE_ATTR_WO(trigger_poison_list); + static ssize_t uuid_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { @@ -570,6 +602,7 @@ static struct attribute *cxl_region_attrs[] = { &dev_attr_interleave_granularity.attr, &dev_attr_resource.attr, &dev_attr_size.attr, + &dev_attr_trigger_poison_list.attr, NULL, };