From: Igor Mammedov <imammedo@redhat.com>
To: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Cc: pbonzini@redhat.com, gleb@kernel.org, mtosatti@redhat.com,
stefanha@redhat.com, mst@redhat.com, rth@twiddle.net,
ehabkost@redhat.com, dan.j.williams@intel.com,
kvm@vger.kernel.org, qemu-devel@nongnu.org
Subject: Re: [PATCH v4 2/3] nvdimm acpi: introduce _FIT
Date: Thu, 3 Nov 2016 18:54:37 +0100 [thread overview]
Message-ID: <20161103185437.2d423716@Igors-MacBook-Pro.local> (raw)
In-Reply-To: <e73661ae-9432-1faa-ba1b-f7b8b2d4820f@linux.intel.com>
On Fri, 4 Nov 2016 01:39:31 +0800
Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
>
>
> On 11/04/2016 01:29 AM, Igor Mammedov wrote:
> > On Fri, 4 Nov 2016 00:53:06 +0800
> > Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
> >
> >>
> >>
> >> On 11/04/2016 12:49 AM, Igor Mammedov wrote:
> >>> On Fri, 4 Nov 2016 00:17:00 +0800
> >>> Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
> >>>
> >>>>
> >>>>
> >>>> On 11/04/2016 12:13 AM, Igor Mammedov wrote:
> >>>>> On Thu, 3 Nov 2016 22:53:43 +0800
> >>>>> Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
> >>>>>
> >>>>>>
> >>>>>>
> >>>>>> On 11/03/2016 10:49 PM, Igor Mammedov wrote:
> >>>>>>> On Thu, 3 Nov 2016 21:02:22 +0800
> >>>>>>> Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
> >>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On 11/03/2016 09:00 PM, Igor Mammedov wrote:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>>>> just drop this and describe properly 'len' in spec section
> >>>>>>>>>>> i.e. len: length of entire returned data (including the
> >>>>>>>>>>> header)
> >>>>>>>>>>
> >>>>>>>>>> Okay, i will change the spec like this:
> >>>>>>>>>>
> >>>>>>>>>> QEMU Writes Output Data (based on the offset in the
> >>>>>>>>>> page): [0x0 - 0x3]: 4 bytes, length of entire returned data
> >>>>>>>>>> (including the header)
> >>>>>>>>>>
> >>>>>>>>>> And drop the length field in Read_Fit return buffer, doc
> >>>>>>>>>> the fit buffer like this:
> >>>>>>>>>>
> >>>>>>>>>> +----------+--------+--------+-------------------------------------------+
> >>>>>>>>>> | Field | Length | Offset |
> >>>>>>>>>> Description |
> >>>>>>>>>> +----------+--------+--------+-------------------------------------------+
> >>>>>>>>> you need to add length here, otherwise this table is not
> >>>>>>>>> correct
> >>>>>>>>
> >>>>>>>> Ah, so i am confused.
> >>>>>>>>
> >>>>>>>> struct NvdimmFuncReadFITOut definition is based on the layout
> >>>>>>>> of Read_FI output. You suggested to drop the length filed in
> >>>>>>>> NvdimmFuncReadFITOut but keep it in the layout, it is not
> >>>>>>>> consistent.
> >>>>>>>>
> >>>>>>>> I missed something?
> >>>>>>>
> >>>>>>> +struct NvdimmFuncReadFITOut {
> >>>>>>> + /* the size of buffer filled by QEMU. */
> >>>>>>> + uint32_t len;
> >>>>>>> + uint32_t func_ret_status; /* return status code. */
> >>>>>>> + uint8_t fit[0]; /* the FIT data. */
> >>>>>>> +} QEMU_PACKED;
> >>>>>>>
> >>>>>>> --------------------------------
> >>>>>>> | field | len | off | desc...
> >>>>>>> --------------------------------
> >>>>>>> | length | 4 | 0 | ....
> >>>>>>> --------------------------------
> >>>>>>> | status | 4 | 4 | ....
> >>>>>>> --------------------------------
> >>>>>>> | fit data | ................
> >>>>>>>
> >>>>>>> i.e. you were forgetting to add length in spec so offsets were
> >>>>>>> wrong even for described fields.
> >>>>>>
> >>>>>>
> >>>>>> We can not do this.
> >>>>>>
> >>>>>> @len is used by QEMU emulation to count the size of the buffer
> >>>>>> that _DSM should return. It's only used in NVDIMM_COMMON_DSM
> >>>>>> method which is shared by the DSM method from VM and Read_Fit.
> >>>>> spec describes buffer layout independently from AML that uses it,
> >>>>> so it should describe whole data structure.
> >>>>>
> >>>>> Then it's upto guest how to read this data, it could be QEMU
> >>>>> generated AML (as it's here) or some other driver or even BIOS.
> >>>>
> >>>> However, what we are talking about is Read_FIT method, so this is
> >>>> the layout of Read_FIT output rather than all memory in the dsm
> >>>> page.
> >>>>
> >>>> Actually, in the spec we already have documented the common len
> >>>> field:
> >>>>
> >>>> QEMU Writes Output Data (based on the offset in the page):
> >>>> [0x0 - 0x3]: 4 bytes, the length of result
> >>>> [0x4 - 0xFFF]: 4092 bytes, the DSM result filled by QEMU
> >>>>
> >>>> Also, i really do not hope to use this field to count the buffer
> >>>> size returned by Read_FIT, we'd try the best to reuse existing DSM
> >>>> method (NVDIMM_COMMON_DSM), i.e, treat Read_FIT as normal DSM
> >>>> method.
> >>> buffer layout describes interface between QEMU and firmware (AML)
> >>> and it should describe it completely every time to avoid confusion.
> >>>
> >>> See for example ACPI spec, NFIT table, SRAT table, ...
> >>> all table descriptions start with complete header.
> >>
> >> Okay. Understood. :)
> >>
> >>>
> >>> If you skip length it rises question how much fit data are there,
> >>> meaning interface description isn't complete.
> >>
> >> So how about introduce a length field in the output buffer just
> >> as this patch did? I understand we are able to count the size
> >> from dsm len, however, it can simplify the code a lot...
> > it's redundant as there already is length for whole buffer,
> > interface should be kept as simple as possible and not include
> > redundant data for convenience.
>
> Okay.
>
> So the doc should be changed to:
>
> Output layout in the dsm memory page:
>
> +----------+--------+--------+-------------------------------------------+
> | Field | Length | Offset | Description |
> +----------+--------+--------+-------------------------------------------+
> | length | 4 | 4 | length of entire returned data |
> | | | | (including the header) |
wrong offset
> +----------+-----------------+-------------------------------------------+
> | | | | return status codes |
> | | | | 0x100 - error caused by NFIT update while |
> | status | 4 | 4 | read by _FIT wasn't completed, other |
> | | | | codes follow Chapter 3 in DSM Spec Rev1 |
it wouldn't be bad to specify success status code here too.
> +----------+--------+--------+-------------------------------------------+
> | fit data | Varies | 8 | FIT data, the remaining size is used by |
> | | | | fit data if status is success; |
> | | | | otherwise it is not valid |
> +----------+--------+--------+-------------------------------------------+
contains FIT data, this field is present if status field is [concrete number here]
>
> As you know, i am not good at doc, any suggestion is welcome. :)
>
>
WARNING: multiple messages have this Message-ID (diff)
From: Igor Mammedov <imammedo@redhat.com>
To: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Cc: pbonzini@redhat.com, gleb@kernel.org, mtosatti@redhat.com,
stefanha@redhat.com, mst@redhat.com, rth@twiddle.net,
ehabkost@redhat.com, dan.j.williams@intel.com,
kvm@vger.kernel.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v4 2/3] nvdimm acpi: introduce _FIT
Date: Thu, 3 Nov 2016 18:54:37 +0100 [thread overview]
Message-ID: <20161103185437.2d423716@Igors-MacBook-Pro.local> (raw)
In-Reply-To: <e73661ae-9432-1faa-ba1b-f7b8b2d4820f@linux.intel.com>
On Fri, 4 Nov 2016 01:39:31 +0800
Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
>
>
> On 11/04/2016 01:29 AM, Igor Mammedov wrote:
> > On Fri, 4 Nov 2016 00:53:06 +0800
> > Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
> >
> >>
> >>
> >> On 11/04/2016 12:49 AM, Igor Mammedov wrote:
> >>> On Fri, 4 Nov 2016 00:17:00 +0800
> >>> Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
> >>>
> >>>>
> >>>>
> >>>> On 11/04/2016 12:13 AM, Igor Mammedov wrote:
> >>>>> On Thu, 3 Nov 2016 22:53:43 +0800
> >>>>> Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
> >>>>>
> >>>>>>
> >>>>>>
> >>>>>> On 11/03/2016 10:49 PM, Igor Mammedov wrote:
> >>>>>>> On Thu, 3 Nov 2016 21:02:22 +0800
> >>>>>>> Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
> >>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On 11/03/2016 09:00 PM, Igor Mammedov wrote:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>>>> just drop this and describe properly 'len' in spec section
> >>>>>>>>>>> i.e. len: length of entire returned data (including the
> >>>>>>>>>>> header)
> >>>>>>>>>>
> >>>>>>>>>> Okay, i will change the spec like this:
> >>>>>>>>>>
> >>>>>>>>>> QEMU Writes Output Data (based on the offset in the
> >>>>>>>>>> page): [0x0 - 0x3]: 4 bytes, length of entire returned data
> >>>>>>>>>> (including the header)
> >>>>>>>>>>
> >>>>>>>>>> And drop the length field in Read_Fit return buffer, doc
> >>>>>>>>>> the fit buffer like this:
> >>>>>>>>>>
> >>>>>>>>>> +----------+--------+--------+-------------------------------------------+
> >>>>>>>>>> | Field | Length | Offset |
> >>>>>>>>>> Description |
> >>>>>>>>>> +----------+--------+--------+-------------------------------------------+
> >>>>>>>>> you need to add length here, otherwise this table is not
> >>>>>>>>> correct
> >>>>>>>>
> >>>>>>>> Ah, so i am confused.
> >>>>>>>>
> >>>>>>>> struct NvdimmFuncReadFITOut definition is based on the layout
> >>>>>>>> of Read_FI output. You suggested to drop the length filed in
> >>>>>>>> NvdimmFuncReadFITOut but keep it in the layout, it is not
> >>>>>>>> consistent.
> >>>>>>>>
> >>>>>>>> I missed something?
> >>>>>>>
> >>>>>>> +struct NvdimmFuncReadFITOut {
> >>>>>>> + /* the size of buffer filled by QEMU. */
> >>>>>>> + uint32_t len;
> >>>>>>> + uint32_t func_ret_status; /* return status code. */
> >>>>>>> + uint8_t fit[0]; /* the FIT data. */
> >>>>>>> +} QEMU_PACKED;
> >>>>>>>
> >>>>>>> --------------------------------
> >>>>>>> | field | len | off | desc...
> >>>>>>> --------------------------------
> >>>>>>> | length | 4 | 0 | ....
> >>>>>>> --------------------------------
> >>>>>>> | status | 4 | 4 | ....
> >>>>>>> --------------------------------
> >>>>>>> | fit data | ................
> >>>>>>>
> >>>>>>> i.e. you were forgetting to add length in spec so offsets were
> >>>>>>> wrong even for described fields.
> >>>>>>
> >>>>>>
> >>>>>> We can not do this.
> >>>>>>
> >>>>>> @len is used by QEMU emulation to count the size of the buffer
> >>>>>> that _DSM should return. It's only used in NVDIMM_COMMON_DSM
> >>>>>> method which is shared by the DSM method from VM and Read_Fit.
> >>>>> spec describes buffer layout independently from AML that uses it,
> >>>>> so it should describe whole data structure.
> >>>>>
> >>>>> Then it's upto guest how to read this data, it could be QEMU
> >>>>> generated AML (as it's here) or some other driver or even BIOS.
> >>>>
> >>>> However, what we are talking about is Read_FIT method, so this is
> >>>> the layout of Read_FIT output rather than all memory in the dsm
> >>>> page.
> >>>>
> >>>> Actually, in the spec we already have documented the common len
> >>>> field:
> >>>>
> >>>> QEMU Writes Output Data (based on the offset in the page):
> >>>> [0x0 - 0x3]: 4 bytes, the length of result
> >>>> [0x4 - 0xFFF]: 4092 bytes, the DSM result filled by QEMU
> >>>>
> >>>> Also, i really do not hope to use this field to count the buffer
> >>>> size returned by Read_FIT, we'd try the best to reuse existing DSM
> >>>> method (NVDIMM_COMMON_DSM), i.e, treat Read_FIT as normal DSM
> >>>> method.
> >>> buffer layout describes interface between QEMU and firmware (AML)
> >>> and it should describe it completely every time to avoid confusion.
> >>>
> >>> See for example ACPI spec, NFIT table, SRAT table, ...
> >>> all table descriptions start with complete header.
> >>
> >> Okay. Understood. :)
> >>
> >>>
> >>> If you skip length it rises question how much fit data are there,
> >>> meaning interface description isn't complete.
> >>
> >> So how about introduce a length field in the output buffer just
> >> as this patch did? I understand we are able to count the size
> >> from dsm len, however, it can simplify the code a lot...
> > it's redundant as there already is length for whole buffer,
> > interface should be kept as simple as possible and not include
> > redundant data for convenience.
>
> Okay.
>
> So the doc should be changed to:
>
> Output layout in the dsm memory page:
>
> +----------+--------+--------+-------------------------------------------+
> | Field | Length | Offset | Description |
> +----------+--------+--------+-------------------------------------------+
> | length | 4 | 4 | length of entire returned data |
> | | | | (including the header) |
wrong offset
> +----------+-----------------+-------------------------------------------+
> | | | | return status codes |
> | | | | 0x100 - error caused by NFIT update while |
> | status | 4 | 4 | read by _FIT wasn't completed, other |
> | | | | codes follow Chapter 3 in DSM Spec Rev1 |
it wouldn't be bad to specify success status code here too.
> +----------+--------+--------+-------------------------------------------+
> | fit data | Varies | 8 | FIT data, the remaining size is used by |
> | | | | fit data if status is success; |
> | | | | otherwise it is not valid |
> +----------+--------+--------+-------------------------------------------+
contains FIT data, this field is present if status field is [concrete number here]
>
> As you know, i am not good at doc, any suggestion is welcome. :)
>
>
next prev parent reply other threads:[~2016-11-03 17:54 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-03 3:51 [PATCH v4 0/3] nvdimm: hotplug support Xiao Guangrong
2016-11-03 3:51 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 3:51 ` [PATCH v4 1/3] nvdimm acpi: introduce fit buffer Xiao Guangrong
2016-11-03 3:51 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 10:00 ` Stefan Hajnoczi
2016-11-03 10:00 ` [Qemu-devel] " Stefan Hajnoczi
2016-11-03 9:58 ` Xiao Guangrong
2016-11-03 9:58 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 11:02 ` Igor Mammedov
2016-11-03 11:02 ` [Qemu-devel] " Igor Mammedov
2016-11-03 11:09 ` Xiao Guangrong
2016-11-03 11:09 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 12:29 ` Igor Mammedov
2016-11-03 12:29 ` [Qemu-devel] " Igor Mammedov
2016-11-03 3:51 ` [PATCH v4 2/3] nvdimm acpi: introduce _FIT Xiao Guangrong
2016-11-03 3:51 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 9:53 ` Stefan Hajnoczi
2016-11-03 9:53 ` [Qemu-devel] " Stefan Hajnoczi
2016-11-03 10:08 ` Xiao Guangrong
2016-11-03 10:08 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 12:30 ` Igor Mammedov
2016-11-03 12:30 ` [Qemu-devel] " Igor Mammedov
2016-11-03 11:58 ` Igor Mammedov
2016-11-03 11:58 ` [Qemu-devel] " Igor Mammedov
2016-11-03 12:21 ` Xiao Guangrong
2016-11-03 12:21 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 13:00 ` Igor Mammedov
2016-11-03 13:00 ` [Qemu-devel] " Igor Mammedov
2016-11-03 13:02 ` Xiao Guangrong
2016-11-03 13:02 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 14:49 ` Igor Mammedov
2016-11-03 14:49 ` [Qemu-devel] " Igor Mammedov
2016-11-03 14:53 ` Xiao Guangrong
2016-11-03 14:53 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 16:13 ` Igor Mammedov
2016-11-03 16:13 ` [Qemu-devel] " Igor Mammedov
2016-11-03 16:17 ` Xiao Guangrong
2016-11-03 16:17 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 16:49 ` Igor Mammedov
2016-11-03 16:49 ` [Qemu-devel] " Igor Mammedov
2016-11-03 16:53 ` Xiao Guangrong
2016-11-03 16:53 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 17:29 ` Igor Mammedov
2016-11-03 17:29 ` [Qemu-devel] " Igor Mammedov
2016-11-03 17:39 ` Xiao Guangrong
2016-11-03 17:39 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 17:54 ` Igor Mammedov [this message]
2016-11-03 17:54 ` Igor Mammedov
2016-11-03 3:51 ` [PATCH v4 3/3] pc: memhp: enable nvdimm device hotplug Xiao Guangrong
2016-11-03 3:51 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 12:51 ` Igor Mammedov
2016-11-03 12:51 ` [Qemu-devel] " Igor Mammedov
2016-11-03 12:54 ` Xiao Guangrong
2016-11-03 12:54 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 4:14 ` [PATCH v4 0/3] nvdimm: hotplug support Michael S. Tsirkin
2016-11-03 4:14 ` [Qemu-devel] " Michael S. Tsirkin
2016-11-03 4:25 ` Xiao Guangrong
2016-11-03 4:25 ` [Qemu-devel] " Xiao Guangrong
2016-11-03 4:51 ` Michael S. Tsirkin
2016-11-03 4:51 ` [Qemu-devel] " Michael S. Tsirkin
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=20161103185437.2d423716@Igors-MacBook-Pro.local \
--to=imammedo@redhat.com \
--cc=dan.j.williams@intel.com \
--cc=ehabkost@redhat.com \
--cc=gleb@kernel.org \
--cc=guangrong.xiao@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=mst@redhat.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--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 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.