From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Gregory Price <gregory.price@memverge.com>
Cc: "Jonathan Cameron via" <qemu-devel@nongnu.org>,
"Michael Tsirkin" <mst@redhat.com>,
"Ben Widawsky" <bwidawsk@kernel.org>,
linux-cxl@vger.kernel.org, linuxarm@huawei.com,
"Ira Weiny" <ira.weiny@intel.com>,
"Gregory Price" <gourry.memverge@gmail.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Mike Maslenkin" <mike.maslenkin@gmail.com>
Subject: Re: [PATCH 2/2] hw/cxl: Multi-Region CXL Type-3 Devices (Volatile and Persistent)
Date: Mon, 20 Feb 2023 11:46:46 +0000 [thread overview]
Message-ID: <20230220114646.000000ff@Huawei.com> (raw)
In-Reply-To: <Y+9gSWadbRfdqJGS@memverge.com>
On Fri, 17 Feb 2023 06:08:57 -0500
Gregory Price <gregory.price@memverge.com> wrote:
> On Fri, Feb 17, 2023 at 04:16:17PM +0000, Jonathan Cameron via wrote:
> > On Tue, 31 Jan 2023 16:38:47 +0000
> > Jonathan Cameron via <qemu-devel@nongnu.org> wrote:
> >
> > > From: Gregory Price <gourry.memverge@gmail.com>
> > >
> > > This commit enables each CXL Type-3 device to contain one volatile
> > > memory region and one persistent region.
> > >
> > > Two new properties have been added to cxl-type3 device initialization:
> > > [volatile-memdev] and [persistent-memdev]
> > >
> > > The existing [memdev] property has been deprecated and will default the
> > > memory region to a persistent memory region (although a user may assign
> > > the region to a ram or file backed region). It cannot be used in
> > > combination with the new [persistent-memdev] property.
> > >
> > > Partitioning volatile memory from persistent memory is not yet supported.
> > >
> > > Volatile memory is mapped at DPA(0x0), while Persistent memory is mapped
> > > at DPA(vmem->size), per CXL Spec 8.2.9.8.2.0 - Get Partition Info.
> > >
> > > Signed-off-by: Gregory Price <gregory.price@memverge.com>
> > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > >
> > Hi Gregory,
> >
> > I've added support for multiple HDM decoders and hence can now
> > test both volatile and non volatile on same device.
> > It very nearly all works. With one exception which is I couldn't
> > poke the first byte of the non volatile region.
> >
> > I think we have an off by one in a single check.
> >
> > Interestingly it makes no difference when creating an FS on top
> > (which was my standard test) so I only noticed when poking memory
> > addresses directly to sanity check the HDM decoder setup.
> >
> > I'll roll a v2 if no one shouts out that I'm wrong.
> >
> > Note that adding multiple HDM decoders massively increases
> > the number of test cases over what we had before to poke all the
> > corners so I may well be missing stuff. Hopefully can send an RFC
> > of that support out next week.
> >
> > Jonathan
> >
>
> Very cool! Thanks for pushing this over the finishing line.
>
> All my testing so far has been really smooth since getting the TCG issue
> worked out.
>
> > > -MemTxResult cxl_type3_read(PCIDevice *d, hwaddr host_addr, uint64_t *data,
> > > - unsigned size, MemTxAttrs attrs)
> [...]
> > > + if (vmr) {
> > > + if (*dpa_offset <= int128_get64(vmr->size)) {
> >
> > Off by one I think. <
> >
>
> Yes that makes sense, should be <. Derp derp.
>
> Though I think this may alludes to more off-by-one issues? This says
>
> if (dpa_offset < vmr->size)
>
> but dpa_offset should be (hpa - memory_region_base),
>
> The HPA is used by memory access routing for the whole system to determine
> what device it should access.
>
> If that corner case is being hit, doesn't it imply the higher level code
> is also susceptible to this, and is routing accesses to the wrong device?
I don't think so though I may be missing something.
Say vmr->size = 8
hpa dpa_offset
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 0
etc
Also the writes are turning up where I expect them to.
Also just noticed that the code is setting Memory_base in the CXL dvsec.
Given we are emulating a device as if it has been freshly powered up
those should not be set - it's the OS or firmware's job to set them up.
Harmless though, so can be a cleanup to follow the main series.
We don't currently handle dvsec range based routing anyway and
I'm not sure we ever will as it is a pain to test without some firmware
or OS code to program them for us.
Note that if you update your kernel to cxl/next it will currently fail
as the Range register emulation is (I think) rather over enthusiastic
and currently decides to emulate the HDM decoders for the QEMU emulated
type 3 devices.
https://lore.kernel.org/linux-cxl/167640366272.935665.1056268838301725481.stgit@dwillia2-xfh.jf.intel.com/T/#m6c025d5c9b27d8360a64079593f6c5adaa408772
Jonathan
>
> ~Gregory
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron via <qemu-devel@nongnu.org>
To: Gregory Price <gregory.price@memverge.com>
Cc: "Jonathan Cameron via" <qemu-devel@nongnu.org>,
"Michael Tsirkin" <mst@redhat.com>,
"Ben Widawsky" <bwidawsk@kernel.org>,
linux-cxl@vger.kernel.org, linuxarm@huawei.com,
"Ira Weiny" <ira.weiny@intel.com>,
"Gregory Price" <gourry.memverge@gmail.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Mike Maslenkin" <mike.maslenkin@gmail.com>
Subject: Re: [PATCH 2/2] hw/cxl: Multi-Region CXL Type-3 Devices (Volatile and Persistent)
Date: Mon, 20 Feb 2023 11:46:46 +0000 [thread overview]
Message-ID: <20230220114646.000000ff@Huawei.com> (raw)
In-Reply-To: <Y+9gSWadbRfdqJGS@memverge.com>
On Fri, 17 Feb 2023 06:08:57 -0500
Gregory Price <gregory.price@memverge.com> wrote:
> On Fri, Feb 17, 2023 at 04:16:17PM +0000, Jonathan Cameron via wrote:
> > On Tue, 31 Jan 2023 16:38:47 +0000
> > Jonathan Cameron via <qemu-devel@nongnu.org> wrote:
> >
> > > From: Gregory Price <gourry.memverge@gmail.com>
> > >
> > > This commit enables each CXL Type-3 device to contain one volatile
> > > memory region and one persistent region.
> > >
> > > Two new properties have been added to cxl-type3 device initialization:
> > > [volatile-memdev] and [persistent-memdev]
> > >
> > > The existing [memdev] property has been deprecated and will default the
> > > memory region to a persistent memory region (although a user may assign
> > > the region to a ram or file backed region). It cannot be used in
> > > combination with the new [persistent-memdev] property.
> > >
> > > Partitioning volatile memory from persistent memory is not yet supported.
> > >
> > > Volatile memory is mapped at DPA(0x0), while Persistent memory is mapped
> > > at DPA(vmem->size), per CXL Spec 8.2.9.8.2.0 - Get Partition Info.
> > >
> > > Signed-off-by: Gregory Price <gregory.price@memverge.com>
> > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > >
> > Hi Gregory,
> >
> > I've added support for multiple HDM decoders and hence can now
> > test both volatile and non volatile on same device.
> > It very nearly all works. With one exception which is I couldn't
> > poke the first byte of the non volatile region.
> >
> > I think we have an off by one in a single check.
> >
> > Interestingly it makes no difference when creating an FS on top
> > (which was my standard test) so I only noticed when poking memory
> > addresses directly to sanity check the HDM decoder setup.
> >
> > I'll roll a v2 if no one shouts out that I'm wrong.
> >
> > Note that adding multiple HDM decoders massively increases
> > the number of test cases over what we had before to poke all the
> > corners so I may well be missing stuff. Hopefully can send an RFC
> > of that support out next week.
> >
> > Jonathan
> >
>
> Very cool! Thanks for pushing this over the finishing line.
>
> All my testing so far has been really smooth since getting the TCG issue
> worked out.
>
> > > -MemTxResult cxl_type3_read(PCIDevice *d, hwaddr host_addr, uint64_t *data,
> > > - unsigned size, MemTxAttrs attrs)
> [...]
> > > + if (vmr) {
> > > + if (*dpa_offset <= int128_get64(vmr->size)) {
> >
> > Off by one I think. <
> >
>
> Yes that makes sense, should be <. Derp derp.
>
> Though I think this may alludes to more off-by-one issues? This says
>
> if (dpa_offset < vmr->size)
>
> but dpa_offset should be (hpa - memory_region_base),
>
> The HPA is used by memory access routing for the whole system to determine
> what device it should access.
>
> If that corner case is being hit, doesn't it imply the higher level code
> is also susceptible to this, and is routing accesses to the wrong device?
I don't think so though I may be missing something.
Say vmr->size = 8
hpa dpa_offset
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 0
etc
Also the writes are turning up where I expect them to.
Also just noticed that the code is setting Memory_base in the CXL dvsec.
Given we are emulating a device as if it has been freshly powered up
those should not be set - it's the OS or firmware's job to set them up.
Harmless though, so can be a cleanup to follow the main series.
We don't currently handle dvsec range based routing anyway and
I'm not sure we ever will as it is a pain to test without some firmware
or OS code to program them for us.
Note that if you update your kernel to cxl/next it will currently fail
as the Range register emulation is (I think) rather over enthusiastic
and currently decides to emulate the HDM decoders for the QEMU emulated
type 3 devices.
https://lore.kernel.org/linux-cxl/167640366272.935665.1056268838301725481.stgit@dwillia2-xfh.jf.intel.com/T/#m6c025d5c9b27d8360a64079593f6c5adaa408772
Jonathan
>
> ~Gregory
next prev parent reply other threads:[~2023-02-20 11:46 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-31 16:38 [PATCH 0/2] hw/mem: CXL Type-3 Volatile Memory Support Jonathan Cameron
2023-01-31 16:38 ` Jonathan Cameron via
2023-01-31 16:38 ` [PATCH 1/2] tests/qtest/cxl-test: whitespace, line ending cleanup Jonathan Cameron
2023-01-31 16:38 ` Jonathan Cameron via
2023-01-31 16:08 ` Gregory Price
2023-01-31 16:38 ` [PATCH 2/2] hw/cxl: Multi-Region CXL Type-3 Devices (Volatile and Persistent) Jonathan Cameron
2023-01-31 16:38 ` Jonathan Cameron via
2023-01-31 16:25 ` Gregory Price
2023-02-14 18:15 ` Davidlohr Bueso
2023-02-16 18:42 ` Fan Ni
2023-02-17 16:16 ` Jonathan Cameron
2023-02-17 16:16 ` Jonathan Cameron via
2023-02-17 11:08 ` Gregory Price
2023-02-20 11:46 ` Jonathan Cameron [this message]
2023-02-20 11:46 ` Jonathan Cameron via
2023-02-24 0:29 ` Fan Ni
2023-02-24 12:01 ` Jonathan Cameron
2023-02-24 12:01 ` Jonathan Cameron via
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=20230220114646.000000ff@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=bwidawsk@kernel.org \
--cc=gourry.memverge@gmail.com \
--cc=gregory.price@memverge.com \
--cc=ira.weiny@intel.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=mike.maslenkin@gmail.com \
--cc=mst@redhat.com \
--cc=philmd@linaro.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.