All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: zhenwei pi <pizhenwei@bytedance.com>,
	kbusch@kernel.org, its@irrelevant.dk, kwolf@redhat.com,
	mreitz@redhat.com
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org
Subject: Re: [PATCH v3 3/4] hw/block/nvme: add smart_critical_warning property
Date: Thu, 14 Jan 2021 16:55:32 +0100	[thread overview]
Message-ID: <4d38ab86-cd88-8c51-d15f-1117db8c3d10@redhat.com> (raw)
In-Reply-To: <20210114072251.334304-4-pizhenwei@bytedance.com>

On 1/14/21 8:22 AM, zhenwei pi wrote:
> There is a very low probability that hitting physical NVMe disk
> hardware critical warning case, it's hard to write & test a monitor
> agent service.
> 
> For debugging purposes, add a new 'smart_critical_warning' property
> to emulate this situation.
> 
> The orignal version of this change is implemented by adding a fixed
> property which could be initialized by QEMU command line. Suggested
> by Philippe & Klaus, rework like current version.
> 
> Test with this patch:
> 1, change smart_critical_warning property for a running VM:
>  #virsh qemu-monitor-command nvme-upstream '{ "execute": "qom-set",
>   "arguments": { "path": "/machine/peripheral-anon/device[0]",
>   "property": "smart_critical_warning", "value":16 } }'
> 2, run smartctl in guest
>  #smartctl -H -l error /dev/nvme0n1
> 
>   === START OF SMART DATA SECTION ===
>   SMART overall-health self-assessment test result: FAILED!
>   - volatile memory backup device has failed
> 
> Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
> ---
>  hw/block/nvme.c | 40 ++++++++++++++++++++++++++++++++++++++++
>  hw/block/nvme.h |  1 +
>  2 files changed, 41 insertions(+)
...

> +static void nvme_set_smart_warning(Object *obj, Visitor *v, const char *name,
> +                                   void *opaque, Error **errp)
> +{
> +    NvmeCtrl *s = NVME(obj);
> +    uint8_t value, cap = 0;
> +    uint64_t pmr_cap = CAP_PMR_MASK;
> +
> +    if (!visit_type_uint8(v, name, &value, errp)) {
> +        return;
> +    }
> +
> +    cap = NVME_SMART_SPARE | NVME_SMART_TEMPERATURE | NVME_SMART_RELIABILITY
> +          | NVME_SMART_MEDIA_READ_ONLY | NVME_SMART_FAILED_VOLATILE_MEDIA;
> +    if (s->bar.cap & (pmr_cap << CAP_PMR_SHIFT)) {
> +        cap |= NVME_SMART_PMR_UNRELIABLE;
> +    }
> +
> +    if ((value & cap) != value) {
> +        error_setg(errp, "unsupported smart critical warning value");

More useful:

           error_setg(errp,
                      "unsupported smart critical warning bits: 0x%x",
                      value & ~cap);

Regardless:
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Thanks!



  parent reply	other threads:[~2021-01-14 16:29 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-14  7:22 [PATCH v3 0/4] support NVMe smart critial warning injection zhenwei pi
2021-01-14  7:22 ` [PATCH v3 1/4] block/nvme: introduce bit 5 for critical warning zhenwei pi
2021-01-14  7:22 ` [PATCH v3 2/4] hw/block/nvme: fix overwritten bar.cap zhenwei pi
2021-01-14  8:24   ` Klaus Jensen
2021-01-14  7:22 ` [PATCH v3 3/4] hw/block/nvme: add smart_critical_warning property zhenwei pi
2021-01-14  8:29   ` Klaus Jensen
2021-01-14 15:55   ` Philippe Mathieu-Daudé [this message]
2021-01-14 22:23   ` Keith Busch
2021-01-14  7:22 ` [PATCH v3 4/4] hw/blocl/nvme: trigger async event during injecting smart warning zhenwei pi
2021-01-14  8:23   ` Klaus Jensen
2021-01-14 15:57   ` Philippe Mathieu-Daudé
2021-01-14 22:29   ` Keith Busch

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=4d38ab86-cd88-8c51-d15f-1117db8c3d10@redhat.com \
    --to=philmd@redhat.com \
    --cc=its@irrelevant.dk \
    --cc=kbusch@kernel.org \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pizhenwei@bytedance.com \
    --cc=qemu-block@nongnu.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.