From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Chen, Tiejun" Subject: Re: [v7][RFC][PATCH 04/13] hvmloader/util: get reserved device memory maps Date: Mon, 27 Oct 2014 11:12:09 +0800 Message-ID: <544DB809.9020108@intel.com> References: <1414136077-18599-1-git-send-email-tiejun.chen@intel.com> <1414136077-18599-5-git-send-email-tiejun.chen@intel.com> <544A7CCB0200007800041FBA@mail.emea.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <544A7CCB0200007800041FBA@mail.emea.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich Cc: yang.z.zhang@intel.com, kevin.tian@intel.com, tim@xen.org, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org On 2014/10/24 22:22, Jan Beulich wrote: >>>> On 24.10.14 at 09:34, wrote: >> --- a/tools/firmware/hvmloader/util.c >> +++ b/tools/firmware/hvmloader/util.c >> @@ -828,6 +828,72 @@ int hpet_exists(unsigned long hpet_base) >> return ((hpet_id >> 16) == 0x8086); >> } >> >> +int get_reserved_device_memory_map(struct xen_mem_reserved_device_memory entries[], >> + uint32_t *max_entries) >> +{ >> + int rc; >> + struct xen_mem_reserved_device_memory_map memmap = { >> + .nr_entries = *max_entries >> + }; >> + >> + set_xen_guest_handle(memmap.buffer, entries); >> + >> + rc = hypercall_memory_op(XENMEM_reserved_device_memory_map, &memmap); >> + if (rc == -ENOBUFS) > > Coding style. if ( rc == -ENOBUFS ) > >> + *max_entries = memmap.nr_entries; >> + >> + return rc; >> +} >> + >> +/* Getting all reserved device memory map info in case of hvmloader. */ >> +int hvm_get_reserved_device_memory_map(void) >> +{ >> + static uint32_t nr_entries = 0; >> + int rc = 0; >> + >> + if ( !rdm_map ) >> + { >> + /* Assume we have one entry if not enough we'll expand.*/ >> + nr_entries = 1; >> + rdm_map = mem_alloc(nr_entries * >> + sizeof(struct xen_mem_reserved_device_memory), 0); >> + if ( !rdm_map ) >> + { >> + printf("No space to get reserved dev memory maps!\n"); >> + return rc; >> + } >> + >> + rc = get_reserved_device_memory_map(rdm_map, &nr_entries); >> + if ( rc == -ENOBUFS ) >> + { >> + rdm_map = mem_alloc(nr_entries * >> + sizeof(struct xen_mem_reserved_device_memory), >> + 0); >> + if ( rdm_map ) >> + { >> + rc = get_reserved_device_memory_map(rdm_map, &nr_entries); >> + if ( rc ) >> + { >> + printf("Could not get reserved dev memory info on domain"); >> + return rc; >> + } >> + } >> + else >> + { >> + printf("No space to get reserved dev memory maps!\n"); >> + return rc; >> + } >> + } >> + else if ( rc ) >> + { >> + printf("Could not get reserved dev memory info on domain"); >> + return rc; >> + } >> + } >> + >> + return nr_entries; >> +} > > I continue to think that adding these functions without user isn't > really worthwhile in a separate patch. These functions will be called in pci.c:pci_setup() and e820.c:build_e820_table(). If you really like one big patch I can squash these three patches as one. > >> --- a/tools/firmware/hvmloader/util.h >> +++ b/tools/firmware/hvmloader/util.h >> @@ -241,6 +241,12 @@ int build_e820_table(struct e820entry *e820, >> unsigned int bios_image_base); >> void dump_e820_table(struct e820entry *e820, unsigned int nr); >> >> +#include >> +#define ENOBUFS 105 /* No buffer space available */ > > This is a joke I hope? The #include belongs at the top (albeit afaict > you don't really need it here), and the #define is completely If without this line, #include , In file included from build.c:25:0: ../util.h:246:70: error: array type has incomplete element type int get_reserved_device_memory_map(struct xen_reserved_device_memory entries[], ^ make[8]: *** [build.o] Error 1 > misplaced here. While I generally wouldn't recommend doing this, I > think in the case here including the hypervisor header that defines > them would be okay. Perhaps not via relative path, but via having Seems we just need to include this, #include > the Makefile symlink the hypervisor header here. > >> +struct xen_mem_reserved_device_memory *rdm_map; >> +int get_reserved_device_memory_map(struct xen_mem_reserved_device_memory entries[], >> + uint32_t *max_entries); >> +int hvm_get_reserved_device_memory_map(void); >> #ifndef NDEBUG > > Blank line missing after your additions. > Added. Thanks Tiejun