qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Minwoo Im <minwoo.im.dev@gmail.com>
To: Klaus Jensen <its@irrelevant.dk>
Cc: Fam Zheng <fam@euphon.net>, Kevin Wolf <kwolf@redhat.com>,
	qemu-block@nongnu.org, Klaus Jensen <k.jensen@samsung.com>,
	qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Keith Busch <kbusch@kernel.org>
Subject: Re: [PATCH v2 02/12] hw/block/nvme: fix 64 bit register hi/lo split writes
Date: Mon, 18 Jan 2021 21:41:00 +0900	[thread overview]
Message-ID: <20210118124100.GB18718@localhost.localdomain> (raw)
In-Reply-To: <20210118094705.56772-3-its@irrelevant.dk>

On 21-01-18 10:46:55, Klaus Jensen wrote:
> From: Klaus Jensen <k.jensen@samsung.com>
> 
> 64 bit registers like ASQ and ACQ should be writable by both a hi/lo 32
> bit write combination as well as a plain 64 bit write. The spec does not
> define ordering on the hi/lo split, but the code currently assumes that
> the low order bits are written first. Additionally, the code does not
> consider that another address might already have been written into the
> register, causing the OR'ing to result in a bad address.
> 
> Fix this by explicitly overwriting only the low or high order bits for
> 32 bit writes.
> 
> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
> ---
>  hw/block/nvme.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/block/nvme.c b/hw/block/nvme.c
> index bd7e258c3c26..40b9f8ccfc0e 100644
> --- a/hw/block/nvme.c
> +++ b/hw/block/nvme.c
> @@ -3781,19 +3781,21 @@ static void nvme_write_bar(NvmeCtrl *n, hwaddr offset, uint64_t data,
>          trace_pci_nvme_mmio_aqattr(data & 0xffffffff);
>          break;
>      case 0x28:  /* ASQ */
> -        n->bar.asq = data;
> +        n->bar.asq = size == 8 ? data :
> +            (n->bar.asq & ~0xffffffff) | (data & 0xffffffff);
                             ^^^^^^^^^^^
If this one is to unmask lower 32bits other than higher 32bits, then
it should be:

	(n->bar.asq & ~0xffffffffULL)

Also, maybe we should take care of lower than 4bytes as:

	.min_access_size = 2,
	.max_access_size = 8,

Even we have some error messages up there with:

	if (unlikely(size < sizeof(uint32_t))) {
	    NVME_GUEST_ERR(pci_nvme_ub_mmiowr_toosmall,
			   "MMIO write smaller than 32-bits,"
			   " offset=0x%"PRIx64", size=%u",
			   offset, size);
	    /* should be ignored, fall through for now */
	}

It's a fall-thru error, and that's it.  I would prefer not to have this
error and support for 2bytes access also, OR do not support for 2bytes
access for this MMIO area.

Thanks!


  reply	other threads:[~2021-01-18 12:45 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-18  9:46 [PATCH v2 00/12] hw/block/nvme: misc cmb/pmr patches and bump to v1.4 Klaus Jensen
2021-01-18  9:46 ` [PATCH v2 01/12] hw/block/nvme: add size to mmio read/write trace events Klaus Jensen
2021-01-18 12:29   ` Minwoo Im
2021-01-18  9:46 ` [PATCH v2 02/12] hw/block/nvme: fix 64 bit register hi/lo split writes Klaus Jensen
2021-01-18 12:41   ` Minwoo Im [this message]
2021-01-18 12:53     ` Klaus Jensen
2021-01-18 12:59       ` Minwoo Im
2021-01-18 19:53         ` Klaus Jensen
2021-01-19  2:09           ` Minwoo Im
2021-01-19 18:58           ` Keith Busch
2021-01-18  9:46 ` [PATCH v2 03/12] hw/block/nvme: indicate CMB support through controller capabilities register Klaus Jensen
2021-01-18 12:42   ` Minwoo Im
2021-01-18  9:46 ` [PATCH v2 04/12] hw/block/nvme: move msix table and pba to BAR 0 Klaus Jensen
2021-01-18 12:48   ` Minwoo Im
2021-01-18  9:46 ` [PATCH v2 05/12] hw/block/nvme: allow cmb and pmr to coexist Klaus Jensen
2021-01-18 12:50   ` Minwoo Im
2021-01-18  9:46 ` [PATCH v2 06/12] hw/block/nvme: rename PMR/CMB shift/mask fields Klaus Jensen
2021-01-18 12:52   ` Minwoo Im
2021-01-18  9:47 ` [PATCH v2 07/12] hw/block/nvme: remove redundant zeroing of PMR registers Klaus Jensen
2021-01-18 12:55   ` Minwoo Im
2021-01-18 13:02     ` Klaus Jensen
2021-01-18  9:47 ` [PATCH v2 08/12] hw/block/nvme: disable PMR at boot up Klaus Jensen
2021-01-18  9:47 ` [PATCH v2 09/12] hw/block/nvme: add PMR RDS/WDS support Klaus Jensen
2021-01-18  9:47 ` [PATCH v2 10/12] hw/block/nvme: move cmb logic to v1.4 Klaus Jensen
2021-01-18 12:58   ` Minwoo Im
2021-01-18 13:04     ` Klaus Jensen
2021-01-18 13:09       ` Minwoo Im
2021-01-18 13:10         ` Klaus Jensen
2021-01-18 13:12           ` Minwoo Im
2021-01-18 13:22             ` Klaus Jensen
2021-01-18 19:23               ` Klaus Jensen
2021-01-19  2:11                 ` Minwoo Im
2021-01-18  9:47 ` [PATCH v2 11/12] hw/block/nvme: bump " Klaus Jensen
2021-01-18  9:47 ` [PATCH v2 12/12] hw/block/nvme: lift cmb restrictions Klaus Jensen

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=20210118124100.GB18718@localhost.localdomain \
    --to=minwoo.im.dev@gmail.com \
    --cc=fam@euphon.net \
    --cc=its@irrelevant.dk \
    --cc=k.jensen@samsung.com \
    --cc=kbusch@kernel.org \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).