From mboxrd@z Thu Jan 1 00:00:00 1970 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 A5BF5C52D6F for ; Wed, 21 Aug 2024 13:57:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 06C136B0101; Wed, 21 Aug 2024 09:57:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F0FC66B0106; Wed, 21 Aug 2024 09:57:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D61746B0119; Wed, 21 Aug 2024 09:57:13 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id B26206B0101 for ; Wed, 21 Aug 2024 09:57:13 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 570C1C08AA for ; Wed, 21 Aug 2024 13:57:13 +0000 (UTC) X-FDA: 82476404346.15.3B834E3 Received: from esa3.hc1455-7.c3s2.iphmx.com (esa3.hc1455-7.c3s2.iphmx.com [207.54.90.49]) by imf29.hostedemail.com (Postfix) with ESMTP id B751A120014 for ; Wed, 21 Aug 2024 13:57:10 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=fujitsu.com header.s=fj2 header.b=IGS2eI84; spf=pass (imf29.hostedemail.com: domain of ruansy.fnst@fujitsu.com designates 207.54.90.49 as permitted sender) smtp.mailfrom=ruansy.fnst@fujitsu.com; dmarc=pass (policy=reject) header.from=fujitsu.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1724248550; 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:dkim-signature; bh=x4fXB6Lz2TE2KXT3WrIU2ahp3AzyvyeI6W5qAvbc8jc=; b=yHf1D/BCmcXe23R/5zt0SCUw2z6dlFmpRpaogKWDIM0FQ5pAK03rfshd45bXBzYnq7Ys3Q DydL3EIJ/uIhx7WPMxBx/3jNrYCQQWyYtIVqOpcXvw9/71/K56y5TR43XEudh9GJly2vmk a4D1c2/Z3vzi5yhHytylRdHDlE102pQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1724248550; a=rsa-sha256; cv=none; b=ahQNG92M3BkfSGwRu8opXKuwa+KHNEecSFGboqn8Awbayg53JiWemy9cSS0cyzAxCJk0lj J2LSWlBFFVFb7TCUU/cltPMX/XUng0B03F5uDU+bu93TK+xheTeZaRm9fq+tOSYmKklZj1 A65G6Zv38VdDrizcuESkRu7zUHitsUk= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=fujitsu.com header.s=fj2 header.b=IGS2eI84; spf=pass (imf29.hostedemail.com: domain of ruansy.fnst@fujitsu.com designates 207.54.90.49 as permitted sender) smtp.mailfrom=ruansy.fnst@fujitsu.com; dmarc=pass (policy=reject) header.from=fujitsu.com DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj2; t=1724248631; x=1755784631; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=Vmns/KCkTSIUEDDrY1N4NuJbDBwwQf3ZYG53AW+z+IU=; b=IGS2eI84NU+jMMaQwexlRYsIPoDSXklVL3QdcJb1nIb3lGLVS5Tdy1yG IrGQdVhmprpRniJnW73Pdke0Vhm7SFn1R0+QrSDBlGKGjNZ77dVqwM80n g7R3uMOdpzpgk314GxUOTxKUBnwSMy5bQWI2mV0GNtihKqvi4b2luHXGG zUYhT5Gy/u30wYmmOizNhwyGOjjBbQvDOCkDbEt7lf/NBLcVj5I6ocgEE 5WTx3RBpbU9tfTjawDCcPhshuWLPemF4AZl0809UT1N3oaXbW0eXxMQoP ray+BgE9TpqjUBmam+A7mSXe3YsYo7cF487gryQaYhFykeC6hyVE/TaCx Q==; X-CSE-ConnectionGUID: KHZfl9WRQ0K4YJqWtUnQOw== X-CSE-MsgGUID: 348y4LRdSDimkvqVlRz42g== X-IronPort-AV: E=McAfee;i="6700,10204,11171"; a="171214372" X-IronPort-AV: E=Sophos;i="6.10,164,1719846000"; d="scan'208";a="171214372" Received: from unknown (HELO yto-r1.gw.nic.fujitsu.com) ([218.44.52.217]) by esa3.hc1455-7.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Aug 2024 22:57:09 +0900 Received: from yto-m1.gw.nic.fujitsu.com (yto-nat-yto-m1.gw.nic.fujitsu.com [192.168.83.64]) by yto-r1.gw.nic.fujitsu.com (Postfix) with ESMTP id 3B77BD6EEF for ; Wed, 21 Aug 2024 22:57:06 +0900 (JST) Received: from kws-ab4.gw.nic.fujitsu.com (kws-ab4.gw.nic.fujitsu.com [192.51.206.22]) by yto-m1.gw.nic.fujitsu.com (Postfix) with ESMTP id 7B43FCF7C3 for ; Wed, 21 Aug 2024 22:57:05 +0900 (JST) Received: from edo.cn.fujitsu.com (edo.cn.fujitsu.com [10.167.33.5]) by kws-ab4.gw.nic.fujitsu.com (Postfix) with ESMTP id 092D621CB1E for ; Wed, 21 Aug 2024 22:57:05 +0900 (JST) Received: from [10.193.128.195] (unknown [10.193.128.195]) by edo.cn.fujitsu.com (Postfix) with ESMTP id 215D91A000A; Wed, 21 Aug 2024 21:57:03 +0800 (CST) Message-ID: Date: Wed, 21 Aug 2024 21:57:02 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 1/2] cxl/core: introduce device reporting poison hanlding To: Fan Ni Cc: qemu-devel@nongnu.org, linux-cxl@vger.kernel.org, linux-edac@vger.kernel.org, linux-mm@kvack.org, dan.j.williams@intel.com, vishal.l.verma@intel.com, Jonathan.Cameron@huawei.com, alison.schofield@intel.com, bp@alien8.de, dave.jiang@intel.com, dave@stgolabs.net, ira.weiny@intel.com, james.morse@arm.com, linmiaohe@huawei.com, mchehab@kernel.org, nao.horiguchi@gmail.com, rric@kernel.org, tony.luck@intel.com References: <20240808151328.707869-1-ruansy.fnst@fujitsu.com> <20240808151328.707869-2-ruansy.fnst@fujitsu.com> From: Shiyang Ruan In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-TM-AS-Product-Ver: IMSS-9.1.0.1417-9.0.0.1002-28608.007 X-TM-AS-User-Approved-Sender: Yes X-TMASE-Version: IMSS-9.1.0.1417-9.0.1002-28608.007 X-TMASE-Result: 10--23.928600-10.000000 X-TMASE-MatchedRID: C0Xwo0Y+vY2PvrMjLFD6eKn9fPsu8s0a2q80vLACqaeqvcIF1TcLYLBk jjdoOP1bW9EH4+AJvKPMrGM6h+7YUICoSWHZmQrDKiJEqUFWRghZDdHiTk9OcJDHQ2MaZXz4jK1 xN9jQWTmEkt/L8HtAJ6Y70l+keWg+/iG8k6NejseJJ72DuZB0nDnOm2OHJgpY/gMNehoKqTtSRG QAFjO+uHeO6Bj0fYm80+j23NMt8oZujdbubeNfI52wBULX+gacQ1Zooh0EhXhXGTbsQqHbks2fh /Vuh6xFrs8eT/x5DzdWHSUfKtrk8CZ0TtZEfDmeTuctSpiuWyUUi4Ehat0545Tx+2LIqNmtJstK 1NXQZJeXYZQAF2E+zIMuR75hY8zA9H//YyhN9ge4u3nS+3EEDvi4nVERfgwdZ7MN8KplzpwY20f 1wrB11o3fDvBOMJyVk0bQDJF2wJjev27akzvuZt+pUF0HsjxRmF/+S9oK0r2vloAnGr4qhkINRX nZvSBfgEx/MZlaMxXBlU8KFeeE9VABpNhnDlEI9k0tWBWiOf8th3LBMeXue3HBbiUCoeceWnMen dKlFy9E/RFnPTO/Q/Z5MzLbDyyOmmJTaSCgYAvG+nS24MzHeX0tCKdnhB581B0Hk1Q1KyIOsECO 9s+GHnQdJ7XfU86ekGUtrowrXLg= X-TMASE-SNAP-Result: 1.821001.0001-0-1-22:0,33:0,34:0-0 X-Stat-Signature: m4eaisk7ikizo3d7gu1aago1e94s8ekm X-Rspamd-Queue-Id: B751A120014 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1724248630-598279 X-HE-Meta: U2FsdGVkX1+tppGaVRX+sceFpAZVylDVBgWfo/dn801IUOtpxawqs35ao5ebOKk1f3V8PzIxD2HpS6N1SVDVMDyge5odjgAwvXrjqYOwITAI9Uv9ugSReQg6oAUFNZzXjJYFNcXbp7BNk55TWHgO5FqtsRIyYsrENCgLE6tkFlNrcwgR6VqDyXTtGS7RlZIzlCkIY94d3J0Am5v2W/QURbCKBTqWgTtyXB14biJRpjS01Qqx+uHnHtwqDfewPcoP/9/rYetQxuPc/0GTAtwmwUEjNg6Ymn+Rvhl3mE1Msl8XCArlb3JLg+h/9wNITcPnYfNUhOtKh9kzB8GuwP10ZhB70AF+LTzLdEgfl2sQUuPusMDXRaR/aT8KgoIjRiOUtJ/OpPNr3L+gfiIzMPdakMLFL11yKEBlkQJU8Y1A9e6od207M2pUCLxj68xUk/WoRS+H7mkaL3JlNC/eE/6GEx8ugKKSfFY/sJp2gR8ehTQMQz4KMw54ccnAXCrFWRffTDTtAnNddcISgRWWBPjwwYqXoXmxudHmou1M2EGdakruUYNw7uVeg8ws8aWYG7eSS1VhRmxBJ8+qvVprQl2eZB8MEy6ymd3JaGU4hq2aAbkw8ZnerTD+5gUhvfy613uqLmy2HLm+NKiXnjEfYh42h2Y3HJStLwCHzoayWVE7776bjxDhM6urzuUz4RkC+Y5fa3KxTT7DDrnIrL2EG7QbsvVxtSf6XPeXagZexps3iiiN8I0Zkx62XhP/pMtVzLXIovSYRLaRm7hbd3cF4hdBXprcaQ66H/UC3zred8yvK+QGf7jIImW2439k/ir1Bmf3Qf8bvZHCFHJewLa/pWFjIvnd4JSmKmhxSQORpuk4ShrqqKprDBqjemR3KYPgc8DqSSODoybvSdhVYxKJl8rBBWp8xfVVdBdrVIUzOQ3pMYYQ7xNfdksDjHy5zVFg6eTPEHX8uWfx7jtHwTEjSBJ tQrOUECR 39E9Muf1+5sgJz+c9znKCtvSpqRuYbsiqwXLIQuhvYGLE1C7FZknZ3bkfUrd7mq/SpMwkNEzV6bEdlF7dm1cY7aP8pcpe26f1d+LAMFOqRbAJQ9vFx8tiZQy7bhlxKE6eEOXNPe2qUHmLQmnnAjy/BPCogwqzu7gILfQfpKKlbECLhLl/ioLd2Jf/HzZDs42MHwcJSogPCJ+1ayHN9Swje7d2a/5v5iwB5HJmVDPQk909F/Kvm0tUKFOUF6JqK0qhWGmxJCgr6vnCQz1V87HguuCbvWDyGb9UVgZEewFW5RhriaO2LeJPg8jMMjoUXjvwdQ7QERvpQdbODRSJr9ClRD+stzS9M/3QAdEPxdUvm6viFTmWnrfff7TH6BTZmervXfpv 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: 在 2024/8/9 2:28, Fan Ni 写道: > On Thu, Aug 08, 2024 at 11:13:27PM +0800, Shiyang Ruan wrote: >> CXL device can find&report memory problems, even before MCE is detected >> by CPU. AFAIK, the current kernel only traces POISON error event >> from FW-First/OS-First path, but it doesn't handle them, neither >> notify processes who are using the POISON page like MCE does. >> >> Thus, user have to read logs from trace and find out which device >> reported the error and which applications are affected. That is not >> an easy work and cannot be handled in time. Thus, it is needed to add >> the feature to make the work done automatically and quickly. Once CXL >> device reports the POISON error (via FW-First/OS-First), kernel >> handles it immediately, similar to the flow when a MCE is triggered. >> >> The current call trace of error reporting&handling looks like this: >> ``` >> 1. MCE (interrupt #18, while CPU consuming POISON) >> -> do_machine_check() >> -> mce_log() >> -> notify chain (x86_mce_decoder_chain) >> -> memory_failure() >> >> 2.a FW-First (optional, CXL device proactively find&report) >> -> CXL device -> Firmware >> -> OS: ACPI->APEI->GHES->CPER -> CXL driver -> trace >> \-> memory_failure() >> ^----- ADD >> 2.b OS-First (optional, CXL device proactively find&report) >> -> CXL device -> MSI >> -> OS: CXL driver -> trace >> \-> memory_failure() >> ^------------------------------- ADD >> ``` >> This patch adds calling memory_failure() while CXL device reporting >> error is received, marked as "ADD" in figure above. >> >> Signed-off-by: Shiyang Ruan >> --- >> drivers/cxl/core/mbox.c | 75 ++++++++++++++++++++++++++++++++------- >> drivers/cxl/cxlmem.h | 8 ++--- >> drivers/cxl/pci.c | 4 +-- >> include/linux/cxl-event.h | 16 ++++++++- >> 4 files changed, 83 insertions(+), 20 deletions(-) >> >> diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c >> index e5cdeafdf76e..0cb6ef2e6600 100644 >> --- a/drivers/cxl/core/mbox.c >> +++ b/drivers/cxl/core/mbox.c >> @@ -849,10 +849,55 @@ int cxl_enumerate_cmds(struct cxl_memdev_state *mds) >> } >> EXPORT_SYMBOL_NS_GPL(cxl_enumerate_cmds, CXL); >> >> -void cxl_event_trace_record(const struct cxl_memdev *cxlmd, >> - enum cxl_event_log_type type, >> - enum cxl_event_type event_type, >> - const uuid_t *uuid, union cxl_event *evt) >> +static void cxl_report_poison(struct cxl_memdev *cxlmd, u64 hpa) >> +{ >> + unsigned long pfn = PHYS_PFN(hpa); >> + >> + memory_failure_queue(pfn, 0); >> +} >> + >> +static void cxl_event_handle_general_media(struct cxl_memdev *cxlmd, >> + enum cxl_event_log_type type, >> + u64 hpa, >> + struct cxl_event_gen_media *rec) >> +{ >> + if (type == CXL_EVENT_TYPE_FAIL) { >> + switch (rec->media_hdr.transaction_type) { >> + case CXL_EVENT_TRANSACTION_READ: >> + case CXL_EVENT_TRANSACTION_WRITE: >> + case CXL_EVENT_TRANSACTION_SCAN_MEDIA: >> + case CXL_EVENT_TRANSACTION_INJECT_POISON: >> + cxl_report_poison(cxlmd, hpa); >> + break; >> + default: >> + break; >> + } >> + } >> +} >> + >> +static void cxl_event_handle_dram(struct cxl_memdev *cxlmd, >> + enum cxl_event_log_type type, >> + u64 hpa, >> + struct cxl_event_dram *rec) >> +{ >> + if (type == CXL_EVENT_TYPE_FAIL) { >> + switch (rec->media_hdr.transaction_type) { >> + case CXL_EVENT_TRANSACTION_READ: >> + case CXL_EVENT_TRANSACTION_WRITE: >> + case CXL_EVENT_TRANSACTION_SCAN_MEDIA: >> + case CXL_EVENT_TRANSACTION_INJECT_POISON: >> + cxl_report_poison(cxlmd, hpa); >> + break; >> + default: >> + break; >> + } >> + } >> +} >> + >> +void cxl_event_handle_record(struct cxl_memdev *cxlmd, >> + enum cxl_event_log_type type, >> + enum cxl_event_type event_type, >> + const uuid_t *uuid, union cxl_event *evt) >> { >> if (event_type == CXL_CPER_EVENT_MEM_MODULE) { >> trace_cxl_memory_module(cxlmd, type, &evt->mem_module); >> @@ -880,18 +925,22 @@ void cxl_event_trace_record(const struct cxl_memdev *cxlmd, >> if (cxlr) >> hpa = cxl_dpa_to_hpa(cxlr, cxlmd, dpa); >> >> - if (event_type == CXL_CPER_EVENT_GEN_MEDIA) >> + if (event_type == CXL_CPER_EVENT_GEN_MEDIA) { >> trace_cxl_general_media(cxlmd, type, cxlr, hpa, >> &evt->gen_media); >> - else if (event_type == CXL_CPER_EVENT_DRAM) >> + cxl_event_handle_general_media(cxlmd, type, hpa, >> + &evt->gen_media); >> + } else if (event_type == CXL_CPER_EVENT_DRAM) { >> trace_cxl_dram(cxlmd, type, cxlr, hpa, &evt->dram); >> + cxl_event_handle_dram(cxlmd, type, hpa, &evt->dram); > > Does it make sense to call the trace function in > cxl_event_handle_dram/general_media and replace the trace function with > the handle_* here? Sorry for late reply. I'm not really good at naming functions. Since the trace functions already have the framework to deal with each kind of uuids and event types, I don't think we should make another one for the same logics. Thus, I reused it and renamed the functions. Maybe "handle" isn't a good word to describe "tracing records and doing memory_failure if necessary". Could you help me to name it better? > >> + } >> } >> } >> -EXPORT_SYMBOL_NS_GPL(cxl_event_trace_record, CXL); >> +EXPORT_SYMBOL_NS_GPL(cxl_event_handle_record, CXL); >> >> -static void __cxl_event_trace_record(const struct cxl_memdev *cxlmd, >> - enum cxl_event_log_type type, >> - struct cxl_event_record_raw *record) >> +static void __cxl_event_handle_record(struct cxl_memdev *cxlmd, >> + enum cxl_event_log_type type, >> + struct cxl_event_record_raw *record) >> { >> enum cxl_event_type ev_type = CXL_CPER_EVENT_GENERIC; >> const uuid_t *uuid = &record->id; >> @@ -903,7 +952,7 @@ static void __cxl_event_trace_record(const struct cxl_memdev *cxlmd, >> else if (uuid_equal(uuid, &CXL_EVENT_MEM_MODULE_UUID)) >> ev_type = CXL_CPER_EVENT_MEM_MODULE; >> >> - cxl_event_trace_record(cxlmd, type, ev_type, uuid, &record->event); >> + cxl_event_handle_record(cxlmd, type, ev_type, uuid, &record->event); >> } >> >> static int cxl_clear_event_record(struct cxl_memdev_state *mds, >> @@ -1012,8 +1061,8 @@ static void cxl_mem_get_records_log(struct cxl_memdev_state *mds, >> break; >> >> for (i = 0; i < nr_rec; i++) >> - __cxl_event_trace_record(cxlmd, type, >> - &payload->records[i]); >> + __cxl_event_handle_record(cxlmd, type, >> + &payload->records[i]); >> >> if (payload->flags & CXL_GET_EVENT_FLAG_OVERFLOW) >> trace_cxl_overflow(cxlmd, type, payload); >> diff --git a/drivers/cxl/cxlmem.h b/drivers/cxl/cxlmem.h >> index afb53d058d62..5c4810dcbdeb 100644 >> --- a/drivers/cxl/cxlmem.h >> +++ b/drivers/cxl/cxlmem.h >> @@ -826,10 +826,10 @@ void set_exclusive_cxl_commands(struct cxl_memdev_state *mds, >> void clear_exclusive_cxl_commands(struct cxl_memdev_state *mds, >> unsigned long *cmds); >> void cxl_mem_get_event_records(struct cxl_memdev_state *mds, u32 status); >> -void cxl_event_trace_record(const struct cxl_memdev *cxlmd, >> - enum cxl_event_log_type type, >> - enum cxl_event_type event_type, >> - const uuid_t *uuid, union cxl_event *evt); >> +void cxl_event_handle_record(struct cxl_memdev *cxlmd, >> + enum cxl_event_log_type type, >> + enum cxl_event_type event_type, >> + const uuid_t *uuid, union cxl_event *evt); >> int cxl_set_timestamp(struct cxl_memdev_state *mds); >> int cxl_poison_state_init(struct cxl_memdev_state *mds); >> int cxl_mem_get_poison(struct cxl_memdev *cxlmd, u64 offset, u64 len, >> diff --git a/drivers/cxl/pci.c b/drivers/cxl/pci.c >> index 4be35dc22202..6e65ca89f666 100644 >> --- a/drivers/cxl/pci.c >> +++ b/drivers/cxl/pci.c >> @@ -1029,8 +1029,8 @@ static void cxl_handle_cper_event(enum cxl_event_type ev_type, >> hdr_flags = get_unaligned_le24(rec->event.generic.hdr.flags); >> log_type = FIELD_GET(CXL_EVENT_HDR_FLAGS_REC_SEVERITY, hdr_flags); >> >> - cxl_event_trace_record(cxlds->cxlmd, log_type, ev_type, >> - &uuid_null, &rec->event); >> + cxl_event_handle_record(cxlds->cxlmd, log_type, ev_type, >> + &uuid_null, &rec->event); >> } >> >> static void cxl_cper_work_fn(struct work_struct *work) >> diff --git a/include/linux/cxl-event.h b/include/linux/cxl-event.h >> index 0bea1afbd747..be4342a2b597 100644 >> --- a/include/linux/cxl-event.h >> +++ b/include/linux/cxl-event.h >> @@ -7,6 +7,20 @@ >> #include >> #include >> >> +/* >> + * Event transaction type >> + * CXL rev 3.0 Section 8.2.9.2.1.1; Table 8-43 > > Here and below, update the specification reference to reflect cxl 3.1. Ok. Will update it. -- Thanks, Ruan. > > Fan >> + */ >> +enum cxl_event_transaction_type { >> + CXL_EVENT_TRANSACTION_UNKNOWN = 0X00, >> + CXL_EVENT_TRANSACTION_READ, >> + CXL_EVENT_TRANSACTION_WRITE, >> + CXL_EVENT_TRANSACTION_SCAN_MEDIA, >> + CXL_EVENT_TRANSACTION_INJECT_POISON, >> + CXL_EVENT_TRANSACTION_MEDIA_SCRUB, >> + CXL_EVENT_TRANSACTION_MEDIA_MANAGEMENT, >> +}; >> + >> /* >> * Common Event Record Format >> * CXL rev 3.0 section 8.2.9.2.1; Table 8-42 >> @@ -26,7 +40,7 @@ struct cxl_event_media_hdr { >> __le64 phys_addr; >> u8 descriptor; >> u8 type; >> - u8 transaction_type; >> + u8 transaction_type; /* enum cxl_event_transaction_type */ >> /* >> * The meaning of Validity Flags from bit 2 is >> * different across DRAM and General Media records >> -- >> 2.34.1 >>