From: Xiao Guangrong <guangrong.xiao@linux.intel.com>
To: Igor Mammedov <imammedo@redhat.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 v3 3/4] nvdimm acpi: introduce _FIT
Date: Wed, 2 Nov 2016 23:40:56 +0800 [thread overview]
Message-ID: <fdd6a135-23db-b4d4-346d-cdf8300dfdf5@linux.intel.com> (raw)
In-Reply-To: <20161101172436.49016997@nial.brq.redhat.com>
On 11/02/2016 12:24 AM, Igor Mammedov wrote:
> On Sat, 29 Oct 2016 00:35:39 +0800
> Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
>
>> _FIT is required for hotplug support, guest will inquire the updated
>> device info from it if a hotplug event is received
>>
>> As FIT buffer is not completely mapped into guest address space, so a
>> new function, Read FIT whose UUID is UUID
>> 648B9CF2-CDA1-4312-8AD9-49C4AF32BD62, handle 0x10000, function index
>> is 0x1, is reserved by QEMU to read the piece of FIT buffer. The buffer
>> is concatenated before _FIT return
>>
>> Refer to docs/specs/acpi-nvdimm.txt for detailed design
>>
>> Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
>> ---
>> docs/specs/acpi_nvdimm.txt | 58 ++++++++++++-
>> hw/acpi/nvdimm.c | 204 ++++++++++++++++++++++++++++++++++++++++++++-
>> 2 files changed, 257 insertions(+), 5 deletions(-)
>>
>> diff --git a/docs/specs/acpi_nvdimm.txt b/docs/specs/acpi_nvdimm.txt
>> index 0fdd251..4aa5e3d 100644
>> --- a/docs/specs/acpi_nvdimm.txt
>> +++ b/docs/specs/acpi_nvdimm.txt
>> @@ -127,6 +127,58 @@ _DSM process diagram:
>> | result from the page | | |
>> +--------------------------+ +--------------+
>>
>> - _FIT implementation
>> - -------------------
>> - TODO (will fill it when nvdimm hotplug is introduced)
>> +Device Handle Reservation
>> +-------------------------
>> +As we mentioned above, byte 0 ~ byte 3 in the DSM memory save NVDIMM device
>> +handle. The handle is completely QEMU internal thing, the values in range
>> +[0, 0xFFFF] indicate nvdimm device (O means nvdimm root device named NVDR),
>> +other values are reserved by other purpose.
>> +
>> +Current reserved handle:
>> +0x10000 is reserved for QEMU internal DSM function called on the root
>> +device.
> Above part should go to section where 'handle' is defined, i.e. earlier in the file:
>
> ACPI writes _DSM Input Data (based on the offset in the page):
> [0x0 - 0x3]: 4 bytes, NVDIMM Device Handle, 0 is reserved for NVDIMM
> Root device.
>
Okay.
>
>> +QEMU internal use only _DSM function
>> +------------------------------------
>> +UUID, 648B9CF2-CDA1-4312-8AD9-49C4AF32BD62, is reserved for QEMU internal
>> +DSM function.
>> +
>> +There is the function introduced by QEMU and only used by QEMU internal.
>> +
>> +1) Read FIT
> UUID 648B9CF2-CDA1-4312-8AD9-49C4AF32BD62 is reserved for Read_FIT DSM function
> (private QEMU function)
>
okay.
>> + As we only reserved one page for NVDIMM ACPI it is impossible to map the
>> + whole FIT data to guest's address space. This function is used by _FIT
>> + method to read a piece of FIT data from QEMU.
> _FIT method uses Read_FIT function to fetch NFIT structures blob from QEMU
> in 1 page sized increments which are then concatenated and returned as _FIT method result.
>
okay.
>
>> +
>> + Input parameters:
>> + Arg0 – UUID {set to 648B9CF2-CDA1-4312-8AD9-49C4AF32BD62}
>> + Arg1 – Revision ID (set to 1)
>> + Arg2 - Function Index, 0x1
>> + Arg3 - A package containing a buffer whose layout is as follows:
>> +
>> + +----------+-------------+-------------+-----------------------------------+
>> + | Filed | Byte Length | Byte Offset | Description |
> ^ field, s/Byte//, s/Byte//
>> + +----------+-------------+-------------+-----------------------------------+
>> + | offset | 4 | 0 | the offset of FIT buffer |
> offset in QEMU's NFIT structures blob to read from
okay.
>
>> + +----------+-------------+-------------+-----------------------------------+
>> +
>> + Output:
>> + +----------+-------------+-------------+-----------------------------------+
>> + | Filed | Byte Length | Byte Offset | Description |
>> + +----------+-------------+-------------+-----------------------------------+
>> + | | | | return status codes |
>> + | | | | 0x100 indicates fit has been |
>> + | status | 4 | 0 | updated |
> 0x100 - error caused by NFIT update while read by _FIT wasn't completed
okay.
>
>> + | | | | other follows Chapter 3 in DSM |
> s/other follows/other codes follow/
okay.
>
>> + | | | | Spec Rev1 |
>> + +----------+-------------+-------------+-----------------------------------+
>> + | fit data | Varies | 4 | FIT data |
>> + | | | | |
>> + +----------+-------------+-------------+-----------------------------------+
> what does "Varies" mean, how would I know reading this how much data Read_FIT should read
> from shared page?
I mean other bytes in the buffer returned by this function except the 'status' field
will be used as fit data. Maybe it is has a 'length' field?
>
>> +
>> + The FIT offset is maintained by the caller itself,
> probably is not necessary sentence, or specify a caller (for example OSPM)
>
Okay.
>> current offset plugs
> ^^^^?
Typo. should be plus.
>
>> + the length returned by the function is the next offset we should read.
>> + When all the FIT data has been read out, zero length is returned.
>> +
>> + If it returns 0x100, OSPM should restart to read FIT (read from offset 0
>> + again).
> [...]
> that's all for doc part, I'll do the code part later.
>
Thank you, Igor.
WARNING: multiple messages have this Message-ID (diff)
From: Xiao Guangrong <guangrong.xiao@linux.intel.com>
To: Igor Mammedov <imammedo@redhat.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 v3 3/4] nvdimm acpi: introduce _FIT
Date: Wed, 2 Nov 2016 23:40:56 +0800 [thread overview]
Message-ID: <fdd6a135-23db-b4d4-346d-cdf8300dfdf5@linux.intel.com> (raw)
In-Reply-To: <20161101172436.49016997@nial.brq.redhat.com>
On 11/02/2016 12:24 AM, Igor Mammedov wrote:
> On Sat, 29 Oct 2016 00:35:39 +0800
> Xiao Guangrong <guangrong.xiao@linux.intel.com> wrote:
>
>> _FIT is required for hotplug support, guest will inquire the updated
>> device info from it if a hotplug event is received
>>
>> As FIT buffer is not completely mapped into guest address space, so a
>> new function, Read FIT whose UUID is UUID
>> 648B9CF2-CDA1-4312-8AD9-49C4AF32BD62, handle 0x10000, function index
>> is 0x1, is reserved by QEMU to read the piece of FIT buffer. The buffer
>> is concatenated before _FIT return
>>
>> Refer to docs/specs/acpi-nvdimm.txt for detailed design
>>
>> Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
>> ---
>> docs/specs/acpi_nvdimm.txt | 58 ++++++++++++-
>> hw/acpi/nvdimm.c | 204 ++++++++++++++++++++++++++++++++++++++++++++-
>> 2 files changed, 257 insertions(+), 5 deletions(-)
>>
>> diff --git a/docs/specs/acpi_nvdimm.txt b/docs/specs/acpi_nvdimm.txt
>> index 0fdd251..4aa5e3d 100644
>> --- a/docs/specs/acpi_nvdimm.txt
>> +++ b/docs/specs/acpi_nvdimm.txt
>> @@ -127,6 +127,58 @@ _DSM process diagram:
>> | result from the page | | |
>> +--------------------------+ +--------------+
>>
>> - _FIT implementation
>> - -------------------
>> - TODO (will fill it when nvdimm hotplug is introduced)
>> +Device Handle Reservation
>> +-------------------------
>> +As we mentioned above, byte 0 ~ byte 3 in the DSM memory save NVDIMM device
>> +handle. The handle is completely QEMU internal thing, the values in range
>> +[0, 0xFFFF] indicate nvdimm device (O means nvdimm root device named NVDR),
>> +other values are reserved by other purpose.
>> +
>> +Current reserved handle:
>> +0x10000 is reserved for QEMU internal DSM function called on the root
>> +device.
> Above part should go to section where 'handle' is defined, i.e. earlier in the file:
>
> ACPI writes _DSM Input Data (based on the offset in the page):
> [0x0 - 0x3]: 4 bytes, NVDIMM Device Handle, 0 is reserved for NVDIMM
> Root device.
>
Okay.
>
>> +QEMU internal use only _DSM function
>> +------------------------------------
>> +UUID, 648B9CF2-CDA1-4312-8AD9-49C4AF32BD62, is reserved for QEMU internal
>> +DSM function.
>> +
>> +There is the function introduced by QEMU and only used by QEMU internal.
>> +
>> +1) Read FIT
> UUID 648B9CF2-CDA1-4312-8AD9-49C4AF32BD62 is reserved for Read_FIT DSM function
> (private QEMU function)
>
okay.
>> + As we only reserved one page for NVDIMM ACPI it is impossible to map the
>> + whole FIT data to guest's address space. This function is used by _FIT
>> + method to read a piece of FIT data from QEMU.
> _FIT method uses Read_FIT function to fetch NFIT structures blob from QEMU
> in 1 page sized increments which are then concatenated and returned as _FIT method result.
>
okay.
>
>> +
>> + Input parameters:
>> + Arg0 – UUID {set to 648B9CF2-CDA1-4312-8AD9-49C4AF32BD62}
>> + Arg1 – Revision ID (set to 1)
>> + Arg2 - Function Index, 0x1
>> + Arg3 - A package containing a buffer whose layout is as follows:
>> +
>> + +----------+-------------+-------------+-----------------------------------+
>> + | Filed | Byte Length | Byte Offset | Description |
> ^ field, s/Byte//, s/Byte//
>> + +----------+-------------+-------------+-----------------------------------+
>> + | offset | 4 | 0 | the offset of FIT buffer |
> offset in QEMU's NFIT structures blob to read from
okay.
>
>> + +----------+-------------+-------------+-----------------------------------+
>> +
>> + Output:
>> + +----------+-------------+-------------+-----------------------------------+
>> + | Filed | Byte Length | Byte Offset | Description |
>> + +----------+-------------+-------------+-----------------------------------+
>> + | | | | return status codes |
>> + | | | | 0x100 indicates fit has been |
>> + | status | 4 | 0 | updated |
> 0x100 - error caused by NFIT update while read by _FIT wasn't completed
okay.
>
>> + | | | | other follows Chapter 3 in DSM |
> s/other follows/other codes follow/
okay.
>
>> + | | | | Spec Rev1 |
>> + +----------+-------------+-------------+-----------------------------------+
>> + | fit data | Varies | 4 | FIT data |
>> + | | | | |
>> + +----------+-------------+-------------+-----------------------------------+
> what does "Varies" mean, how would I know reading this how much data Read_FIT should read
> from shared page?
I mean other bytes in the buffer returned by this function except the 'status' field
will be used as fit data. Maybe it is has a 'length' field?
>
>> +
>> + The FIT offset is maintained by the caller itself,
> probably is not necessary sentence, or specify a caller (for example OSPM)
>
Okay.
>> current offset plugs
> ^^^^?
Typo. should be plus.
>
>> + the length returned by the function is the next offset we should read.
>> + When all the FIT data has been read out, zero length is returned.
>> +
>> + If it returns 0x100, OSPM should restart to read FIT (read from offset 0
>> + again).
> [...]
> that's all for doc part, I'll do the code part later.
>
Thank you, Igor.
next prev parent reply other threads:[~2016-11-02 15:48 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-28 16:35 [PATCH v3 0/4] nvdimm: hotplug support Xiao Guangrong
2016-10-28 16:35 ` [Qemu-devel] " Xiao Guangrong
2016-10-28 16:35 ` [PATCH v3 1/4] nvdimm acpi: prebuild nvdimm devices for available slots Xiao Guangrong
2016-10-28 16:35 ` [Qemu-devel] " Xiao Guangrong
2016-11-01 15:16 ` Igor Mammedov
2016-11-01 15:16 ` [Qemu-devel] " Igor Mammedov
2016-10-28 16:35 ` [PATCH v3 2/4] nvdimm acpi: introduce fit buffer Xiao Guangrong
2016-10-28 16:35 ` [Qemu-devel] " Xiao Guangrong
2016-11-01 15:17 ` Stefan Hajnoczi
2016-11-01 15:17 ` [Qemu-devel] " Stefan Hajnoczi
2016-11-01 15:25 ` Igor Mammedov
2016-11-01 15:25 ` [Qemu-devel] " Igor Mammedov
2016-11-01 16:00 ` Xiao Guangrong
2016-11-01 16:00 ` [Qemu-devel] " Xiao Guangrong
2016-10-28 16:35 ` [PATCH v3 3/4] nvdimm acpi: introduce _FIT Xiao Guangrong
2016-10-28 16:35 ` [Qemu-devel] " Xiao Guangrong
2016-11-01 16:24 ` Igor Mammedov
2016-11-01 16:24 ` [Qemu-devel] " Igor Mammedov
2016-11-02 15:40 ` Xiao Guangrong [this message]
2016-11-02 15:40 ` Xiao Guangrong
2016-11-03 9:15 ` Igor Mammedov
2016-11-03 9:15 ` [Qemu-devel] " Igor Mammedov
2016-11-01 16:41 ` Stefan Hajnoczi
2016-11-01 16:41 ` [Qemu-devel] " Stefan Hajnoczi
2016-11-02 15:42 ` Xiao Guangrong
2016-11-02 15:42 ` [Qemu-devel] " Xiao Guangrong
2016-11-02 13:56 ` Igor Mammedov
2016-11-02 15:54 ` Xiao Guangrong
2016-11-03 9:22 ` Igor Mammedov
2016-10-28 16:35 ` [PATCH v3 4/4] pc: memhp: enable nvdimm device hotplug Xiao Guangrong
2016-10-28 16:35 ` [Qemu-devel] " Xiao Guangrong
2016-11-01 16:44 ` Stefan Hajnoczi
2016-11-01 16:44 ` [Qemu-devel] " Stefan Hajnoczi
2016-11-02 11:21 ` Igor Mammedov
2016-11-02 11:21 ` [Qemu-devel] " Igor Mammedov
2016-11-02 15:55 ` Xiao Guangrong
2016-11-02 15:55 ` [Qemu-devel] " Xiao Guangrong
2016-11-02 14:01 ` [Qemu-devel] [PATCH v3 0/4] nvdimm: hotplug support Igor Mammedov
2016-11-03 4:53 ` Michael S. Tsirkin
2016-11-03 9:27 ` Igor Mammedov
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=fdd6a135-23db-b4d4-346d-cdf8300dfdf5@linux.intel.com \
--to=guangrong.xiao@linux.intel.com \
--cc=dan.j.williams@intel.com \
--cc=ehabkost@redhat.com \
--cc=gleb@kernel.org \
--cc=imammedo@redhat.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.