From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Gregory Price <gourry.memverge@gmail.com>
Cc: <qemu-devel@nongnu.org>, <linux-cxl@vger.kernel.org>,
<junhee.ryu@sk.com>, <kwangjin.ko@sk.com>,
Gregory Price <gregory.price@memverge.com>
Subject: Re: [PATCH 4/5] cxl/type3: add an optional mhd validation function for memory accesses
Date: Mon, 4 Sep 2023 18:02:14 +0100 [thread overview]
Message-ID: <20230904180214.00007e32@Huawei.com> (raw)
In-Reply-To: <20230901012914.226527-5-gregory.price@memverge.com>
On Thu, 31 Aug 2023 21:29:13 -0400
Gregory Price <gourry.memverge@gmail.com> wrote:
> When memory accesses are made, some MHSLD's would validate the address
> is within the scope of allocated sections. To do this, the base device
> must call an optional function set by inherited devices.
>
> Signed-off-by: Gregory Price <gregory.price@memverge.com>
This sort of callback addition can be done via class initialization.
E.g. get_lsa_size()
https://elixir.bootlin.com/qemu/latest/source/hw/mem/cxl_type3.c#L1494
as the callback is the same for all instances of the class which
in next patch is CXLNiagraClass where you already set the
PCIClass callbacks in cxl_niagara_class_init()
You can then use something like:
CXLType3Class *cvc = CXL_TYPE3_GET_CLASS(ct3d);
cvc->mhd_access_valid(ct3d, dpa_offset, size);
Jonathan
> ---
> hw/mem/cxl_type3.c | 15 +++++++++++++++
> include/hw/cxl/cxl_device.h | 3 +++
> 2 files changed, 18 insertions(+)
>
> diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c
> index a8d4a12f3e..8e1565f2fc 100644
> --- a/hw/mem/cxl_type3.c
> +++ b/hw/mem/cxl_type3.c
> @@ -1034,6 +1034,10 @@ void ct3_realize(PCIDevice *pci_dev, Error **errp)
> goto err_release_cdat;
> }
> }
> +
> + /* Devices which inherit ct3d should initialize these after ct3_realize */
> + ct3d->mhd_access_valid = NULL;
> +
> return;
>
> err_release_cdat:
> @@ -1259,6 +1263,11 @@ MemTxResult cxl_type3_read(PCIDevice *d, hwaddr host_addr, uint64_t *data,
> return MEMTX_ERROR;
> }
>
> + if (ct3d->mhd_access_valid &&
> + !ct3d->mhd_access_valid(d, dpa_offset, size)) {
> + return MEMTX_ERROR;
> + }
> +
> if (sanitize_running(&ct3d->cci)) {
> qemu_guest_getrandom_nofail(data, size);
> return MEMTX_OK;
> @@ -1279,6 +1288,12 @@ MemTxResult cxl_type3_write(PCIDevice *d, hwaddr host_addr, uint64_t data,
> if (res) {
> return MEMTX_ERROR;
> }
> +
> + if (ct3d->mhd_access_valid &&
> + !ct3d->mhd_access_valid(d, dpa_offset, size)) {
> + return MEMTX_ERROR;
> + }
> +
> if (sanitize_running(&ct3d->cci)) {
> return MEMTX_OK;
> }
> diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h
> index 4ad38b689c..b1b39a9aa0 100644
> --- a/include/hw/cxl/cxl_device.h
> +++ b/include/hw/cxl/cxl_device.h
> @@ -489,6 +489,9 @@ struct CXLType3Dev {
> uint8_t num_regions; /* 0-8 regions */
> CXLDCDRegion regions[DCD_MAX_REGION_NUM];
> } dc;
> +
> + /* Multi-headed Device */
> + bool (*mhd_access_valid)(PCIDevice *d, uint64_t addr, unsigned int size);
> };
>
> #define TYPE_CXL_TYPE3 "cxl-type3"
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron via <qemu-devel@nongnu.org>
To: Gregory Price <gourry.memverge@gmail.com>
Cc: <qemu-devel@nongnu.org>, <linux-cxl@vger.kernel.org>,
<junhee.ryu@sk.com>, <kwangjin.ko@sk.com>,
Gregory Price <gregory.price@memverge.com>
Subject: Re: [PATCH 4/5] cxl/type3: add an optional mhd validation function for memory accesses
Date: Mon, 4 Sep 2023 18:02:14 +0100 [thread overview]
Message-ID: <20230904180214.00007e32@Huawei.com> (raw)
In-Reply-To: <20230901012914.226527-5-gregory.price@memverge.com>
On Thu, 31 Aug 2023 21:29:13 -0400
Gregory Price <gourry.memverge@gmail.com> wrote:
> When memory accesses are made, some MHSLD's would validate the address
> is within the scope of allocated sections. To do this, the base device
> must call an optional function set by inherited devices.
>
> Signed-off-by: Gregory Price <gregory.price@memverge.com>
This sort of callback addition can be done via class initialization.
E.g. get_lsa_size()
https://elixir.bootlin.com/qemu/latest/source/hw/mem/cxl_type3.c#L1494
as the callback is the same for all instances of the class which
in next patch is CXLNiagraClass where you already set the
PCIClass callbacks in cxl_niagara_class_init()
You can then use something like:
CXLType3Class *cvc = CXL_TYPE3_GET_CLASS(ct3d);
cvc->mhd_access_valid(ct3d, dpa_offset, size);
Jonathan
> ---
> hw/mem/cxl_type3.c | 15 +++++++++++++++
> include/hw/cxl/cxl_device.h | 3 +++
> 2 files changed, 18 insertions(+)
>
> diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c
> index a8d4a12f3e..8e1565f2fc 100644
> --- a/hw/mem/cxl_type3.c
> +++ b/hw/mem/cxl_type3.c
> @@ -1034,6 +1034,10 @@ void ct3_realize(PCIDevice *pci_dev, Error **errp)
> goto err_release_cdat;
> }
> }
> +
> + /* Devices which inherit ct3d should initialize these after ct3_realize */
> + ct3d->mhd_access_valid = NULL;
> +
> return;
>
> err_release_cdat:
> @@ -1259,6 +1263,11 @@ MemTxResult cxl_type3_read(PCIDevice *d, hwaddr host_addr, uint64_t *data,
> return MEMTX_ERROR;
> }
>
> + if (ct3d->mhd_access_valid &&
> + !ct3d->mhd_access_valid(d, dpa_offset, size)) {
> + return MEMTX_ERROR;
> + }
> +
> if (sanitize_running(&ct3d->cci)) {
> qemu_guest_getrandom_nofail(data, size);
> return MEMTX_OK;
> @@ -1279,6 +1288,12 @@ MemTxResult cxl_type3_write(PCIDevice *d, hwaddr host_addr, uint64_t data,
> if (res) {
> return MEMTX_ERROR;
> }
> +
> + if (ct3d->mhd_access_valid &&
> + !ct3d->mhd_access_valid(d, dpa_offset, size)) {
> + return MEMTX_ERROR;
> + }
> +
> if (sanitize_running(&ct3d->cci)) {
> return MEMTX_OK;
> }
> diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h
> index 4ad38b689c..b1b39a9aa0 100644
> --- a/include/hw/cxl/cxl_device.h
> +++ b/include/hw/cxl/cxl_device.h
> @@ -489,6 +489,9 @@ struct CXLType3Dev {
> uint8_t num_regions; /* 0-8 regions */
> CXLDCDRegion regions[DCD_MAX_REGION_NUM];
> } dc;
> +
> + /* Multi-headed Device */
> + bool (*mhd_access_valid)(PCIDevice *d, uint64_t addr, unsigned int size);
> };
>
> #define TYPE_CXL_TYPE3 "cxl-type3"
next prev parent reply other threads:[~2023-09-04 17:02 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-01 1:29 [PATCH 0/5 v2] CXL: SK hynix Niagara MHSLD Device Gregory Price
2023-09-01 1:29 ` [PATCH 1/5] cxl/mailbox: move mailbox effect definitions to a header Gregory Price
2023-09-05 8:50 ` Philippe Mathieu-Daudé
2023-09-01 1:29 ` [PATCH 2/5] cxl/type3: Cleanup multiple CXL_TYPE3() calls in read/write functions Gregory Price
2023-09-04 16:53 ` Jonathan Cameron
2023-09-04 16:53 ` Jonathan Cameron via
2023-09-05 8:51 ` Philippe Mathieu-Daudé
2023-09-01 1:29 ` [PATCH 3/5] cxl/type3: Expose ct3 functions so that inheriters can call them Gregory Price
2023-09-05 8:59 ` Philippe Mathieu-Daudé
2023-09-04 11:11 ` Gregory Price
2023-09-01 1:29 ` [PATCH 4/5] cxl/type3: add an optional mhd validation function for memory accesses Gregory Price
2023-09-04 17:02 ` Jonathan Cameron [this message]
2023-09-04 17:02 ` Jonathan Cameron via
2023-09-04 11:01 ` Gregory Price
2023-09-01 1:29 ` [PATCH 5/5] cxl/vendor: SK hynix Niagara Multi-Headed SLD Device Gregory Price
2023-09-06 13:04 ` Jonathan Cameron
2023-09-06 13:04 ` Jonathan Cameron via
2023-09-05 16:04 ` Gregory Price
2023-09-12 12:37 ` Jonathan Cameron
2023-09-12 12:37 ` Jonathan Cameron via
2023-09-05 9:04 ` [PATCH 0/5 v2] CXL: SK hynix Niagara MHSLD Device Philippe Mathieu-Daudé
2023-09-04 11:24 ` Gregory Price
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230904180214.00007e32@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=gourry.memverge@gmail.com \
--cc=gregory.price@memverge.com \
--cc=junhee.ryu@sk.com \
--cc=kwangjin.ko@sk.com \
--cc=linux-cxl@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.