All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: <qemu-devel@nongnu.org>, Fan Ni <fan.ni@samsung.com>,
	<linux-cxl@vger.kernel.org>, <linuxarm@huawei.com>,
	Anisa Su <anisa.su@samsung.com>
Subject: Re: [PATCH qemu 07/11] hw/cxl: mailbox-utils: 0x5602 - FMAPI Set DC Region Config
Date: Mon, 14 Jul 2025 15:15:12 +0100	[thread overview]
Message-ID: <20250714151512.00000a2a@huawei.com> (raw)
In-Reply-To: <20250714150218.00006c95@huawei.com>

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)
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: "Michael S. Tsirkin" <mst@redhat.com>
Cc: <qemu-devel@nongnu.org>, Fan Ni <fan.ni@samsung.com>,
	<linux-cxl@vger.kernel.org>, <linuxarm@huawei.com>,
	Anisa Su <anisa.su@samsung.com>
Subject: Re: [PATCH qemu 07/11] hw/cxl: mailbox-utils: 0x5602 - FMAPI Set DC Region Config
Date: Mon, 14 Jul 2025 15:15:12 +0100	[thread overview]
Message-ID: <20250714151512.00000a2a@huawei.com> (raw)
In-Reply-To: <20250714150218.00006c95@huawei.com>

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)
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 14:15 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 [this message]
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
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=20250714151512.00000a2a@huawei.com \
    --to=jonathan.cameron@huawei.com \
    --cc=anisa.su@samsung.com \
    --cc=fan.ni@samsung.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=mst@redhat.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.