From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46399) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZUYJf-0000re-Lh for qemu-devel@nongnu.org; Wed, 26 Aug 2015 06:52:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZUYJc-00045m-De for qemu-devel@nongnu.org; Wed, 26 Aug 2015 06:52:27 -0400 Received: from mga02.intel.com ([134.134.136.20]:39619) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZUYJc-00044V-7K for qemu-devel@nongnu.org; Wed, 26 Aug 2015 06:52:24 -0400 References: <1439563931-12352-1-git-send-email-guangrong.xiao@linux.intel.com> <1439563931-12352-15-git-send-email-guangrong.xiao@linux.intel.com> <20150825162327.GG8344@stefanha-thinkpad.redhat.com> From: Xiao Guangrong Message-ID: <55DD990B.80204@linux.intel.com> Date: Wed, 26 Aug 2015 18:46:35 +0800 MIME-Version: 1.0 In-Reply-To: <20150825162327.GG8344@stefanha-thinkpad.redhat.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 14/18] nvdimm: support NFIT_CMD_IMPLEMENTED function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: ehabkost@redhat.com, kvm@vger.kernel.org, mst@redhat.com, gleb@kernel.org, mtosatti@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com, imammedo@redhat.com, pbonzini@redhat.com, rth@twiddle.net On 08/26/2015 12:23 AM, Stefan Hajnoczi wrote: > On Fri, Aug 14, 2015 at 10:52:07PM +0800, Xiao Guangrong wrote: >> @@ -306,6 +354,18 @@ struct dsm_buffer { >> static ram_addr_t dsm_addr; >> static size_t dsm_size; >> >> +struct cmd_out_implemented { > > QEMU coding style uses typedef struct {} CamelCase. Please follow this > convention in all user-defined structs (see ./CODING_STYLE). > Okay, will adjust all the defines in the next version. >> static void dsm_write(void *opaque, hwaddr addr, >> uint64_t val, unsigned size) >> { >> + struct MemoryRegion *dsm_ram_mr = opaque; >> + struct dsm_buffer *dsm; >> + struct dsm_out *out; >> + void *buf; >> + >> assert(val == NOTIFY_VALUE); > > The guest should not be able to cause an abort(3). If val != > NOTIFY_VALUE we can do nvdebug() and then return. The ACPI code and emulation code both are from qemu, if that happens, it's really a bug, aborting the VM is better than throwing a debug message under this case to avoid potential data corruption. > >> + >> + buf = memory_region_get_ram_ptr(dsm_ram_mr); >> + dsm = buf; >> + out = buf; >> + >> + le32_to_cpus(&dsm->handle); >> + le32_to_cpus(&dsm->arg1); >> + le32_to_cpus(&dsm->arg2); > > Can SMP guests modify DSM RAM while this thread is running? > > We must avoid race conditions. It's probably better to copy in data > before byte-swapping or checking input values. Yes, my mistake, will fix.