All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
To: Anisa Su <anisa.su887@gmail.com>
Cc: Fan Ni <nifan.cxl@gmail.com>,
	"Michael S. Tsirkin" <mst@redhat.com>, <qemu-devel@nongnu.org>,
	<linux-cxl@vger.kernel.org>, <linuxarm@huawei.com>
Subject: Re: [PATCH qemu 07/11] hw/cxl: mailbox-utils: 0x5602 - FMAPI Set DC Region Config
Date: Mon, 14 Jul 2025 18:28:11 +0100	[thread overview]
Message-ID: <20250714182811.0000265c@huawei.com> (raw)
In-Reply-To: <aHU8huAwCLTh2sLx@deb-101020-bm01.eng.stellus.in>

On Mon, 14 Jul 2025 17:21:10 +0000
Anisa Su <anisa.su887@gmail.com> wrote:

> On Mon, Jul 14, 2025 at 06:02:26PM +0100, Jonathan Cameron wrote:
> > On Mon, 14 Jul 2025 09:45:31 -0700
> > Fan Ni <nifan.cxl@gmail.com> wrote:
> >   
> > > On Mon, Jul 14, 2025 at 03:16:38PM +0100, Jonathan Cameron wrote:  
> > > > On Mon, 14 Jul 2025 15:15:12 +0100
> > > > Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote:
> > > >     
> > > > > On Mon, 14 Jul 2025 15:02:18 +0100
> > > > > Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote:
> > > > >     
> > > > > > On Mon, 14 Jul 2025 05:32:19 -0400
> > > > > > "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > > > > >       
> > > > > > > On Wed, Jul 02, 2025 at 05:02:13PM +0100, Jonathan Cameron wrote:        
> > > > > > > > From: Anisa Su <anisa.su@samsung.com>
> > > > > > > > 
> > > > > > > > FM DCD Management command 0x5602 implemented per CXL r3.2 Spec Section 7.6.7.6.3
> > > > > > > > 
> > > > > > > > Reviewed-by: Fan Ni <fan.ni@samsung.com>
> > > > > > > > Signed-off-by: Anisa Su <anisa.su@samsung.com>
> > > > > > > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>        
> > > > > > 
> > > > > >       
> > > > > > > > diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c
> > > > > > > > index bf1710b251..1fc453f70d 100644
> > > > > > > > --- a/hw/cxl/cxl-mailbox-utils.c
> > > > > > > > +++ b/hw/cxl/cxl-mailbox-utils.c        
> > > > > >       
> > > > > > > > +/* CXL r3.2 section 7.6.7.6.3: Set Host DC Region Configuration (Opcode 5602) */
> > > > > > > > +static CXLRetCode cmd_fm_set_dc_region_config(const struct cxl_cmd *cmd,
> > > > > > > > +                                              uint8_t *payload_in,
> > > > > > > > +                                              size_t len_in,
> > > > > > > > +                                              uint8_t *payload_out,
> > > > > > > > +                                              size_t *len_out,
> > > > > > > > +                                              CXLCCI *cci)
> > > > > > > > +{
> > > > > > > > +    struct {
> > > > > > > > +        uint8_t reg_id;
> > > > > > > > +        uint8_t rsvd[3];
> > > > > > > > +        uint64_t block_sz;
> > > > > > > > +        uint8_t flags;
> > > > > > > > +        uint8_t rsvd2[3];
> > > > > > > > +    } QEMU_PACKED *in = (void *)payload_in;
> > > > > > > > +    CXLType3Dev *ct3d = CXL_TYPE3(cci->d);
> > > > > > > > +    CXLEventDynamicCapacity dcEvent = {};
> > > > > > > > +    CXLDCRegion *region = &ct3d->dc.regions[in->reg_id];
> > > > > > > > +
> > > > > > > > +    /*
> > > > > > > > +     * CXL r3.2 7.6.7.6.3: Set DC Region Configuration
> > > > > > > > +     * This command shall fail with Unsupported when the Sanitize on Release
> > > > > > > > +     * field does not match the region’s configuration... and the device
> > > > > > > > +     * does not support reconfiguration of the Sanitize on Release setting.
> > > > > > > > +     *
> > > > > > > > +     * Currently not reconfigurable, so always fail if sanitize bit (bit 0)
> > > > > > > > +     * doesn't match.
> > > > > > > > +     */
> > > > > > > > +    if ((in->flags & 0x1) != (region->flags & 0x1)) {
> > > > > > > > +        return CXL_MBOX_UNSUPPORTED;
> > > > > > > > +    }
> > > > > > > > +
> > > > > > > > +    if (in->reg_id >= DCD_MAX_NUM_REGION) {
> > > > > > > > +        return CXL_MBOX_UNSUPPORTED;
> > > > > > > > +    }
> > > > > > > > +
> > > > > > > > +    /* Check that no extents are in the region being reconfigured */
> > > > > > > > +    if (!bitmap_empty(region->blk_bitmap, region->len / region->block_size)) {
> > > > > > > > +        return CXL_MBOX_UNSUPPORTED;
> > > > > > > > +    }
> > > > > > > > +
> > > > > > > > +    /* Check that new block size is supported */
> > > > > > > > +    if (!test_bit(BIT((int) log2(in->block_sz)),
> > > > > > > > +                  &region->supported_blk_size_bitmask)) {
> > > > > > > > +        return CXL_MBOX_INVALID_INPUT;
> > > > > > > > +    }          
> > > > > > > 
> > > > > > > This does not work: test_bit works on unsigned long, while
> > > > > > > supported_blk_size_bitmask is uint64_t.
> > > > > > > 
> > > > > > > Why so funky? what is wrong with:
> > > > > > > 
> > > > > > > if (!(BIT_ULL(log2(in->block_sz)) & region->supported_blk_size_bitmask))
> > > > > > > 
> > > > > > > And BTW why cast to int here?        
> > > > > This became obvious when your suggestion didn't build :(
> > > > > 
> > > > > ./../hw/cxl/cxl-mailbox-utils.c: In function ‘cmd_fm_set_dc_region_config’:
> > > > > /home/jic23/src/qemu/include/qemu/bitops.h:25:39: error: invalid operands to binary << (have ‘long long unsigned int’ and ‘double’)
> > > > >    25 | #define BIT_ULL(nr)             (1ULL << (nr))
> > > > >       |                                       ^~ ~~~~
> > > > > ../../hw/cxl/cxl-mailbox-utils.c:3436:11: note: in expansion of macro ‘BIT_ULL’
> > > > >  3436 |     if (!(BIT_ULL(log2(in->block_sz)) & region->supported_blk_size_bitmask)) {
> > > > >       |           ^~~~~~~
> > > > > 
> > > > > Now I look again, this is effectively 2**(log_2(x)) or x. So
> > > > > if (in->block_sz & region->supporte_blk_size_bitmask)    
> > > > 
> > > > it (!(in->block_sz & region->supports_blk_size_bitmask))
> > > > 
> > > > I mean.    
> > > 
> > > Make sense to me. 
> > > 
> > > The only thing is how to detect the violation if the passed in block_sz
> > > is not power of 2.
> > > Or who will do the check if not in qemu?  
> > Hi Fan,
> > 
> > I checked the spec on this.  There isn't an explicit statement that the device
> > should return an error on this. Looks to be impdef. I'd happily see such
> > a check as a usability improvement though!
> > 
> > I'm just not set up to test this right now so decided to be
> > risk averse and not trying adding one. 
> > 
> > If you want to send a patch on top I'd be happy to add it.
> > 
> > Jonathan
> > 
> >   
> Would something like this work?
> 
> /* Check that new block size is supported */
> if (!is_power_of_2(in->block_sz) ||
>     !(in->block_sz & region->supported_blk_size_bitmask)) {
>     return CXL_MBOX_INVALID_INPUT;
> }
> 
> I did not have to add any extra headers to use this helper function in
> include/qemu/host-utils.h and it compiles for me.
Nice.  I knew I was too tired today!

I'll roll that in as seems safe enough.
V2 coming shortly.

J
> 
> Anisa
> >   
> > > 
> > > Fan
> > >   
> > > > 
> > > >     
> > > > > Should work as long as we know block_size is a power of 2 (which the specification
> > > > > says it must be).
> > > > > 
> > > > > Anisa?
> > > > >     
> > > > > > 
> > > > > > Change looks fine to me, so I'll prepare an updated set with this
> > > > > > and the missing semi colon.  Anisa if you can have a look at this
> > > > > > that would be great. 
> > > > > > 
> > > > > > Sorry I seem to have missed Anisa off the cc for this!
> > > > > > 
> > > > > > Jonathan
> > > > > >       
> > > > >     
> > > >     
> > >   
> >   
> 
> 


WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron via <qemu-devel@nongnu.org>
To: Anisa Su <anisa.su887@gmail.com>
Cc: Fan Ni <nifan.cxl@gmail.com>,
	"Michael S. Tsirkin" <mst@redhat.com>, <qemu-devel@nongnu.org>,
	<linux-cxl@vger.kernel.org>, <linuxarm@huawei.com>
Subject: Re: [PATCH qemu 07/11] hw/cxl: mailbox-utils: 0x5602 - FMAPI Set DC Region Config
Date: Mon, 14 Jul 2025 18:28:11 +0100	[thread overview]
Message-ID: <20250714182811.0000265c@huawei.com> (raw)
In-Reply-To: <aHU8huAwCLTh2sLx@deb-101020-bm01.eng.stellus.in>

On Mon, 14 Jul 2025 17:21:10 +0000
Anisa Su <anisa.su887@gmail.com> wrote:

> On Mon, Jul 14, 2025 at 06:02:26PM +0100, Jonathan Cameron wrote:
> > On Mon, 14 Jul 2025 09:45:31 -0700
> > Fan Ni <nifan.cxl@gmail.com> wrote:
> >   
> > > On Mon, Jul 14, 2025 at 03:16:38PM +0100, Jonathan Cameron wrote:  
> > > > On Mon, 14 Jul 2025 15:15:12 +0100
> > > > Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote:
> > > >     
> > > > > On Mon, 14 Jul 2025 15:02:18 +0100
> > > > > Jonathan Cameron <Jonathan.Cameron@huawei.com> wrote:
> > > > >     
> > > > > > On Mon, 14 Jul 2025 05:32:19 -0400
> > > > > > "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > > > > >       
> > > > > > > On Wed, Jul 02, 2025 at 05:02:13PM +0100, Jonathan Cameron wrote:        
> > > > > > > > From: Anisa Su <anisa.su@samsung.com>
> > > > > > > > 
> > > > > > > > FM DCD Management command 0x5602 implemented per CXL r3.2 Spec Section 7.6.7.6.3
> > > > > > > > 
> > > > > > > > Reviewed-by: Fan Ni <fan.ni@samsung.com>
> > > > > > > > Signed-off-by: Anisa Su <anisa.su@samsung.com>
> > > > > > > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>        
> > > > > > 
> > > > > >       
> > > > > > > > diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c
> > > > > > > > index bf1710b251..1fc453f70d 100644
> > > > > > > > --- a/hw/cxl/cxl-mailbox-utils.c
> > > > > > > > +++ b/hw/cxl/cxl-mailbox-utils.c        
> > > > > >       
> > > > > > > > +/* CXL r3.2 section 7.6.7.6.3: Set Host DC Region Configuration (Opcode 5602) */
> > > > > > > > +static CXLRetCode cmd_fm_set_dc_region_config(const struct cxl_cmd *cmd,
> > > > > > > > +                                              uint8_t *payload_in,
> > > > > > > > +                                              size_t len_in,
> > > > > > > > +                                              uint8_t *payload_out,
> > > > > > > > +                                              size_t *len_out,
> > > > > > > > +                                              CXLCCI *cci)
> > > > > > > > +{
> > > > > > > > +    struct {
> > > > > > > > +        uint8_t reg_id;
> > > > > > > > +        uint8_t rsvd[3];
> > > > > > > > +        uint64_t block_sz;
> > > > > > > > +        uint8_t flags;
> > > > > > > > +        uint8_t rsvd2[3];
> > > > > > > > +    } QEMU_PACKED *in = (void *)payload_in;
> > > > > > > > +    CXLType3Dev *ct3d = CXL_TYPE3(cci->d);
> > > > > > > > +    CXLEventDynamicCapacity dcEvent = {};
> > > > > > > > +    CXLDCRegion *region = &ct3d->dc.regions[in->reg_id];
> > > > > > > > +
> > > > > > > > +    /*
> > > > > > > > +     * CXL r3.2 7.6.7.6.3: Set DC Region Configuration
> > > > > > > > +     * This command shall fail with Unsupported when the Sanitize on Release
> > > > > > > > +     * field does not match the region’s configuration... and the device
> > > > > > > > +     * does not support reconfiguration of the Sanitize on Release setting.
> > > > > > > > +     *
> > > > > > > > +     * Currently not reconfigurable, so always fail if sanitize bit (bit 0)
> > > > > > > > +     * doesn't match.
> > > > > > > > +     */
> > > > > > > > +    if ((in->flags & 0x1) != (region->flags & 0x1)) {
> > > > > > > > +        return CXL_MBOX_UNSUPPORTED;
> > > > > > > > +    }
> > > > > > > > +
> > > > > > > > +    if (in->reg_id >= DCD_MAX_NUM_REGION) {
> > > > > > > > +        return CXL_MBOX_UNSUPPORTED;
> > > > > > > > +    }
> > > > > > > > +
> > > > > > > > +    /* Check that no extents are in the region being reconfigured */
> > > > > > > > +    if (!bitmap_empty(region->blk_bitmap, region->len / region->block_size)) {
> > > > > > > > +        return CXL_MBOX_UNSUPPORTED;
> > > > > > > > +    }
> > > > > > > > +
> > > > > > > > +    /* Check that new block size is supported */
> > > > > > > > +    if (!test_bit(BIT((int) log2(in->block_sz)),
> > > > > > > > +                  &region->supported_blk_size_bitmask)) {
> > > > > > > > +        return CXL_MBOX_INVALID_INPUT;
> > > > > > > > +    }          
> > > > > > > 
> > > > > > > This does not work: test_bit works on unsigned long, while
> > > > > > > supported_blk_size_bitmask is uint64_t.
> > > > > > > 
> > > > > > > Why so funky? what is wrong with:
> > > > > > > 
> > > > > > > if (!(BIT_ULL(log2(in->block_sz)) & region->supported_blk_size_bitmask))
> > > > > > > 
> > > > > > > And BTW why cast to int here?        
> > > > > This became obvious when your suggestion didn't build :(
> > > > > 
> > > > > ./../hw/cxl/cxl-mailbox-utils.c: In function ‘cmd_fm_set_dc_region_config’:
> > > > > /home/jic23/src/qemu/include/qemu/bitops.h:25:39: error: invalid operands to binary << (have ‘long long unsigned int’ and ‘double’)
> > > > >    25 | #define BIT_ULL(nr)             (1ULL << (nr))
> > > > >       |                                       ^~ ~~~~
> > > > > ../../hw/cxl/cxl-mailbox-utils.c:3436:11: note: in expansion of macro ‘BIT_ULL’
> > > > >  3436 |     if (!(BIT_ULL(log2(in->block_sz)) & region->supported_blk_size_bitmask)) {
> > > > >       |           ^~~~~~~
> > > > > 
> > > > > Now I look again, this is effectively 2**(log_2(x)) or x. So
> > > > > if (in->block_sz & region->supporte_blk_size_bitmask)    
> > > > 
> > > > it (!(in->block_sz & region->supports_blk_size_bitmask))
> > > > 
> > > > I mean.    
> > > 
> > > Make sense to me. 
> > > 
> > > The only thing is how to detect the violation if the passed in block_sz
> > > is not power of 2.
> > > Or who will do the check if not in qemu?  
> > Hi Fan,
> > 
> > I checked the spec on this.  There isn't an explicit statement that the device
> > should return an error on this. Looks to be impdef. I'd happily see such
> > a check as a usability improvement though!
> > 
> > I'm just not set up to test this right now so decided to be
> > risk averse and not trying adding one. 
> > 
> > If you want to send a patch on top I'd be happy to add it.
> > 
> > Jonathan
> > 
> >   
> Would something like this work?
> 
> /* Check that new block size is supported */
> if (!is_power_of_2(in->block_sz) ||
>     !(in->block_sz & region->supported_blk_size_bitmask)) {
>     return CXL_MBOX_INVALID_INPUT;
> }
> 
> I did not have to add any extra headers to use this helper function in
> include/qemu/host-utils.h and it compiles for me.
Nice.  I knew I was too tired today!

I'll roll that in as seems safe enough.
V2 coming shortly.

J
> 
> Anisa
> >   
> > > 
> > > Fan
> > >   
> > > > 
> > > >     
> > > > > Should work as long as we know block_size is a power of 2 (which the specification
> > > > > says it must be).
> > > > > 
> > > > > Anisa?
> > > > >     
> > > > > > 
> > > > > > Change looks fine to me, so I'll prepare an updated set with this
> > > > > > and the missing semi colon.  Anisa if you can have a look at this
> > > > > > that would be great. 
> > > > > > 
> > > > > > Sorry I seem to have missed Anisa off the cc for this!
> > > > > > 
> > > > > > Jonathan
> > > > > >       
> > > > >     
> > > >     
> > >   
> >   
> 
> 



  reply	other threads:[~2025-07-14 17:28 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-02 16:02 [PATCH qemu 00/11] hw/cxl: DCD Fabric Management Command Set (for 10.1) Jonathan Cameron
2025-07-02 16:02 ` Jonathan Cameron via
2025-07-02 16:02 ` [PATCH qemu 01/11] hw/cxl: fix DC extent capacity tracking Jonathan Cameron
2025-07-02 16:02   ` Jonathan Cameron via
2025-07-02 16:02 ` [PATCH qemu 02/11] hw/cxl: mailbox-utils: 0x5600 - FMAPI Get DCD Info Jonathan Cameron
2025-07-02 16:02   ` Jonathan Cameron via
2025-07-02 16:02 ` [PATCH qemu 03/11] hw/mem: cxl_type3: Add dsmas_flags to CXLDCRegion struct Jonathan Cameron
2025-07-02 16:02   ` Jonathan Cameron via
2025-07-02 16:02 ` [PATCH qemu 04/11] hw/cxl: mailbox-utils: 0x5601 - FMAPI Get Host Region Config Jonathan Cameron
2025-07-02 16:02   ` Jonathan Cameron via
2025-07-02 16:02 ` [PATCH qemu 05/11] hw/cxl: Move definition for dynamic_capacity_uuid and enum for DC event types to header Jonathan Cameron
2025-07-02 16:02   ` Jonathan Cameron via
2025-07-02 16:02 ` [PATCH qemu 06/11] hw/mem: cxl_type3: Add DC Region bitmap lock Jonathan Cameron
2025-07-02 16:02   ` Jonathan Cameron via
2025-07-02 16:02 ` [PATCH qemu 07/11] hw/cxl: mailbox-utils: 0x5602 - FMAPI Set DC Region Config Jonathan Cameron
2025-07-02 16:02   ` Jonathan Cameron via
2025-07-14  9:32   ` Michael S. Tsirkin
2025-07-14 14:02     ` Jonathan Cameron
2025-07-14 14:02       ` Jonathan Cameron via
2025-07-14 14:15       ` Jonathan Cameron
2025-07-14 14:15         ` Jonathan Cameron via
2025-07-14 14:16         ` Jonathan Cameron
2025-07-14 14:16           ` Jonathan Cameron via
2025-07-14 16:45           ` Fan Ni
2025-07-14 17:02             ` Jonathan Cameron
2025-07-14 17:02               ` Jonathan Cameron via
2025-07-14 17:21               ` Anisa Su
2025-07-14 17:28                 ` Jonathan Cameron [this message]
2025-07-14 17:28                   ` Jonathan Cameron via
2025-07-02 16:02 ` [PATCH qemu 08/11] hw/cxl: mailbox-utils: 0x5603 - FMAPI Get DC Region Extent Lists Jonathan Cameron
2025-07-02 16:02   ` Jonathan Cameron via
2025-07-02 16:02 ` [PATCH qemu 09/11] hw/cxl: Create helper function to create DC Event Records from extents Jonathan Cameron
2025-07-02 16:02   ` Jonathan Cameron via
2025-07-03 16:21   ` Fan Ni
2025-07-02 16:02 ` [PATCH qemu 10/11] hw/cxl: mailbox-utils: 0x5604 - FMAPI Initiate DC Add Jonathan Cameron
2025-07-02 16:02   ` Jonathan Cameron via
2025-07-03 16:23   ` Fan Ni
2025-07-04  8:12     ` Jonathan Cameron
2025-07-04  8:12       ` Jonathan Cameron via
2025-07-02 16:02 ` [PATCH qemu 11/11] hw/cxl: mailbox-utils: 0x5605 - FMAPI Initiate DC Release Jonathan Cameron
2025-07-02 16:02   ` Jonathan Cameron via
2025-07-03 16:24   ` Fan Ni

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=20250714182811.0000265c@huawei.com \
    --to=jonathan.cameron@huawei.com \
    --cc=anisa.su887@gmail.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=mst@redhat.com \
    --cc=nifan.cxl@gmail.com \
    --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.