From patchwork Mon Jan 6 12:10:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiju Jose X-Patchwork-Id: 13927263 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5DCF9E77198 for ; Mon, 6 Jan 2025 12:12:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 02A956B00BA; Mon, 6 Jan 2025 07:12:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EF4E56B00BB; Mon, 6 Jan 2025 07:12:05 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D93F46B00BC; Mon, 6 Jan 2025 07:12:05 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id B85626B00BA for ; Mon, 6 Jan 2025 07:12:05 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 78B19140534 for ; Mon, 6 Jan 2025 12:12:05 +0000 (UTC) X-FDA: 82976913810.28.93AC4C5 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by imf08.hostedemail.com (Postfix) with ESMTP id 82E2C16001D for ; Mon, 6 Jan 2025 12:12:03 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf08.hostedemail.com: domain of shiju.jose@huawei.com designates 185.176.79.56 as permitted sender) smtp.mailfrom=shiju.jose@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1736165523; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fwBafEkYD9cAJUNNXDdSjDAxFSgxUinzIBBpZ+VUyWg=; b=V8Z+WCvFmLAlzYU3vu8uIMHBcGe3BoqPDz7hR8nVSnRECr23/wVVsNldU+2VHieJY/NWQC v5G+0q+pVPTJrigDX+LwQHhY9VvGYHULT7SfnSphigpl4Lnana9ASDmbQlj0sBCn05JElb Q2kPcwvh//1pv8n3SS10HFC3JdcfLJc= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf08.hostedemail.com: domain of shiju.jose@huawei.com designates 185.176.79.56 as permitted sender) smtp.mailfrom=shiju.jose@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1736165523; a=rsa-sha256; cv=none; b=cWD1UhquOAgqTqFXefHyJOyUWnDt7MGTjHvfuLhUDAHa99/vLZVAw2hUxzWBxP//FZdCRj a5+WkMNIPJ8L9/UwvPgalvmt0UjxCNKqteOAyvydjIVK12FzXGOip8PVl13Z55nFqhgPEF C5tOnOQvuBG7dYYHHyo1RtkHRsig26I= Received: from mail.maildlp.com (unknown [172.18.186.216]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4YRY0k0gFwz6LD8T; Mon, 6 Jan 2025 20:10:30 +0800 (CST) Received: from frapeml500007.china.huawei.com (unknown [7.182.85.172]) by mail.maildlp.com (Postfix) with ESMTPS id D897C1408F9; Mon, 6 Jan 2025 20:12:01 +0800 (CST) Received: from P_UKIT01-A7bmah.china.huawei.com (10.126.170.95) by frapeml500007.china.huawei.com (7.182.85.172) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 6 Jan 2025 13:11:59 +0100 From: To: , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v18 14/19] cxl: Setup exclusive CXL features that are reserved for the kernel Date: Mon, 6 Jan 2025 12:10:10 +0000 Message-ID: <20250106121017.1620-15-shiju.jose@huawei.com> X-Mailer: git-send-email 2.43.0.windows.1 In-Reply-To: <20250106121017.1620-1-shiju.jose@huawei.com> References: <20250106121017.1620-1-shiju.jose@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.126.170.95] X-ClientProxiedBy: lhrpeml100011.china.huawei.com (7.191.174.247) To frapeml500007.china.huawei.com (7.182.85.172) X-Rspamd-Queue-Id: 82E2C16001D X-Rspamd-Server: rspam12 X-Stat-Signature: 5j9he8665kzs5hknujyw9o54eaoqqdmi X-Rspam-User: X-HE-Tag: 1736165523-413958 X-HE-Meta: U2FsdGVkX18RxZpxM/wnB5rwL8dxSIzckW2ikILqm8lwObTOWe8H1UI15mkDGX/bCkgLrICYBECr5BDWHrZMuFQdj0zhSnVzFBVFU5NvT39bIHL5tP8/a4TdvPU+L3nu/Vpr2jA+1rB05B7P37viuvSJBik1TVxjiGicxeZFGxzyeS+7jJhDkC24VHIzJig+krXajV92F/eV9nDNnM2Y/SBhm0xvaklCE4UvOZCkpWa/oDLZ8Do8ClhIjn0XTKGHDSwYlxxUHO4/3iPkSyFhfoYJKfDzYxT7dQLCIyya2pc/g9ewYDR8HPFW/7ThRd/7nUvEUgB45uQPEfreRAtHJp2l1RKQtKroJ6y3BxTgKtcAXoFuso9ZvhS4KgtqA2qcwWCKtw7oAlSCwww29QoL2y02kUFIJ4f6doLbtoe1G6iiMPDY+ZSvik2++u3jI9xpOR6ZwqYZHV1WGolunjOWjKyRIgmHq07LXpvOd58JPtUQ+h8FAWprTJ06ns5mRpfpEU9H26+DT+0APJKaPBKlWCcQmukG7KNq14VdGMVmp7YxuDz1kgnWexbmAQDfVrW15Ld7m7VQrG89ULontu9VK2pLjRuURN1VUZRkPilSUsXYxX4tcAFdZP7pMsD6rQt2NqS/YG01hXre1HEiLRZBlyiUEW/fVddpfW6pGVkiPkpEJ3VxepLgkKIfOl13gafcTliJ7UbiJwqxjH/MvvJ5Yeta9veYVpkCntV/Zz7Hx4FWmPMLYp0jtrO0eKIeFBFY3kmS7/ovOsZgop15LzHkn/iSJkgObPn0ZYGNge6Ez6i3LBXIc9ovUhn12Gr7a5DY2d9PMNAkK/CI+9jJ3Ns20Hulf9eP71wbXv1pNcQBcuoDbtkklCzH4YWUaoDFezY18BQT8fM95KTAX7utCA2J2cQn8WsgN2MUXmpVvn0+fuPWD32yXI6nGtwSYdTOZgVYYqRBuvhQPrQAzwDsSO/ pY/wFU17 t958GqZUc3ObhJHgplrNE1beO4Ya4uddOa3JPE5h9teS55lMjnDDNEtNtwgrj912NlBQJucEKLQkW2pp4i8UlMV2LKFj8RdEuIPeW1PkycUgNAeaMOIxvvt9de32ZmifyGznl67dtKCBXBKTe/72CkBiX9NIYZl6EOJk8eUevTNR6VpGVldvQ5GqrnvgpDPmLPJ4COPUMnJNyEVNeGFxYO7qxR6dhOVrE4L+rpxhIfAIIkSepx/5mEF8wmg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Dave Jiang Certain features will be exclusively used by components such as in kernel RAS driver. Setup an exclusion list that can be later filtered out before exposing to user space. Signed-off-by: Dave Jiang --- drivers/cxl/core/features.c | 22 ++++++++++++++++++++++ drivers/cxl/features.c | 6 +++++- include/cxl/features.h | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/drivers/cxl/core/features.c b/drivers/cxl/core/features.c index 932e82b52f90..c836b3a64561 100644 --- a/drivers/cxl/core/features.c +++ b/drivers/cxl/core/features.c @@ -6,6 +6,17 @@ #include "core.h" #include "cxlmem.h" +static const uuid_t cxl_exclusive_feats[] = { + CXL_FEAT_PATROL_SCRUB_UUID, + CXL_FEAT_ECS_UUID, + CXL_FEAT_SPPR_UUID, + CXL_FEAT_HPPR_UUID, + CXL_FEAT_CACHELINE_SPARING_UUID, + CXL_FEAT_ROW_SPARING_UUID, + CXL_FEAT_BANK_SPARING_UUID, + CXL_FEAT_RANK_SPARING_UUID, +}; + #define CXL_FEATURE_MAX_DEVS 65536 static DEFINE_IDA(cxl_features_ida); @@ -263,3 +274,14 @@ int cxl_set_feature(struct cxl_features *features, } while (true); } EXPORT_SYMBOL_NS_GPL(cxl_set_feature, "CXL"); + +bool is_cxl_feature_exclusive(struct cxl_feat_entry *entry) +{ + for (int i = 0; i < ARRAY_SIZE(cxl_exclusive_feats); i++) { + if (uuid_equal(&entry->uuid, &cxl_exclusive_feats[i])) + return true; + } + + return false; +} +EXPORT_SYMBOL_NS_GPL(is_cxl_feature_exclusive, "CXL"); diff --git a/drivers/cxl/features.c b/drivers/cxl/features.c index 2faa9e03a840..3388bce5943a 100644 --- a/drivers/cxl/features.c +++ b/drivers/cxl/features.c @@ -47,6 +47,7 @@ static int cxl_get_supported_features(struct cxl_features_state *cfs) struct cxl_mbox_get_sup_feats_in mbox_in; struct cxl_feat_entry *entry; struct cxl_mbox_cmd mbox_cmd; + int user_feats = 0; int count; /* Get supported features is optional, need to check */ @@ -127,6 +128,8 @@ static int cxl_get_supported_features(struct cxl_features_state *cfs) return -ENXIO; memcpy(entry, mbox_out->ents, retrieved); + if (!is_cxl_feature_exclusive(entry)) + user_feats++; entry++; /* * If the number of output entries is less than expected, add the @@ -138,6 +141,7 @@ static int cxl_get_supported_features(struct cxl_features_state *cfs) cfs->num_features = count; cfs->entries = no_free_ptr(entries); + cfs->num_user_features = user_feats; return devm_add_action_or_reset(&cfs->features->dev, cxl_free_feature_entries, cfs->entries); } @@ -177,7 +181,7 @@ static ssize_t features_show(struct device *dev, struct device_attribute *attr, if (!cfs) return -ENOENT; - return sysfs_emit(buf, "%d\n", cfs->num_features); + return sysfs_emit(buf, "%d\n", cfs->num_user_features); } static DEVICE_ATTR_RO(features); diff --git a/include/cxl/features.h b/include/cxl/features.h index 41d3602b186c..adff3496b4be 100644 --- a/include/cxl/features.h +++ b/include/cxl/features.h @@ -5,6 +5,38 @@ #include +#define CXL_FEAT_PATROL_SCRUB_UUID \ + UUID_INIT(0x96dad7d6, 0xfde8, 0x482b, 0xa7, 0x33, 0x75, 0x77, 0x4e, \ + 0x06, 0xdb, 0x8a) + +#define CXL_FEAT_ECS_UUID \ + UUID_INIT(0xe5b13f22, 0x2328, 0x4a14, 0xb8, 0xba, 0xb9, 0x69, 0x1e, \ + 0x89, 0x33, 0x86) + +#define CXL_FEAT_SPPR_UUID \ + UUID_INIT(0x892ba475, 0xfad8, 0x474e, 0x9d, 0x3e, 0x69, 0x2c, 0x91, \ + 0x75, 0x68, 0xbb) + +#define CXL_FEAT_HPPR_UUID \ + UUID_INIT(0x80ea4521, 0x786f, 0x4127, 0xaf, 0xb1, 0xec, 0x74, 0x59, \ + 0xfb, 0x0e, 0x24) + +#define CXL_FEAT_CACHELINE_SPARING_UUID \ + UUID_INIT(0x96C33386, 0x91dd, 0x44c7, 0x9e, 0xcb, 0xfd, 0xaf, 0x65, \ + 0x03, 0xba, 0xc4) + +#define CXL_FEAT_ROW_SPARING_UUID \ + UUID_INIT(0x450ebf67, 0xb135, 0x4f97, 0xa4, 0x98, 0xc2, 0xd5, 0x7f, \ + 0x27, 0x9b, 0xed) + +#define CXL_FEAT_BANK_SPARING_UUID \ + UUID_INIT(0x78b79636, 0x90ac, 0x4b64, 0xa4, 0xef, 0xfa, 0xac, 0x5d, \ + 0x18, 0xa8, 0x63) + +#define CXL_FEAT_RANK_SPARING_UUID \ + UUID_INIT(0x34dbaff5, 0x0552, 0x4281, 0x8f, 0x76, 0xda, 0x0b, 0x5e, \ + 0x7a, 0x76, 0xa7) + struct cxl_mailbox; enum feature_cmds { @@ -50,6 +82,7 @@ struct cxl_mbox_get_sup_feats_out { struct cxl_features_state { struct cxl_features *features; int num_features; + int num_user_features; struct cxl_feat_entry *entries; }; @@ -117,5 +150,6 @@ size_t cxl_get_feature(struct cxl_features *features, const uuid_t feat_uuid, int cxl_set_feature(struct cxl_features *features, const uuid_t feat_uuid, u8 feat_version, void *feat_data, size_t feat_data_size, u32 feat_flag, u16 offset, u16 *return_code); +bool is_cxl_feature_exclusive(struct cxl_feat_entry *entry); #endif