xen: add pvh guest support
Juergen Gross
maintainerv4 cover xen: add pvh guest support
This patch series adds support for booting Linux as PVH guest.
Similar to i386/xen and x86_64/xen platforms the new i386/xenpvh platform grub is booted as a standalone image directly by Xen.
For booting Linux kernel it is using the standard linux kernel loader. The only modification of the linux loader is to pass the ACPI RSDP address via boot parameters to the kernel, as that table might not be located at the usual physical address just below 1MB.
The related Linux kernel patches have been accepted in the merge window for post 4.19 (4.20 or 5.0, whatever it will be called).
Changes in V4:
- added new patch 12
- write modified memory map back to Xen
Changes in V3:
- addressed lots of comments, most by Daniel and some by Roger, details are mentioned in the individual patches
Changes in V2:
- extend linux boot protocol version 2.14 to report back the protocol version supported by grub2 (needed as there are grub2 downstream variants in some distros which clobber data after the setup_header)
- split former patch 4 into 10 patches
- fix memmap handling for >4GB of memory
- added new patch from Hans (thanks for that one)
- addressed most of Daniel's comments (see individual patches)
Hans van Kranenburg (1):
grub-module-verifier: Ignore all_video for xenpvh
Juergen Gross (18):
xen: add some xen headers
loader/linux: support passing rsdp address via boot params
xen: carve out grant tab initialization into dedicated function
xen: prepare common code for Xen PVH support
xen: add some dummy headers for PVH mode
xen: rearrange xen/init.c to prepare it for Xen PVH mode
xen: add PVH specific defines to offset.h
xen: add basic hooks for PVH in current code
xen: add PVH boot entry code
xen: setup hypercall page for PVH
xen: get memory map from hypervisor for PVH
xen: add PCI MMIO areas to memory map
xen: setup Xen specific data for PVH
xen: init memory regions for PVH
xen_pvh: add build runes for grub-core
xen_pvh: support building a standalone image
xen_pvh: support grub-install for xen_pvh
xen_pvh: add support to configure
configure.ac | 3 + gentpl.py | 4 +- grub-core/Makefile.am | 12 + grub-core/Makefile.core.def | 36 ++ grub-core/kern/i386/tsc.c | 2 +- grub-core/kern/i386/xen/pvh.c | 423 +++++++++++++++++++++ grub-core/kern/i386/xen/startup_pvh.S | 81 +++++ grub-core/kern/xen/init.c | 101 ++++-- grub-core/loader/i386/linux.c | 9 + grub-core/mmap/i386/pc/mmap.c | 7 - include/grub/i386/linux.h | 5 +- include/grub/i386/memory.h | 7 + include/grub/i386/pc/int.h | 36 +- include/grub/i386/pc/int_types.h | 59 +++ include/grub/i386/tsc.h | 2 +- include/grub/i386/xen/hypercall.h | 5 +- include/grub/i386/xen_pvh/boot.h | 1 + include/grub/i386/xen_pvh/console.h | 1 + include/grub/i386/xen_pvh/int.h | 1 + include/grub/i386/xen_pvh/kernel.h | 30 ++ include/grub/i386/xen_pvh/memory.h | 1 + include/grub/i386/xen_pvh/time.h | 1 + include/grub/kernel.h | 4 +- include/grub/offsets.h | 21 +- include/grub/util/install.h | 1 + include/grub/util/mkimage.h | 3 +- include/grub/xen.h | 6 + include/xen/hvm/hvm_op.h | 296 +++++++++++++++ include/xen/hvm/params.h | 284 +++++++++++++++ include/xen/hvm/start_info.h | 98 +++++ include/xen/memory.h | 665 ++++++++++++++++++++++++++++++++++ include/xen/physdev.h | 387 ++++++++++++++++++++ include/xen/trace.h | 339 +++++++++++++++++ include/xen/xen.h | 104 ++++-- util/grub-install-common.c | 1 + util/grub-install.c | 7 + util/grub-mkimage32.c | 4 +- util/grub-mkimage64.c | 4 +- util/grub-mkimagexx.c | 58 ++- util/grub-module-verifier.c | 1 + util/mkimage.c | 23 +- 41 files changed, 2990 insertions(+), 143 deletions(-) create mode 100644 grub-core/kern/i386/xen/pvh.c create mode 100644 grub-core/kern/i386/xen/startup_pvh.S create mode 100644 include/grub/i386/pc/int_types.h create mode 100644 include/grub/i386/xen_pvh/boot.h create mode 100644 include/grub/i386/xen_pvh/console.h create mode 100644 include/grub/i386/xen_pvh/int.h create mode 100644 include/grub/i386/xen_pvh/kernel.h create mode 100644 include/grub/i386/xen_pvh/memory.h create mode 100644 include/grub/i386/xen_pvh/time.h create mode 100644 include/xen/hvm/hvm_op.h create mode 100644 include/xen/hvm/params.h create mode 100644 include/xen/hvm/start_info.h create mode 100644 include/xen/memory.h create mode 100644 include/xen/physdev.h create mode 100644 include/xen/trace.h
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerPATCH v4 1/19 xen: add some xen headers
In order to support grub2 in Xen PVH environment some additional Xen headers are needed as grub2 will be started in PVH mode requiring to use several HVM hypercalls and structures.
Add the needed headers from Xen 4.10 being the first Xen version with full (not only experimental) PVH guest support.
---
V2: update commit message (Daniel Kiper)
--- include/xen/hvm/hvm_op.h | 296 +++++++++++++++++++ include/xen/hvm/params.h | 284 ++++++++++++++++++ include/xen/hvm/start_info.h | 98 +++++++ include/xen/memory.h | 665 +++++++++++++++++++++++++++++++++++++++++++ include/xen/physdev.h | 387 +++++++++++++++++++++++++ include/xen/trace.h | 339 ++++++++++++++++++++++ include/xen/xen.h | 104 +++++-- 7 files changed, 2142 insertions(+), 31 deletions(-) create mode 100644 include/xen/hvm/hvm_op.h create mode 100644 include/xen/hvm/params.h create mode 100644 include/xen/hvm/start_info.h create mode 100644 include/xen/memory.h create mode 100644 include/xen/physdev.h create mode 100644 include/xen/trace.h
include/xen/hvm/hvm_op.h new file +296 -0
@@ -0,0 +1,296 @@ +/* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to +* deal in the Software without restriction, including without limitation the +* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +* sell copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in +* all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +* DEALINGS IN THE SOFTWARE. +* +* Copyright (c) 2007, Keir Fraser +*/ + +#ifndef __XEN_PUBLIC_HVM_HVM_OP_H__ +#define __XEN_PUBLIC_HVM_HVM_OP_H__ + +#include "../xen.h" +#include "../trace.h" +#include "../event_channel.h" + +/* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */ +#define HVMOP_set_param 0 +#define HVMOP_get_param 1 +struct xen_hvm_param { +domid_t domid;/* IN */ +uint32_t index;/* IN */ +uint64_t value;/* IN/OUT */ +}; +typedef struct xen_hvm_param xen_hvm_param_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_param_t); + +#if __XEN_INTERFACE_VERSION__ <0x00040900 + +/* Set the logical level of one of a domain's PCI INTx wires. */ +#define HVMOP_set_pci_intx_level 2 +struct xen_hvm_set_pci_intx_level { +/* Domain to be updated. */ +domid_t domid; +/* PCI INTx identification in PCI topology (domain:bus:device:intx). */ +uint8_t domain, bus, device, intx; +/* Assertion level (0 = unasserted, 1 = asserted). */ +uint8_t level; +}; +typedef struct xen_hvm_set_pci_intx_level xen_hvm_set_pci_intx_level_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_set_pci_intx_level_t); + +/* Set the logical level of one of a domain's ISA IRQ wires. */ +#define HVMOP_set_isa_irq_level 3 +struct xen_hvm_set_isa_irq_level { +/* Domain to be updated. */ +domid_t domid; +/* ISA device identification, by ISA IRQ (0-15). */ +uint8_t isa_irq; +/* Assertion level (0 = unasserted, 1 = asserted). */ +uint8_t level; +}; +typedef struct xen_hvm_set_isa_irq_level xen_hvm_set_isa_irq_level_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_set_isa_irq_level_t); + +#define HVMOP_set_pci_link_route 4 +struct xen_hvm_set_pci_link_route { +/* Domain to be updated. */ +domid_t domid; +/* PCI link identifier (0-3). */ +uint8_t link; +/* ISA IRQ (1-15), or 0 (disable link). */ +uint8_t isa_irq; +}; +typedef struct xen_hvm_set_pci_link_route xen_hvm_set_pci_link_route_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_set_pci_link_route_t); + +#endif /* __XEN_INTERFACE_VERSION__ < 0x00040900 */ + +/* Flushes all VCPU TLBs: @arg must be NULL. */ +#define HVMOP_flush_tlbs 5 + +typedef enum { + HVMMEM_ram_rw,/* Normal read/write guest RAM */ + HVMMEM_ram_ro,/* Read-only; writes are discarded */ + HVMMEM_mmio_dm,/* Reads and write go to the device model */ +#if __XEN_INTERFACE_VERSION__ <0x00040700 + HVMMEM_mmio_write_dm,/* Read-only; writes go to the device model */ +#else + HVMMEM_unused,/* Placeholder; setting memory to this type +will fail for code after 4.7.0 */ +#endif + HVMMEM_ioreq_server/* Memory type claimed by an ioreq server; type +changes to this value are only allowed after +an ioreq server has claimed its ownership. +Only pages with HVMMEM_ram_rw are allowed to +change to this type; conversely, pages with +this type are only allowed to be changed back +to HVMMEM_ram_rw. */ +}hvmmem_type_t ; + +/* Hint from PV drivers for pagetable destruction. */ +#define HVMOP_pagetable_dying 9 +struct xen_hvm_pagetable_dying { +/* Domain with a pagetable about to be destroyed. */ +domid_t domid; +uint16_t pad[3 ];/* align next field on 8-byte boundary */ +/* guest physical address of the toplevel pagetable dying */ +uint64_t gpa; +}; +typedef struct xen_hvm_pagetable_dying xen_hvm_pagetable_dying_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_pagetable_dying_t); + +/* Get the current Xen time, in nanoseconds since system boot. */ +#define HVMOP_get_time 10 +struct xen_hvm_get_time { +uint64_t now;/* OUT */ +}; +typedef struct xen_hvm_get_time xen_hvm_get_time_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_get_time_t); + +#define HVMOP_xentrace 11 +struct xen_hvm_xentrace { +uint16_t event, extra_bytes; +uint8_t extra[TRACE_EXTRA_MAX *sizeof (uint32_t )]; +}; +typedef struct xen_hvm_xentrace xen_hvm_xentrace_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_xentrace_t); + +/* Following tools-only interfaces may change in future. */ +#if defined(__XEN__) || defined(__XEN_TOOLS__) + +/* Deprecated by XENMEM_access_op_set_access */ +#define HVMOP_set_mem_access 12 + +/* Deprecated by XENMEM_access_op_get_access */ +#define HVMOP_get_mem_access 13 + +#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */ + +#define HVMOP_get_mem_type 15 +/* Return hvmmem_type_t for the specified pfn. */ +struct xen_hvm_get_mem_type { +/* Domain to be queried. */ +domid_t domid; +/* OUT variable. */ +uint16_t mem_type; +uint16_t pad[2 ];/* align next field on 8-byte boundary */ +/* IN variable. */ +uint64_t pfn; +}; +typedef struct xen_hvm_get_mem_type xen_hvm_get_mem_type_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_get_mem_type_t); + +/* Following tools-only interfaces may change in future. */ +#if defined(__XEN__) || defined(__XEN_TOOLS__) + +/* +* Definitions relating to DMOP_create_ioreq_server. (Defined here for +* backwards compatibility). +*/ + +#define HVM_IOREQSRV_BUFIOREQ_OFF 0 +#define HVM_IOREQSRV_BUFIOREQ_LEGACY 1 +/* +* Use this when read_pointer gets updated atomically and +* the pointer pair gets read atomically: +*/ +#define HVM_IOREQSRV_BUFIOREQ_ATOMIC 2 + +#endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */ + +#if defined(__i386__) || defined(__x86_64__) + +/* +* HVMOP_set_evtchn_upcall_vector: Set a <vector> that should be used for event +* channel upcalls on the specified <vcpu>. If set, +* this vector will be used in preference to the +* domain global callback via (see +* HVM_PARAM_CALLBACK_IRQ). +*/ +#define HVMOP_set_evtchn_upcall_vector 23 +struct xen_hvm_evtchn_upcall_vector { +uint32_t vcpu; +uint8_t vector; +}; +typedef struct xen_hvm_evtchn_upcall_vector xen_hvm_evtchn_upcall_vector_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_evtchn_upcall_vector_t); + +#endif /* defined(__i386__) || defined(__x86_64__) */ + +#define HVMOP_guest_request_vm_event 24 + +/* HVMOP_altp2m: perform altp2m state operations */ +#define HVMOP_altp2m 25 + +#define HVMOP_ALTP2M_INTERFACE_VERSION 0x00000001 + +struct xen_hvm_altp2m_domain_state { +/* IN or OUT variable on/off */ +uint8_t state; +}; +typedef struct xen_hvm_altp2m_domain_state xen_hvm_altp2m_domain_state_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_altp2m_domain_state_t); + +struct xen_hvm_altp2m_vcpu_enable_notify { +uint32_t vcpu_id; +uint32_t pad; +/* #VE info area gfn */ +uint64_t gfn; +}; +typedef struct xen_hvm_altp2m_vcpu_enable_notify xen_hvm_altp2m_vcpu_enable_notify_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_altp2m_vcpu_enable_notify_t); + +struct xen_hvm_altp2m_view { +/* IN/OUT variable */ +uint16_t view; +/* Create view only: default access type +* NOTE: currently ignored */ +uint16_t hvmmem_default_access;/* xenmem_access_t */ +}; +typedef struct xen_hvm_altp2m_view xen_hvm_altp2m_view_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_altp2m_view_t); + +struct xen_hvm_altp2m_set_mem_access { +/* view */ +uint16_t view; +/* Memory type */ +uint16_t hvmmem_access;/* xenmem_access_t */ +uint32_t pad; +/* gfn */ +uint64_t gfn; +}; +typedef struct xen_hvm_altp2m_set_mem_access xen_hvm_altp2m_set_mem_access_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_altp2m_set_mem_access_t); + +struct xen_hvm_altp2m_change_gfn { +/* view */ +uint16_t view; +uint16_t pad1; +uint32_t pad2; +/* old gfn */ +uint64_t old_gfn; +/* new gfn, INVALID_GFN (~0UL) means revert */ +uint64_t new_gfn; +}; +typedef struct xen_hvm_altp2m_change_gfn xen_hvm_altp2m_change_gfn_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_altp2m_change_gfn_t); + +struct xen_hvm_altp2m_op { +uint32_t version;/* HVMOP_ALTP2M_INTERFACE_VERSION */ +uint32_t cmd; +/* Get/set the altp2m state for a domain */ +#define HVMOP_altp2m_get_domain_state 1 +#define HVMOP_altp2m_set_domain_state 2 +/* Set the current VCPU to receive altp2m event notifications */ +#define HVMOP_altp2m_vcpu_enable_notify 3 +/* Create a new view */ +#define HVMOP_altp2m_create_p2m 4 +/* Destroy a view */ +#define HVMOP_altp2m_destroy_p2m 5 +/* Switch view for an entire domain */ +#define HVMOP_altp2m_switch_p2m 6 +/* Notify that a page of memory is to have specific access types */ +#define HVMOP_altp2m_set_mem_access 7 +/* Change a p2m entry to have a different gfn->mfn mapping */ +#define HVMOP_altp2m_change_gfn 8 +domid_t domain; +uint16_t pad1; +uint32_t pad2; +union { +struct xen_hvm_altp2m_domain_state domain_state; +struct xen_hvm_altp2m_vcpu_enable_notify enable_notify; +struct xen_hvm_altp2m_view view; +struct xen_hvm_altp2m_set_mem_access set_mem_access; +struct xen_hvm_altp2m_change_gfn change_gfn; +uint8_t pad[64 ]; + } u; +}; +typedef struct xen_hvm_altp2m_op xen_hvm_altp2m_op_t ; +DEFINE_XEN_GUEST_HANDLE (xen_hvm_altp2m_op_t); + +#endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */ + +/* +* Local variables: +* mode: C +* c-file-style: "BSD" +* c-basic-offset: 4 +* tab-width: 4 +* indent-tabs-mode: nil +* End: +*/
include/xen/hvm/params.h new file +284 -0
284 lines not on this page · raw message
include/xen/hvm/start_info.h new file +98 -0
98 lines not on this page · raw message
include/xen/memory.h new file +665 -0
665 lines not on this page · raw message
include/xen/physdev.h new file +387 -0
387 lines not on this page · raw message
include/xen/trace.h new file +339 -0
339 lines not on this page · raw message
include/xen/xen.h +73 -31
170 lines not on this page · raw message
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerPATCH v4 2/19 loader/linux: support passing rsdp address via boot params
In reply to Juergen GrossXen PVH guests will have the RSDP at an arbitrary address. Support that by passing the RSDP address via the boot parameters to Linux.
The new protocol version 2.14 requires to set version to 0x8000 ored with the actually use protocol version (the minimum of the kernel supplied protocol version and the grub2 supported protocol version) if 2.14 or higher are in effect.
---
V2: add oring 0x8000 to version field
V3: move including machine/kernel.h to patch 8 (Daniel Kiper)
--- grub-core/loader/i386/linux.c | 8 ++++++++ include/grub/i386/linux.h | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-)
grub-core/loader/i386/linux.c +8 -0
@@ -750,6 +750,14 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), prot_init_space =page_align (prot_size) *3 ; } +#ifdef GRUB_KERNEL_USE_RSDP_ADDR +if (grub_le_to_cpu16 (lh.version) >=0x020e ) + lh.acpi_rsdp_addr =grub_le_to_cpu64 (grub_rsdp_addr); +#endif + +if (grub_le_to_cpu16 (lh.version) >=0x020e ) + lh.version =grub_le_to_cpu16 (LINUX_LOADER_VERSION_TAG |0x020e ); +if (allocate_pages (prot_size, &align, min_align, relocatable, preferred_address))
include/grub/i386/linux.h +4 -1
@@ -87,7 +87,7 @@ enumGRUB_VIDEO_LINUX_TYPE_SIMPLE =0x70 /* Linear framebuffer without any additional functions. */ }; -/* For the Linux/i386 boot protocol version 2.10. */ +/* For the Linux/i386 boot protocol version 2.14. */ struct linux_i386_kernel_header {grub_uint8_t code1[0x0020 ];
@@ -105,6 +105,7 @@ struct linux_i386_kernel_headergrub_uint16_t jump;/* Jump instruction */ grub_uint32_t header;/* Magic signature "HdrS" */ grub_uint16_t version;/* Boot protocol version supported */ +#define LINUX_LOADER_VERSION_TAG 0x8000grub_uint32_t realmode_swtch;/* Boot loader hook */ grub_uint16_t start_sys;/* The load-low segment (obsolete) */ grub_uint16_t kernel_version;/* Points to kernel version string */
@@ -142,6 +143,8 @@ struct linux_i386_kernel_headergrub_uint64_t setup_data;grub_uint64_t pref_address;grub_uint32_t init_size; +grub_uint32_t handover_offset; +grub_uint64_t acpi_rsdp_addr; }GRUB_PACKED ;/* Boot parameters for Linux based on 2.6.12. This is used by the setup
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 02/19] loader/linux: support passing rsdp address via boot params
Quoted 9 lines · Juergen Gross
Xen PVH guests will have the RSDP at an arbitrary address. Support that by passing the RSDP address via the boot parameters to Linux.
The new protocol version 2.14 requires to set version to
0x8000ored with the actually use protocol version (the minimum of the kernel supplied protocol version and the grub2 supported protocol version) if 2.14 or higher are in effect.Signed-off-by Juergen Gross <[email protected]>
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 02/19] loader/linux: support passing rsdp address via boot params
In reply to Juergen GrossQuoted 9 lines · Juergen Gross
Xen PVH guests will have the RSDP at an arbitrary address. Support that by passing the RSDP address via the boot parameters to Linux.
The new protocol version 2.14 requires to set version to
0x8000ored with the actually use protocol version (the minimum of the kernel supplied protocol version and the grub2 supported protocol version) if 2.14 or higher are in effect.Signed-off-by Juergen Gross <[email protected]>
Daniel
Juergen Gross
maintainerPATCH v4 3/19 xen: carve out grant tab initialization into dedicated function
In reply to Juergen GrossInitialize the grant tab in a dedicated function. This will enable using it for PVH guests, too.
Call the new function from grub_machine_init() as this will later be common between Xen PV and Xen PVH mode.
---
V2: update commit message (Daniel Kiper)
--- grub-core/kern/xen/init.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-)
grub-core/kern/xen/init.c +21 -14
@@ -318,6 +318,25 @@ grub_xenstore_dir (const char *dir,unsigned long gntframe =0 ; +static void +grub_xen_setup_gnttab (void ) +{ +struct gnttab_set_version gnttab_setver; +struct gnttab_setup_table gnttab_setup; + +grub_memset (&gnttab_setver,0 ,sizeof (gnttab_setver)); + + gnttab_setver.version =1 ; +grub_xen_grant_table_op (GNTTABOP_set_version, &gnttab_setver,1 ); + +grub_memset (&gnttab_setup,0 ,sizeof (gnttab_setup)); + gnttab_setup.dom =DOMID_SELF ; + gnttab_setup.nr_frames =1 ; + gnttab_setup.frame_list.p = &gntframe; + +grub_xen_grant_table_op (GNTTABOP_setup_table, &gnttab_setup,1 ); +} +#define MAX_N_UNUSABLE_PAGES 4 static int
@@ -357,26 +376,12 @@ map_all_pages (void) (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;grub_uint64_t *pg = (grub_uint64_t *) window;grub_uint64_t oldpgstart, oldpgend; -struct gnttab_setup_table gnttab_setup; -struct gnttab_set_version gnttab_setver;grub_size_t n_unusable_pages =0 ;struct mmu_update m2p_updates[2 *MAX_N_UNUSABLE_PAGES ];if (total_pages >MAX_TOTAL_PAGES -4 ) total_pages =MAX_TOTAL_PAGES -4 ; -grub_memset (&gnttab_setver,0 ,sizeof (gnttab_setver)); - - gnttab_setver.version =1 ; -grub_xen_grant_table_op (GNTTABOP_set_version, &gnttab_setver,1 ); - -grub_memset (&gnttab_setup,0 ,sizeof (gnttab_setup)); - gnttab_setup.dom =DOMID_SELF ; - gnttab_setup.nr_frames =1 ; - gnttab_setup.frame_list.p = &gntframe; - -grub_xen_grant_table_op (GNTTABOP_setup_table, &gnttab_setup,1 ); -for (j =0 ; j < total_pages - n_unusable_pages; j++)while (!grub_xen_is_page_usable (mfn_list[j])) {
@@ -537,6 +542,8 @@ grub_machine_init (void) +GRUB_KERNEL_MACHINE_MOD_GAP , GRUB_KERNEL_MACHINE_MOD_ALIGN); +grub_xen_setup_gnttab (); +map_all_pages ();grub_console_init ();
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerPATCH v4 4/19 xen: prepare common code for Xen PVH support
In reply to Juergen GrossSome common code needs to be special cased for Xen PVH mode. This hits mostly Xen PV mode specific areas.
Split include/grub/i386/pc/int_types.h off from include/grub/i386/pc/int.h to support including this file later from xen_pvh code without the grub_bios_interrupt definition.
Move definition of struct grub_e820_mmap_entry from grub-core/mmap/i386/pc/mmap.c to include/grub/i386/memory.h in order to make it usable from xen_pvh code.
---
V3: GRUB_MACHINE_XENPVH -> GRUB_MACHINE_XEN_PVH (Daniel Kiper)
split include/grub/i386/pc/int.h (Daniel Kiper) move struct grub_e820_mmap_entry definition to header file
--- grub-core/kern/i386/tsc.c | 2 +- grub-core/mmap/i386/pc/mmap.c | 7 ----- include/grub/i386/memory.h | 7 +++++ include/grub/i386/pc/int.h | 36 +----------------------- include/grub/i386/pc/int_types.h | 59 +++++++++++++++++++++++++++++++++++++++ include/grub/i386/tsc.h | 2 +- include/grub/i386/xen/hypercall.h | 5 +++- include/grub/kernel.h | 4 ++- 8 files changed, 76 insertions(+), 46 deletions(-) create mode 100644 include/grub/i386/pc/int_types.h
grub-core/kern/i386/tsc.c +1 -1
@@ -65,7 +65,7 @@ grub_tsc_init (void) tsc_boot_time =grub_get_tsc (); -#ifdef GRUB_MACHINE_XEN +#if defined (GRUB_MACHINE_XEN ) || defined (GRUB_MACHINE_XEN_PVH ) (void ) (grub_tsc_calibrate_from_xen () ||calibrate_tsc_hardcode ());#elif defined (GRUB_MACHINE_EFI ) (void ) (grub_tsc_calibrate_from_pmtimer () ||grub_tsc_calibrate_from_pit () ||grub_tsc_calibrate_from_efi () ||calibrate_tsc_hardcode ());
grub-core/mmap/i386/pc/mmap.c +0 -7
@@ -42,13 +42,6 @@ extern grub_uint16_t grub_machine_mmaphook_kblow;extern grub_uint16_t grub_machine_mmaphook_kbin16mb;extern grub_uint16_t grub_machine_mmaphook_64kbin4gb; -struct grub_e820_mmap_entry -{ -grub_uint64_t addr; -grub_uint64_t len; -grub_uint32_t type; -}GRUB_PACKED ; -/* Helper for preboot. */ static int fill_hook (grub_uint64_t addr, grub_uint64_t size,
include/grub/i386/memory.h +7 -0
@@ -44,6 +44,13 @@#include <grub/types.h> +struct grub_e820_mmap_entry +{ +grub_uint64_t addr; +grub_uint64_t len; +grub_uint32_t type; +}GRUB_PACKED ; +grub_uint64_t grub_mmap_get_upper (void );grub_uint64_t grub_mmap_get_lower (void );grub_uint64_t grub_mmap_get_post64 (void );
include/grub/i386/pc/int.h +1 -35
@@ -20,45 +20,11 @@#define GRUB_INTERRUPT_MACHINE_HEADER 1#include <grub/symbol.h> -#include <grub/types.h> - -struct grub_bios_int_registers -{ -grub_uint32_t eax; -grub_uint16_t es; -grub_uint16_t ds; -grub_uint16_t flags; -grub_uint16_t dummy; -grub_uint32_t ebx; -grub_uint32_t ecx; -grub_uint32_t edi; -grub_uint32_t esi; -grub_uint32_t edx; -}; - -#define GRUB_CPU_INT_FLAGS_CARRY 0x1 -#define GRUB_CPU_INT_FLAGS_PARITY 0x4 -#define GRUB_CPU_INT_FLAGS_ADJUST 0x10 -#define GRUB_CPU_INT_FLAGS_ZERO 0x40 -#define GRUB_CPU_INT_FLAGS_SIGN 0x80 -#define GRUB_CPU_INT_FLAGS_TRAP 0x100 -#define GRUB_CPU_INT_FLAGS_INTERRUPT 0x200 -#define GRUB_CPU_INT_FLAGS_DIRECTION 0x400 -#define GRUB_CPU_INT_FLAGS_OVERFLOW 0x800 -#ifdef GRUB_MACHINE_PCBIOS -#define GRUB_CPU_INT_FLAGS_DEFAULT GRUB_CPU_INT_FLAGS_INTERRUPT -#else -#define GRUB_CPU_INT_FLAGS_DEFAULT 0 -#endif +#include <grub/i386/pc/int_types.h> void EXPORT_FUNC (grub_bios_interrupt ) (grub_uint8_t intno,struct grub_bios_int_registers *regs) __attribute__ ((regparm (3 ))); -struct grub_i386_idt -{ -grub_uint16_t limit; -grub_uint32_t base; -}GRUB_PACKED ;#ifdef GRUB_MACHINE_PCBIOS extern struct grub_i386_idt *EXPORT_VAR (grub_realidt );
include/grub/i386/pc/int_types.h new file +59 -0
59 lines not on this page · raw message
include/grub/i386/tsc.h +1 -1
@@ -54,7 +54,7 @@ grub_get_tsc (void)static __inlineint grub_cpu_is_tsc_supported (void ) { -#ifndef GRUB_MACHINE_XEN +#if !defined(GRUB_MACHINE_XEN ) && !defined(GRUB_MACHINE_XEN_PVH )grub_uint32_t a,b,c,d;if (!grub_cpu_is_cpuid_supported ())return 0 ;
include/grub/i386/xen/hypercall.h +4 -1
@@ -26,7 +26,10 @@ EXPORT_FUNC (grub_xen_hypercall) (grub_uint32_t callno, grub_uint32_t a0, grub_uint32_t a1, grub_uint32_t a2, grub_uint32_t a3, grub_uint32_t a4, grub_uint32_t a5) -__attribute__ ((regparm (3), cdecl)); +#ifdef GRUB_MACHINE_XEN + __attribute__ ((regparm (3), cdecl)) +#endif + ;static inline int grub_xen_sched_op (int cmd,void *arg)
include/grub/kernel.h +3 -1
@@ -79,7 +79,9 @@ struct grub_module_info64#if defined (GRUB_MACHINE_PCBIOS ) || defined (GRUB_MACHINE_COREBOOT ) \ || defined (GRUB_MACHINE_MULTIBOOT ) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS ) \ || defined (GRUB_MACHINE_MIPS_LOONGSON ) || defined (GRUB_MACHINE_ARC ) \ - || (defined (__sparc__) && defined (GRUB_MACHINE_IEEE1275 )) || defined (GRUB_MACHINE_UBOOT ) || defined (GRUB_MACHINE_XEN ) + || (defined (__sparc__) && defined (GRUB_MACHINE_IEEE1275 )) \ + || defined (GRUB_MACHINE_UBOOT ) || defined (GRUB_MACHINE_XEN ) \ + || defined(GRUB_MACHINE_XEN_PVH )/* FIXME: stack is between 2 heap regions. Move it. */ #define GRUB_KERNEL_PRELOAD_SPACE_REUSABLE 1#endif
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 04/19] xen: prepare common code for Xen PVH support
Quoted 7 lines · Juergen Gross
Some common code needs to be special cased for Xen PVH mode. This hits mostly Xen PV mode specific areas.
Split
include/grub/i386/pc/int_types.hoff frominclude/grub/i386/pc/int.hto support including this file later fromxen_pvhcode without thegrub_bios_interruptdefinition.
Quoted 5 lines
Move definition of struct
grub_e820_mmap_entryfromgrub-core/mmap/i386/pc/mmap.ctoinclude/grub/i386/memory.hin order to make it usable fromxen_pvhcode.Signed-off-by Juergen Gross <[email protected]>
If you fix two nitpicks below you can add
Quoted 35 lines
---
V3:GRUB_MACHINE_XENPVH->GRUB_MACHINE_XEN_PVH(Daniel Kiper)
splitinclude/grub/i386/pc/int.h(Daniel Kiper) move structgrub_e820_mmap_entrydefinition to header file--- grub-core/kern/i386/tsc.c | 2 +- grub-core/mmap/i386/pc/mmap.c | 7 ----- include/grub/i386/memory.h | 7 +++++ include/grub/i386/pc/int.h | 36 +----------------------- include/grub/i386/pc/int_types.h | 59 +++++++++++++++++++++++++++++++++++++++ include/grub/i386/tsc.h | 2 +- include/grub/i386/xen/hypercall.h | 5 +++- include/grub/kernel.h | 4 ++- 8 files changed, 76 insertions(+), 46 deletions(-) create mode 100644 include/grub/i386/pc/int_types.hgrub-core/kern/i386/tsc.c +1
-1@@ -65,7 +65,7 @@ grub_tsc_init (void) tsc_boot_time =grub_get_tsc (); -#ifdef GRUB_MACHINE_XEN +#if defined (GRUB_MACHINE_XEN ) || defined (GRUB_MACHINE_XEN_PVH ) (void ) (grub_tsc_calibrate_from_xen () ||calibrate_tsc_hardcode ());#elif defined (GRUB_MACHINE_EFI ) (void ) (grub_tsc_calibrate_from_pmtimer () ||grub_tsc_calibrate_from_pit () ||grub_tsc_calibrate_from_efi () ||calibrate_tsc_hardcode ());grub-core/mmap/i386/pc/mmap.c +0
-0@@ -42,13 +42,6 @@ extern grub_uint16_t grub_machine_mmaphook_kblow;extern grub_uint16_t grub_machine_mmaphook_kbin16mb;
grub-core/mmap/i386/pc/mmap.c extern grub_uint16_t grub_machine_mmaphook_kblow; · line 45
Quoted 10 lines
grub-core/mmap/i386/pc/mmap.c +0
-7extern grub_uint16_t grub_machine_mmaphook_64kbin4gb; -struct grub_e820_mmap_entry -{ -grub_uint64_t addr; -grub_uint64_t len; -grub_uint32_t type; -}GRUB_PACKED ; -
Please drop this extra empty line too.
[...]
Quoted 32 lines
include/grub/i386/pc/int_types.h new file +26
-0@@ -0,0 +1,59 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef GRUB_INTERRUPT_TYPES_MACHINE_HEADER +#define GRUB_INTERRUPT_TYPES_MACHINE_HEADER 1 + +#include <grub/types.h> + +struct grub_bios_int_registers +{ + grub_uint32_t eax;
include/grub/i386/pc/int_types.h line 36
Quoted 10 lines
include/grub/i386/pc/int_types.h new file +10
-0+grub_uint16_t es; +grub_uint16_t ds; +grub_uint16_t flags; +grub_uint16_t dummy; +grub_uint32_t ebx; +grub_uint32_t ecx; +grub_uint32_t edi; +grub_uint32_t esi; +grub_uint32_t edx; +};
Please move this struct behind constants definitions below.
Quoted 12 lines
include/grub/i386/pc/int_types.h new file +12
-0+#define GRUB_CPU_INT_FLAGS_CARRY 0x1 +#define GRUB_CPU_INT_FLAGS_PARITY 0x4 +#define GRUB_CPU_INT_FLAGS_ADJUST 0x10 +#define GRUB_CPU_INT_FLAGS_ZERO 0x40 +#define GRUB_CPU_INT_FLAGS_SIGN 0x80 +#define GRUB_CPU_INT_FLAGS_TRAP 0x100 +#define GRUB_CPU_INT_FLAGS_INTERRUPT 0x200 +#define GRUB_CPU_INT_FLAGS_DIRECTION 0x400 +#define GRUB_CPU_INT_FLAGS_OVERFLOW 0x800 +#ifdef GRUB_MACHINE_PCBIOS +#define GRUB_CPU_INT_FLAGS_DEFAULT GRUB_CPU_INT_FLAGS_INTERRUPT +#else
include/grub/i386/pc/int_types.h line 59
Quoted 10 lines
include/grub/i386/pc/int_types.h new file +10
-0+#define GRUB_CPU_INT_FLAGS_DEFAULT 0 +#endif + +struct grub_i386_idt +{ +grub_uint16_t limit; +grub_uint32_t base; +}GRUB_PACKED ; + +#endif
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 04/19] xen: prepare common code for Xen PVH support
In reply to Juergen GrossQuoted 7 lines · Juergen Gross
Some common code needs to be special cased for Xen PVH mode. This hits mostly Xen PV mode specific areas.
Split
include/grub/i386/pc/int_types.hoff frominclude/grub/i386/pc/int.hto support including this file later fromxen_pvhcode without thegrub_bios_interruptdefinition.
Quoted 5 lines
Move definition of struct
grub_e820_mmap_entryfromgrub-core/mmap/i386/pc/mmap.ctoinclude/grub/i386/memory.hin order to make it usable fromxen_pvhcode.Signed-off-by Juergen Gross <[email protected]>
If you fix two nitpicks below you can add
Quoted 35 lines
---
V3:GRUB_MACHINE_XENPVH->GRUB_MACHINE_XEN_PVH(Daniel Kiper)
splitinclude/grub/i386/pc/int.h(Daniel Kiper) move structgrub_e820_mmap_entrydefinition to header file--- grub-core/kern/i386/tsc.c | 2 +- grub-core/mmap/i386/pc/mmap.c | 7 ----- include/grub/i386/memory.h | 7 +++++ include/grub/i386/pc/int.h | 36 +----------------------- include/grub/i386/pc/int_types.h | 59 +++++++++++++++++++++++++++++++++++++++ include/grub/i386/tsc.h | 2 +- include/grub/i386/xen/hypercall.h | 5 +++- include/grub/kernel.h | 4 ++- 8 files changed, 76 insertions(+), 46 deletions(-) create mode 100644 include/grub/i386/pc/int_types.hgrub-core/kern/i386/tsc.c +1
-1@@ -65,7 +65,7 @@ grub_tsc_init (void) tsc_boot_time =grub_get_tsc (); -#ifdef GRUB_MACHINE_XEN +#if defined (GRUB_MACHINE_XEN ) || defined (GRUB_MACHINE_XEN_PVH ) (void ) (grub_tsc_calibrate_from_xen () ||calibrate_tsc_hardcode ());#elif defined (GRUB_MACHINE_EFI ) (void ) (grub_tsc_calibrate_from_pmtimer () ||grub_tsc_calibrate_from_pit () ||grub_tsc_calibrate_from_efi () ||calibrate_tsc_hardcode ());grub-core/mmap/i386/pc/mmap.c +0
-0@@ -42,13 +42,6 @@ extern grub_uint16_t grub_machine_mmaphook_kblow;extern grub_uint16_t grub_machine_mmaphook_kbin16mb;
grub-core/mmap/i386/pc/mmap.c extern grub_uint16_t grub_machine_mmaphook_kblow; · line 45
Quoted 10 lines
grub-core/mmap/i386/pc/mmap.c +0
-7extern grub_uint16_t grub_machine_mmaphook_64kbin4gb; -struct grub_e820_mmap_entry -{ -grub_uint64_t addr; -grub_uint64_t len; -grub_uint32_t type; -}GRUB_PACKED ; -
Please drop this extra empty line too.
[...]
Quoted 32 lines
include/grub/i386/pc/int_types.h new file +26
-0@@ -0,0 +1,59 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef GRUB_INTERRUPT_TYPES_MACHINE_HEADER +#define GRUB_INTERRUPT_TYPES_MACHINE_HEADER 1 + +#include <grub/types.h> + +struct grub_bios_int_registers +{ + grub_uint32_t eax;
include/grub/i386/pc/int_types.h line 36
Quoted 10 lines
include/grub/i386/pc/int_types.h new file +10
-0+grub_uint16_t es; +grub_uint16_t ds; +grub_uint16_t flags; +grub_uint16_t dummy; +grub_uint32_t ebx; +grub_uint32_t ecx; +grub_uint32_t edi; +grub_uint32_t esi; +grub_uint32_t edx; +};
Please move this struct behind constants definitions below.
Quoted 12 lines
include/grub/i386/pc/int_types.h new file +12
-0+#define GRUB_CPU_INT_FLAGS_CARRY 0x1 +#define GRUB_CPU_INT_FLAGS_PARITY 0x4 +#define GRUB_CPU_INT_FLAGS_ADJUST 0x10 +#define GRUB_CPU_INT_FLAGS_ZERO 0x40 +#define GRUB_CPU_INT_FLAGS_SIGN 0x80 +#define GRUB_CPU_INT_FLAGS_TRAP 0x100 +#define GRUB_CPU_INT_FLAGS_INTERRUPT 0x200 +#define GRUB_CPU_INT_FLAGS_DIRECTION 0x400 +#define GRUB_CPU_INT_FLAGS_OVERFLOW 0x800 +#ifdef GRUB_MACHINE_PCBIOS +#define GRUB_CPU_INT_FLAGS_DEFAULT GRUB_CPU_INT_FLAGS_INTERRUPT +#else
include/grub/i386/pc/int_types.h line 59
Quoted 10 lines
include/grub/i386/pc/int_types.h new file +10
-0+#define GRUB_CPU_INT_FLAGS_DEFAULT 0 +#endif + +struct grub_i386_idt +{ +grub_uint16_t limit; +grub_uint32_t base; +}GRUB_PACKED ; + +#endif
Daniel
Juergen Gross
maintainerPATCH v4 5/19 xen: add some dummy headers for PVH mode
In reply to Juergen GrossWith Xen PVH mode adding a new machine type the machine related headers need to be present for the build to succeed. Most of the headers just need to include the related common i386 headers. Add those to the tree.
---
V3: updated commit message (Daniel Kiper)
xenpvh->xen_pvh (Daniel Kiper) --- include/grub/i386/xen_pvh/boot.h | 1 + include/grub/i386/xen_pvh/console.h | 1 + include/grub/i386/xen_pvh/int.h | 1 + include/grub/i386/xen_pvh/memory.h | 1 + include/grub/i386/xen_pvh/time.h | 1 + 5 files changed, 5 insertions(+) create mode 100644 include/grub/i386/xen_pvh/boot.h create mode 100644 include/grub/i386/xen_pvh/console.h create mode 100644 include/grub/i386/xen_pvh/int.h create mode 100644 include/grub/i386/xen_pvh/memory.h create mode 100644 include/grub/i386/xen_pvh/time.h
include/grub/i386/xen_pvh/boot.h new file +1 -0
@@ -0,0 +1 @@ +#include <grub/i386/pc/boot.h>
include/grub/i386/xen_pvh/console.h new file +1 -0
@@ -0,0 +1 @@ +#include <grub/i386/pc/console.h>
include/grub/i386/xen_pvh/int.h new file +1 -0
@@ -0,0 +1 @@ +#include <grub/i386/pc/int_types.h>
include/grub/i386/xen_pvh/memory.h new file +1 -0
@@ -0,0 +1 @@ +#include <grub/i386/coreboot/memory.h>
include/grub/i386/xen_pvh/time.h new file +1 -0
@@ -0,0 +1 @@ +#include <grub/i386/pc/time.h>
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 05/19] xen: add some dummy headers for PVH mode
Quoted 41 lines · Juergen Gross
With Xen PVH mode adding a new machine type the machine related headers need to be present for the build to succeed. Most of the headers just need to include the related common i386 headers. Add those to the tree.
Signed-off-by Juergen Gross <[email protected]>---
V3: updated commit message (Daniel Kiper)xenpvh->xen_pvh (Daniel Kiper) --- include/grub/i386/xen_pvh/boot.h | 1 + include/grub/i386/xen_pvh/console.h | 1 + include/grub/i386/xen_pvh/int.h | 1 + include/grub/i386/xen_pvh/memory.h | 1 + include/grub/i386/xen_pvh/time.h | 1 + 5 files changed, 5 insertions(+) create mode 100644 include/grub/i386/xen_pvh/boot.h create mode 100644 include/grub/i386/xen_pvh/console.h create mode 100644 include/grub/i386/xen_pvh/int.h create mode 100644 include/grub/i386/xen_pvh/memory.h create mode 100644 include/grub/i386/xen_pvh/time.hinclude/grub/i386/xen_pvh/boot.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/boot.h> include/grub/i386/xen_pvh/console.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/console.h> include/grub/i386/xen_pvh/int.h new file +0
-0
include/grub/i386/xen_pvh/int.h line 1
Quoted 1 line
include/grub/i386/xen_pvh/int.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/int_types.h>
I think that this begs for explanation in the commit message why not grub/i386/pc/int.h.
include/grub/i386/xen_pvh/memory.h line 1
Quoted 7 lines
include/grub/i386/xen_pvh/memory.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/coreboot/memory.h>
Hmmm... Why not include/grub/i386/pc/memory.h?
include/grub/i386/xen_pvh/time.h line 1
Quoted 7 lines
include/grub/i386/xen_pvh/time.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/time.h>
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerRe: [PATCH v4 05/19] xen: add some dummy headers for PVH mode
Quoted 38 lines · Daniel Kiper
Quoted 37 lines · Juergen Gross
With Xen PVH mode adding a new machine type the machine related headers need to be present for the build to succeed. Most of the headers just need to include the related common i386 headers. Add those to the tree.
Signed-off-by Juergen Gross <[email protected]>---
V3: updated commit message (Daniel Kiper)xenpvh->xen_pvh (Daniel Kiper) --- include/grub/i386/xen_pvh/boot.h | 1 + include/grub/i386/xen_pvh/console.h | 1 + include/grub/i386/xen_pvh/int.h | 1 + include/grub/i386/xen_pvh/memory.h | 1 + include/grub/i386/xen_pvh/time.h | 1 + 5 files changed, 5 insertions(+) create mode 100644 include/grub/i386/xen_pvh/boot.h create mode 100644 include/grub/i386/xen_pvh/console.h create mode 100644 include/grub/i386/xen_pvh/int.h create mode 100644 include/grub/i386/xen_pvh/memory.h create mode 100644 include/grub/i386/xen_pvh/time.hinclude/grub/i386/xen_pvh/boot.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/boot.h> include/grub/i386/xen_pvh/console.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/console.h> include/grub/i386/xen_pvh/int.h new file +0
-0
Quoted 8 lines
include/grub/i386/xen_pvh/int.h line 1
Quoted 5 lines
index 000000000..0f1f9ee62
include/grub/i386/xen_pvh/int.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/int_types.h> I think that this begs for explanation in the commit message why not
grub/i386/pc/int.h.
Okay.
Quoted 10 lines
include/grub/i386/xen_pvh/memory.h line 1
Quoted 8 lines
include/grub/i386/xen_pvh/memory.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/coreboot/memory.h> Hmmm... Why not
include/grub/i386/pc/memory.h?
The coreboot variant is containing the stubs grub_machine_mmap_register and grub_machine_mmap_unregister I need, with the pc variant I'd have to add those to xen-pvh code.
Using the coreboot variant for that purpose seems to be common practice:include/grub/i386/qemu/memory.h include/grub/i386/ieee1275/memory.h include/grub/i386/multiboot/memory.h
are doing exactly the same.
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerRe: [PATCH v4 05/19] xen: add some dummy headers for PVH mode
In reply to Daniel KiperQuoted 38 lines · Daniel Kiper
Quoted 37 lines · Juergen Gross
With Xen PVH mode adding a new machine type the machine related headers need to be present for the build to succeed. Most of the headers just need to include the related common i386 headers. Add those to the tree.
Signed-off-by Juergen Gross <[email protected]>---
V3: updated commit message (Daniel Kiper)xenpvh->xen_pvh (Daniel Kiper) --- include/grub/i386/xen_pvh/boot.h | 1 + include/grub/i386/xen_pvh/console.h | 1 + include/grub/i386/xen_pvh/int.h | 1 + include/grub/i386/xen_pvh/memory.h | 1 + include/grub/i386/xen_pvh/time.h | 1 + 5 files changed, 5 insertions(+) create mode 100644 include/grub/i386/xen_pvh/boot.h create mode 100644 include/grub/i386/xen_pvh/console.h create mode 100644 include/grub/i386/xen_pvh/int.h create mode 100644 include/grub/i386/xen_pvh/memory.h create mode 100644 include/grub/i386/xen_pvh/time.hinclude/grub/i386/xen_pvh/boot.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/boot.h> include/grub/i386/xen_pvh/console.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/console.h> include/grub/i386/xen_pvh/int.h new file +0
-0
Quoted 8 lines
include/grub/i386/xen_pvh/int.h line 1
Quoted 5 lines
index 000000000..0f1f9ee62
include/grub/i386/xen_pvh/int.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/int_types.h> I think that this begs for explanation in the commit message why not
grub/i386/pc/int.h.
Okay.
Quoted 10 lines
include/grub/i386/xen_pvh/memory.h line 1
Quoted 8 lines
include/grub/i386/xen_pvh/memory.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/coreboot/memory.h> Hmmm... Why not
include/grub/i386/pc/memory.h?
The coreboot variant is containing the stubs grub_machine_mmap_register and grub_machine_mmap_unregister I need, with the pc variant I'd have to add those to xen-pvh code.
Using the coreboot variant for that purpose seems to be common practice:include/grub/i386/qemu/memory.h include/grub/i386/ieee1275/memory.h include/grub/i386/multiboot/memory.h
are doing exactly the same.
Juergen
Re: [PATCH v4 05/19] xen: add some dummy headers for PVH mode
Quoted 65 lines · Juergen Gross
Quoted 38 lines · Daniel Kiper
Quoted 37 lines · Juergen Gross
With Xen PVH mode adding a new machine type the machine related headers need to be present for the build to succeed. Most of the headers just need to include the related common i386 headers. Add those to the tree.
Signed-off-by Juergen Gross <[email protected]>---
V3: updated commit message (Daniel Kiper)xenpvh->xen_pvh (Daniel Kiper) --- include/grub/i386/xen_pvh/boot.h | 1 + include/grub/i386/xen_pvh/console.h | 1 + include/grub/i386/xen_pvh/int.h | 1 + include/grub/i386/xen_pvh/memory.h | 1 + include/grub/i386/xen_pvh/time.h | 1 + 5 files changed, 5 insertions(+) create mode 100644 include/grub/i386/xen_pvh/boot.h create mode 100644 include/grub/i386/xen_pvh/console.h create mode 100644 include/grub/i386/xen_pvh/int.h create mode 100644 include/grub/i386/xen_pvh/memory.h create mode 100644 include/grub/i386/xen_pvh/time.hinclude/grub/i386/xen_pvh/boot.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/boot.h> include/grub/i386/xen_pvh/console.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/console.h> include/grub/i386/xen_pvh/int.h new file +0
-0Quoted 8 lines
include/grub/i386/xen_pvh/int.h line 1
Quoted 5 lines
index 000000000..0f1f9ee62
include/grub/i386/xen_pvh/int.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/int_types.h> I think that this begs for explanation in the commit message why not
grub/i386/pc/int.h.Okay.
Quoted 10 lines
include/grub/i386/xen_pvh/memory.h line 1
Quoted 8 lines
include/grub/i386/xen_pvh/memory.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/coreboot/memory.h> Hmmm... Why not
include/grub/i386/pc/memory.h?The coreboot variant is containing the stubs
grub_machine_mmap_registerandgrub_machine_mmap_unregisterI need, with the pc variant I'd have to add those to xen-pvh code.
Quoted 5 lines
Using the coreboot variant for that purpose seems to be common practice:
include/grub/i386/qemu/memory.hinclude/grub/i386/ieee1275/memory.hinclude/grub/i386/multiboot/memory.h
are doing exactly the same.
I am OK with it then. However, please say about that in the commit message. Otherwise it looks like a mistake.
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 05/19] xen: add some dummy headers for PVH mode
In reply to Juergen GrossQuoted 65 lines · Juergen Gross
Quoted 38 lines · Daniel Kiper
Quoted 37 lines · Juergen Gross
With Xen PVH mode adding a new machine type the machine related headers need to be present for the build to succeed. Most of the headers just need to include the related common i386 headers. Add those to the tree.
Signed-off-by Juergen Gross <[email protected]>---
V3: updated commit message (Daniel Kiper)xenpvh->xen_pvh (Daniel Kiper) --- include/grub/i386/xen_pvh/boot.h | 1 + include/grub/i386/xen_pvh/console.h | 1 + include/grub/i386/xen_pvh/int.h | 1 + include/grub/i386/xen_pvh/memory.h | 1 + include/grub/i386/xen_pvh/time.h | 1 + 5 files changed, 5 insertions(+) create mode 100644 include/grub/i386/xen_pvh/boot.h create mode 100644 include/grub/i386/xen_pvh/console.h create mode 100644 include/grub/i386/xen_pvh/int.h create mode 100644 include/grub/i386/xen_pvh/memory.h create mode 100644 include/grub/i386/xen_pvh/time.hinclude/grub/i386/xen_pvh/boot.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/boot.h> include/grub/i386/xen_pvh/console.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/console.h> include/grub/i386/xen_pvh/int.h new file +0
-0Quoted 8 lines
include/grub/i386/xen_pvh/int.h line 1
Quoted 5 lines
index 000000000..0f1f9ee62
include/grub/i386/xen_pvh/int.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/int_types.h> I think that this begs for explanation in the commit message why not
grub/i386/pc/int.h.Okay.
Quoted 10 lines
include/grub/i386/xen_pvh/memory.h line 1
Quoted 8 lines
include/grub/i386/xen_pvh/memory.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/coreboot/memory.h> Hmmm... Why not
include/grub/i386/pc/memory.h?The coreboot variant is containing the stubs
grub_machine_mmap_registerandgrub_machine_mmap_unregisterI need, with the pc variant I'd have to add those to xen-pvh code.
Quoted 5 lines
Using the coreboot variant for that purpose seems to be common practice:
include/grub/i386/qemu/memory.hinclude/grub/i386/ieee1275/memory.hinclude/grub/i386/multiboot/memory.h
are doing exactly the same.
I am OK with it then. However, please say about that in the commit message. Otherwise it looks like a mistake.
Daniel
Juergen Gross
maintainerRe: [PATCH v4 05/19] xen: add some dummy headers for PVH mode
Quoted 66 lines · Daniel Kiper
Quoted 65 lines · Juergen Gross
Quoted 38 lines · Daniel Kiper
Quoted 37 lines · Juergen Gross
With Xen PVH mode adding a new machine type the machine related headers need to be present for the build to succeed. Most of the headers just need to include the related common i386 headers. Add those to the tree.
Signed-off-by Juergen Gross <[email protected]>---
V3: updated commit message (Daniel Kiper)xenpvh->xen_pvh (Daniel Kiper) --- include/grub/i386/xen_pvh/boot.h | 1 + include/grub/i386/xen_pvh/console.h | 1 + include/grub/i386/xen_pvh/int.h | 1 + include/grub/i386/xen_pvh/memory.h | 1 + include/grub/i386/xen_pvh/time.h | 1 + 5 files changed, 5 insertions(+) create mode 100644 include/grub/i386/xen_pvh/boot.h create mode 100644 include/grub/i386/xen_pvh/console.h create mode 100644 include/grub/i386/xen_pvh/int.h create mode 100644 include/grub/i386/xen_pvh/memory.h create mode 100644 include/grub/i386/xen_pvh/time.hinclude/grub/i386/xen_pvh/boot.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/boot.h> include/grub/i386/xen_pvh/console.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/console.h> include/grub/i386/xen_pvh/int.h new file +0
-0Quoted 8 lines
include/grub/i386/xen_pvh/int.h line 1
Quoted 5 lines
index 000000000..0f1f9ee62
include/grub/i386/xen_pvh/int.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/int_types.h> I think that this begs for explanation in the commit message why not
grub/i386/pc/int.h.Okay.
Quoted 10 lines
include/grub/i386/xen_pvh/memory.h line 1
Quoted 8 lines
include/grub/i386/xen_pvh/memory.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/coreboot/memory.h> Hmmm... Why not
include/grub/i386/pc/memory.h?The coreboot variant is containing the stubs
grub_machine_mmap_registerandgrub_machine_mmap_unregisterI need, with the pc variant I'd have to add those to xen-pvh code.
Quoted 8 lines
Quoted 5 lines
Using the coreboot variant for that purpose seems to be common practice:
include/grub/i386/qemu/memory.hinclude/grub/i386/ieee1275/memory.hinclude/grub/i386/multiboot/memory.h
are doing exactly the same.I am OK with it then. However, please say about that in the commit message. Otherwise it looks like a mistake.
Will do.
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerRe: [PATCH v4 05/19] xen: add some dummy headers for PVH mode
In reply to Daniel KiperQuoted 66 lines · Daniel Kiper
Quoted 65 lines · Juergen Gross
Quoted 38 lines · Daniel Kiper
Quoted 37 lines · Juergen Gross
With Xen PVH mode adding a new machine type the machine related headers need to be present for the build to succeed. Most of the headers just need to include the related common i386 headers. Add those to the tree.
Signed-off-by Juergen Gross <[email protected]>---
V3: updated commit message (Daniel Kiper)xenpvh->xen_pvh (Daniel Kiper) --- include/grub/i386/xen_pvh/boot.h | 1 + include/grub/i386/xen_pvh/console.h | 1 + include/grub/i386/xen_pvh/int.h | 1 + include/grub/i386/xen_pvh/memory.h | 1 + include/grub/i386/xen_pvh/time.h | 1 + 5 files changed, 5 insertions(+) create mode 100644 include/grub/i386/xen_pvh/boot.h create mode 100644 include/grub/i386/xen_pvh/console.h create mode 100644 include/grub/i386/xen_pvh/int.h create mode 100644 include/grub/i386/xen_pvh/memory.h create mode 100644 include/grub/i386/xen_pvh/time.hinclude/grub/i386/xen_pvh/boot.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/boot.h> include/grub/i386/xen_pvh/console.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/console.h> include/grub/i386/xen_pvh/int.h new file +0
-0Quoted 8 lines
include/grub/i386/xen_pvh/int.h line 1
Quoted 5 lines
index 000000000..0f1f9ee62
include/grub/i386/xen_pvh/int.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/pc/int_types.h> I think that this begs for explanation in the commit message why not
grub/i386/pc/int.h.Okay.
Quoted 10 lines
include/grub/i386/xen_pvh/memory.h line 1
Quoted 8 lines
include/grub/i386/xen_pvh/memory.h new file +1
-0@@ -0,0 +1 @@ +#include <grub/i386/coreboot/memory.h> Hmmm... Why not
include/grub/i386/pc/memory.h?The coreboot variant is containing the stubs
grub_machine_mmap_registerandgrub_machine_mmap_unregisterI need, with the pc variant I'd have to add those to xen-pvh code.
Quoted 8 lines
Quoted 5 lines
Using the coreboot variant for that purpose seems to be common practice:
include/grub/i386/qemu/memory.hinclude/grub/i386/ieee1275/memory.hinclude/grub/i386/multiboot/memory.h
are doing exactly the same.I am OK with it then. However, please say about that in the commit message. Otherwise it looks like a mistake.
Will do.
Juergen
Juergen Gross
maintainerPATCH v4 6/19 xen: rearrange xen/init.c to prepare it for Xen PVH mode
In reply to Juergen GrossRearrange grub-core/kern/xen/init.c to prepare adding PVH mode support to it. This includes putting some code under #ifdef GRUB_MACHINE_XEN as it will not be used when running as PVH.
--- grub-core/kern/xen/init.c | 60 +++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 26 deletions(-)
grub-core/kern/xen/init.c +34 -26
@@ -41,9 +41,11 @@ grub_size_t grub_xen_n_allocated_shared_pages;static grub_xen_mfn_t grub_xen_ptr2mfn (void *ptr) { +#ifdef GRUB_MACHINE_XEN grub_xen_mfn_t *mfn_list = (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;return mfn_list[(grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ]; +#endif } void *
@@ -104,18 +106,6 @@ grub_machine_get_bootlocation (char **device __attribute__ ((unused)), { } -static grub_uint8_t window[GRUB_XEN_PAGE_SIZE] - __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); - -#ifdef __x86_64__ -#define NUMBER_OF_LEVELS 4 -#else -#define NUMBER_OF_LEVELS 3 -#endif - -#define LOG_POINTERS_PER_PAGE 9 -#define POINTERS_PER_PAGE (1 << LOG_POINTERS_PER_PAGE) -void grub_xen_store_send (const void *buf_,grub_size_t len) {
@@ -337,6 +327,19 @@ grub_xen_setup_gnttab (void)grub_xen_grant_table_op (GNTTABOP_setup_table, &gnttab_setup,1 ); } +#ifdef GRUB_MACHINE_XEN +static grub_uint8_t window[GRUB_XEN_PAGE_SIZE] + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); + +#ifdef __x86_64__ +#define NUMBER_OF_LEVELS 4 +#else +#define NUMBER_OF_LEVELS 3 +#endif + +#define LOG_POINTERS_PER_PAGE 9 +#define POINTERS_PER_PAGE (1 << LOG_POINTERS_PER_PAGE) +#define MAX_N_UNUSABLE_PAGES 4 static int
@@ -529,13 +532,30 @@ map_all_pages (void)grub_mm_init_region ((void *) heap_start, heap_end - heap_start); } +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook,void *hook_data) +{ +grub_uint64_t total_pages = grub_xen_start_page_addr->nr_pages; +grub_uint64_t usable_pages = grub_xen_start_page_addr->pt_base >>12 ; +if (hook (0 ,page2offset (usable_pages),GRUB_MEMORY_AVAILABLE , hook_data)) +return GRUB_ERR_NONE ; + +hook (page2offset (usable_pages),page2offset (total_pages - usable_pages), +GRUB_MEMORY_RESERVED , hook_data); + +return GRUB_ERR_NONE ; +} +#endif +extern char _end[];void grub_machine_init (void ) { +#ifdef GRUB_MACHINE_XEN #ifdef __i386__grub_xen_vm_assist (VMASST_CMD_enable, VMASST_TYPE_pae_extended_cr3); +#endif #endif grub_modbase = ALIGN_UP ((grub_addr_t) _end
@@ -544,7 +564,9 @@ grub_machine_init (void)grub_xen_setup_gnttab (); +#ifdef GRUB_MACHINE_XEN map_all_pages (); +#endif grub_console_init ();
@@ -571,17 +593,3 @@ grub_machine_fini (int flags __attribute__ ((unused)))grub_xendisk_fini ();grub_boot_fini (); } - -grub_err_t -grub_machine_mmap_iterate (grub_memory_hook_t hook,void *hook_data) -{ -grub_uint64_t total_pages = grub_xen_start_page_addr->nr_pages; -grub_uint64_t usable_pages = grub_xen_start_page_addr->pt_base >>12 ; -if (hook (0 ,page2offset (usable_pages),GRUB_MEMORY_AVAILABLE , hook_data)) -return GRUB_ERR_NONE ; - -hook (page2offset (usable_pages),page2offset (total_pages - usable_pages), -GRUB_MEMORY_RESERVED , hook_data); - -return GRUB_ERR_NONE ; -}
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerPATCH v4 7/19 xen: add PVH specific defines to offset.h
In reply to Juergen Grossinclude/grub/offsets.h needs some defines for Xen PVH mode.
Add them. While at it line up the values in the surrounding lines to start at the same column.
---
V3: XENPVH->XEN_PVH (Daniel Kiper)
--- include/grub/offsets.h | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)
include/grub/offsets.h +12 -9
@@ -36,9 +36,10 @@#define GRUB_DECOMPRESSOR_I386_PC_MAX_DECOMPRESSOR_SIZE (0x9000-0x8200)/* The segment where the kernel is loaded. */ -#define GRUB_BOOT_I386_PC_KERNEL_SEG 0x800 +#define GRUB_BOOT_I386_PC_KERNEL_SEG 0x800 -#define GRUB_KERNEL_I386_PC_LINK_ADDR 0x9000 +#define GRUB_KERNEL_I386_PC_LINK_ADDR 0x9000 +#define GRUB_KERNEL_I386_XEN_PVH_LINK_ADDR 0x100000/* The upper memory area (starting at 640 kiB). */ #define GRUB_MEMORY_I386_PC_UPPER 0xa0000
@@ -101,15 +102,17 @@#define GRUB_KERNEL_I386_MULTIBOOT_MOD_ALIGN GRUB_KERNEL_I386_COREBOOT_MOD_ALIGN#define GRUB_KERNEL_X86_64_XEN_MOD_ALIGN 0x8 -#define GRUB_KERNEL_I386_XEN_MOD_ALIGN 0x8 +#define GRUB_KERNEL_I386_XEN_MOD_ALIGN 0x8 +#define GRUB_KERNEL_I386_XEN_PVH_MOD_ALIGN 0x8/* Non-zero value is only needed for PowerMacs. */ -#define GRUB_KERNEL_X86_64_XEN_MOD_GAP 0x0 -#define GRUB_KERNEL_I386_XEN_MOD_GAP 0x0 -#define GRUB_KERNEL_I386_IEEE1275_MOD_GAP 0x0 -#define GRUB_KERNEL_I386_COREBOOT_MOD_GAP 0x0 -#define GRUB_KERNEL_SPARC64_IEEE1275_MOD_GAP 0x0 -#define GRUB_KERNEL_ARM_UBOOT_MOD_GAP 0x0 +#define GRUB_KERNEL_X86_64_XEN_MOD_GAP 0x0 +#define GRUB_KERNEL_I386_XEN_MOD_GAP 0x0 +#define GRUB_KERNEL_I386_XEN_PVH_MOD_GAP 0x0 +#define GRUB_KERNEL_I386_IEEE1275_MOD_GAP 0x0 +#define GRUB_KERNEL_I386_COREBOOT_MOD_GAP 0x0 +#define GRUB_KERNEL_SPARC64_IEEE1275_MOD_GAP 0x0 +#define GRUB_KERNEL_ARM_UBOOT_MOD_GAP 0x0#define GRUB_KERNEL_POWERPC_IEEE1275_MOD_ALIGN 0x1000#define GRUB_KERNEL_SPARC64_IEEE1275_LOG_MOD_ALIGN 3
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 07/19] xen: add PVH specific defines to offset.h
Quoted 6 lines · Juergen Gross
include/grub/offsets.hneeds some defines for Xen PVH mode.Add them. While at it line up the values in the surrounding lines to start at the same column.
Signed-off-by Juergen Gross <[email protected]>
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerPATCH v4 8/19 xen: add basic hooks for PVH in current code
In reply to Juergen GrossAdd the hooks to current code needed for Xen PVH. They will be filled with code later when the related functionality is being added.
---
V3: xenpvh->xen_pvh (Daniel Kiper)
adjust copyright date (Roger Pau Monné)
--- grub-core/kern/i386/xen/pvh.c | 36 +++++++++++++++++++++++++++++++++++ grub-core/kern/i386/xen/startup_pvh.S | 29 ++++++++++++++++++++++++++++ grub-core/kern/xen/init.c | 6 ++++++ grub-core/loader/i386/linux.c | 1 + include/grub/i386/xen_pvh/kernel.h | 30 +++++++++++++++++++++++++++++ include/grub/xen.h | 6 ++++++ 6 files changed, 108 insertions(+) create mode 100644 grub-core/kern/i386/xen/pvh.c create mode 100644 grub-core/kern/i386/xen/startup_pvh.S create mode 100644 include/grub/i386/xen_pvh/kernel.h
grub-core/kern/i386/xen/pvh.c new file +36 -0
@@ -0,0 +1,36 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <grub/kernel.h> +#include <grub/misc.h> +#include <grub/memory.h> +#include <grub/mm.h> +#include <grub/xen.h> +#include <grub/machine/kernel.h> + +grub_uint64_t grub_rsdp_addr; + +void +grub_xen_setup_pvh (void ) +{ +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook,void *hook_data) +{ +}
grub-core/kern/i386/xen/startup_pvh.S new file +29 -0
@@ -0,0 +1,29 @@ +/* startup.S - bootstrap GRUB itself */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <grub/symbol.h> + + .file "startup_pvh.S" + .text + +/* Saved pointer to start info structure. */ + .globl pvh_start_info +pvh_start_info: + .long 0
grub-core/kern/xen/init.c +6 -0
@@ -45,6 +45,8 @@ grub_xen_ptr2mfn (void *ptr)grub_xen_mfn_t *mfn_list = (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;return mfn_list[(grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ]; +#else +return (grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ;#endif }
@@ -562,6 +564,10 @@ grub_machine_init (void) +GRUB_KERNEL_MACHINE_MOD_GAP , GRUB_KERNEL_MACHINE_MOD_ALIGN); +#ifdef GRUB_MACHINE_XEN_PVH +grub_xen_setup_pvh (); +#endif +grub_xen_setup_gnttab ();#ifdef GRUB_MACHINE_XEN
grub-core/loader/i386/linux.c +1 -0
@@ -35,6 +35,7 @@#include <grub/i18n.h> #include <grub/lib/cmdline.h> #include <grub/linux.h> +#include <grub/machine/kernel.h> GRUB_MOD_LICENSE ("GPLv3+" );
include/grub/i386/xen_pvh/kernel.h new file +30 -0
@@ -0,0 +1,30 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef GRUB_KERNEL_MACHINE_HEADER +#define GRUB_KERNEL_MACHINE_HEADER 1 + +#ifndef ASM_FILE + +#define GRUB_KERNEL_USE_RSDP_ADDR 1 + +extern grub_uint64_t EXPORT_VAR (grub_rsdp_addr ); + +#endif /* ! ASM_FILE */ + +#endif /* GRUB_KERNEL_MACHINE_HEADER */
include/grub/xen.h +6 -0
@@ -43,6 +43,7 @@ typedef grub_uint64_t uint64_t;#include <xen/sched.h> #include <xen/grant_table.h> +#include <xen/hvm/start_info.h> #include <xen/io/console.h> #include <xen/io/xs_wire.h> #include <xen/io/xenbus.h>
@@ -95,6 +96,11 @@ typedef grub_uint64_t grub_xen_mfn_t;typedef grub_uint32_t grub_xen_mfn_t ;#endif typedef unsigned int grub_xen_evtchn_t ; + +#ifdef GRUB_MACHINE_XEN_PVH +extern struct hvm_start_info *pvh_start_info; +void grub_xen_setup_pvh (void ); +#endif #endif #endif
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 08/19] xen: add basic hooks for PVH in current code
Quoted 101 lines · Juergen Gross
Add the hooks to current code needed for Xen PVH. They will be filled with code later when the related functionality is being added.
Signed-off-by Juergen Gross <[email protected]>---
V3:xenpvh->xen_pvh(Daniel Kiper)
adjust copyright date (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 36 +++++++++++++++++++++++++++++++++++ grub-core/kern/i386/xen/startup_pvh.S | 29 ++++++++++++++++++++++++++++ grub-core/kern/xen/init.c | 6 ++++++ grub-core/loader/i386/linux.c | 1 + include/grub/i386/xen_pvh/kernel.h | 30 +++++++++++++++++++++++++++++ include/grub/xen.h | 6 ++++++ 6 files changed, 108 insertions(+) create mode 100644 grub-core/kern/i386/xen/pvh.c create mode 100644 grub-core/kern/i386/xen/startup_pvh.S create mode 100644 include/grub/i386/xen_pvh/kernel.hgrub-core/kern/i386/xen/pvh.c new file +36
-0@@ -0,0 +1,36 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <grub/kernel.h> +#include <grub/misc.h> +#include <grub/memory.h> +#include <grub/mm.h> +#include <grub/xen.h> +#include <grub/machine/kernel.h> + +grub_uint64_t grub_rsdp_addr; + +void +grub_xen_setup_pvh (void ) +{ +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook,void *hook_data) +{ +}grub-core/kern/i386/xen/startup_pvh.S new file +29
-0@@ -0,0 +1,29 @@ +/* startup.S - bootstrap GRUB itself */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <grub/symbol.h> + + .file "startup_pvh.S" + .text + +/* Saved pointer to start info structure. */ + .globl pvh_start_info +pvh_start_info: + .long 0grub-core/kern/xen/init.c +0
-0
grub-core/kern/xen/init.c grub_xen_ptr2mfn (void *ptr) · line 49
Quoted 5 lines
grub-core/kern/xen/init.c +2
-0@@ -45,6 +45,8 @@ grub_xen_ptr2mfn (void *ptr)grub_xen_mfn_t *mfn_list = (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;return mfn_list[(grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ]; +#else +return (grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ;
It seems to me that this change does not belong to this patch.
Quoted 19 lines
grub-core/kern/xen/init.c +4
-0#endif }@@ -562,6 +564,10 @@ grub_machine_init (void) +GRUB_KERNEL_MACHINE_MOD_GAP , GRUB_KERNEL_MACHINE_MOD_ALIGN); +#ifdef GRUB_MACHINE_XEN_PVH +grub_xen_setup_pvh (); +#endif +grub_xen_setup_gnttab ();#ifdef GRUB_MACHINE_XEN grub-core/loader/i386/linux.c +0
-0
grub-core/loader/i386/linux.c line 38
Quoted 4 lines
grub-core/loader/i386/linux.c +1
-0@@ -35,6 +35,7 @@#include <grub/i18n.h> #include <grub/lib/cmdline.h> #include <grub/linux.h> +#include <grub/machine/kernel.h>
Please say in the commit message why you include grub/machine/kernel.h here.
Quoted 43 lines
grub-core/loader/i386/linux.c +0
-0GRUB_MOD_LICENSE ("GPLv3+" );include/grub/i386/xen_pvh/kernel.h new file +30
-0@@ -0,0 +1,30 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef GRUB_KERNEL_MACHINE_HEADER +#define GRUB_KERNEL_MACHINE_HEADER 1 + +#ifndef ASM_FILE + +#define GRUB_KERNEL_USE_RSDP_ADDR 1 + +extern grub_uint64_t EXPORT_VAR (grub_rsdp_addr ); + +#endif /* ! ASM_FILE */ + +#endif /* GRUB_KERNEL_MACHINE_HEADER */ include/grub/xen.h +0
-0
include/grub/xen.h typedef grub_uint64_t uint64_t; · line 46
Quoted 4 lines
include/grub/xen.h +1
-0@@ -43,6 +43,7 @@ typedef grub_uint64_t uint64_t;#include <xen/sched.h> #include <xen/grant_table.h> +#include <xen/hvm/start_info.h>
Hmmm... Why?
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 08/19] xen: add basic hooks for PVH in current code
In reply to Juergen GrossQuoted 101 lines · Juergen Gross
Add the hooks to current code needed for Xen PVH. They will be filled with code later when the related functionality is being added.
Signed-off-by Juergen Gross <[email protected]>---
V3:xenpvh->xen_pvh(Daniel Kiper)
adjust copyright date (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 36 +++++++++++++++++++++++++++++++++++ grub-core/kern/i386/xen/startup_pvh.S | 29 ++++++++++++++++++++++++++++ grub-core/kern/xen/init.c | 6 ++++++ grub-core/loader/i386/linux.c | 1 + include/grub/i386/xen_pvh/kernel.h | 30 +++++++++++++++++++++++++++++ include/grub/xen.h | 6 ++++++ 6 files changed, 108 insertions(+) create mode 100644 grub-core/kern/i386/xen/pvh.c create mode 100644 grub-core/kern/i386/xen/startup_pvh.S create mode 100644 include/grub/i386/xen_pvh/kernel.hgrub-core/kern/i386/xen/pvh.c new file +36
-0@@ -0,0 +1,36 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <grub/kernel.h> +#include <grub/misc.h> +#include <grub/memory.h> +#include <grub/mm.h> +#include <grub/xen.h> +#include <grub/machine/kernel.h> + +grub_uint64_t grub_rsdp_addr; + +void +grub_xen_setup_pvh (void ) +{ +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook,void *hook_data) +{ +}grub-core/kern/i386/xen/startup_pvh.S new file +29
-0@@ -0,0 +1,29 @@ +/* startup.S - bootstrap GRUB itself */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <grub/symbol.h> + + .file "startup_pvh.S" + .text + +/* Saved pointer to start info structure. */ + .globl pvh_start_info +pvh_start_info: + .long 0grub-core/kern/xen/init.c +0
-0
grub-core/kern/xen/init.c grub_xen_ptr2mfn (void *ptr) · line 49
Quoted 5 lines
grub-core/kern/xen/init.c +2
-0@@ -45,6 +45,8 @@ grub_xen_ptr2mfn (void *ptr)grub_xen_mfn_t *mfn_list = (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;return mfn_list[(grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ]; +#else +return (grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ;
It seems to me that this change does not belong to this patch.
Quoted 19 lines
grub-core/kern/xen/init.c +4
-0#endif }@@ -562,6 +564,10 @@ grub_machine_init (void) +GRUB_KERNEL_MACHINE_MOD_GAP , GRUB_KERNEL_MACHINE_MOD_ALIGN); +#ifdef GRUB_MACHINE_XEN_PVH +grub_xen_setup_pvh (); +#endif +grub_xen_setup_gnttab ();#ifdef GRUB_MACHINE_XEN grub-core/loader/i386/linux.c +0
-0
grub-core/loader/i386/linux.c line 38
Quoted 4 lines
grub-core/loader/i386/linux.c +1
-0@@ -35,6 +35,7 @@#include <grub/i18n.h> #include <grub/lib/cmdline.h> #include <grub/linux.h> +#include <grub/machine/kernel.h>
Please say in the commit message why you include grub/machine/kernel.h here.
Quoted 43 lines
grub-core/loader/i386/linux.c +0
-0GRUB_MOD_LICENSE ("GPLv3+" );include/grub/i386/xen_pvh/kernel.h new file +30
-0@@ -0,0 +1,30 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef GRUB_KERNEL_MACHINE_HEADER +#define GRUB_KERNEL_MACHINE_HEADER 1 + +#ifndef ASM_FILE + +#define GRUB_KERNEL_USE_RSDP_ADDR 1 + +extern grub_uint64_t EXPORT_VAR (grub_rsdp_addr ); + +#endif /* ! ASM_FILE */ + +#endif /* GRUB_KERNEL_MACHINE_HEADER */ include/grub/xen.h +0
-0
include/grub/xen.h typedef grub_uint64_t uint64_t; · line 46
Quoted 4 lines
include/grub/xen.h +1
-0@@ -43,6 +43,7 @@ typedef grub_uint64_t uint64_t;#include <xen/sched.h> #include <xen/grant_table.h> +#include <xen/hvm/start_info.h>
Hmmm... Why?
Daniel
Juergen Gross
maintainerRe: [PATCH v4 08/19] xen: add basic hooks for PVH in current code
Quoted 101 lines · Daniel Kiper
Quoted 100 lines · Juergen Gross
Add the hooks to current code needed for Xen PVH. They will be filled with code later when the related functionality is being added.
Signed-off-by Juergen Gross <[email protected]>---
V3:xenpvh->xen_pvh(Daniel Kiper)
adjust copyright date (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 36 +++++++++++++++++++++++++++++++++++ grub-core/kern/i386/xen/startup_pvh.S | 29 ++++++++++++++++++++++++++++ grub-core/kern/xen/init.c | 6 ++++++ grub-core/loader/i386/linux.c | 1 + include/grub/i386/xen_pvh/kernel.h | 30 +++++++++++++++++++++++++++++ include/grub/xen.h | 6 ++++++ 6 files changed, 108 insertions(+) create mode 100644 grub-core/kern/i386/xen/pvh.c create mode 100644 grub-core/kern/i386/xen/startup_pvh.S create mode 100644 include/grub/i386/xen_pvh/kernel.hgrub-core/kern/i386/xen/pvh.c new file +36
-0@@ -0,0 +1,36 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <grub/kernel.h> +#include <grub/misc.h> +#include <grub/memory.h> +#include <grub/mm.h> +#include <grub/xen.h> +#include <grub/machine/kernel.h> + +grub_uint64_t grub_rsdp_addr; + +void +grub_xen_setup_pvh (void ) +{ +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook,void *hook_data) +{ +}grub-core/kern/i386/xen/startup_pvh.S new file +29
-0@@ -0,0 +1,29 @@ +/* startup.S - bootstrap GRUB itself */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <grub/symbol.h> + + .file "startup_pvh.S" + .text + +/* Saved pointer to start info structure. */ + .globl pvh_start_info +pvh_start_info: + .long 0grub-core/kern/xen/init.c +0
-0
Quoted 8 lines
grub-core/kern/xen/init.c grub_xen_ptr2mfn (void *ptr) · line 49
Quoted 6 lines
grub-core/kern/xen/init.c +2
-0@@ -45,6 +45,8 @@ grub_xen_ptr2mfn (void *ptr)grub_xen_mfn_t *mfn_list = (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;return mfn_list[(grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ]; +#else +return (grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ;It seems to me that this change does not belong to this patch.
Hmm, in which patch would you put it?
I wanted to have all modifications to current grub-core code in place after this patch. This includes all needed #ifdefs.
Quoted 14 lines
Quoted 14 lines
grub-core/kern/xen/init.c +4
-0#endif }@@ -562,6 +564,10 @@ grub_machine_init (void) +GRUB_KERNEL_MACHINE_MOD_GAP , GRUB_KERNEL_MACHINE_MOD_ALIGN); +#ifdef GRUB_MACHINE_XEN_PVH +grub_xen_setup_pvh (); +#endif +grub_xen_setup_gnttab ();
Quoted 12 lines
grub-core/loader/i386/linux.c line 38
Quoted 10 lines
grub-core/kern/xen/init.c +0
-0#ifdef GRUB_MACHINE_XEN grub-core/loader/i386/linux.c +1
-0@@ -35,6 +35,7 @@#include <grub/i18n.h> #include <grub/lib/cmdline.h> #include <grub/linux.h> +#include <grub/machine/kernel.h> Please say in the commit message why you include
grub/machine/kernel.hhere.
Okay.
Quoted 45 lines
Quoted 45 lines
grub-core/loader/i386/linux.c +0
-0GRUB_MOD_LICENSE ("GPLv3+" );include/grub/i386/xen_pvh/kernel.h new file +30
-0@@ -0,0 +1,30 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef GRUB_KERNEL_MACHINE_HEADER +#define GRUB_KERNEL_MACHINE_HEADER 1 + +#ifndef ASM_FILE + +#define GRUB_KERNEL_USE_RSDP_ADDR 1 + +extern grub_uint64_t EXPORT_VAR (grub_rsdp_addr ); + +#endif /* ! ASM_FILE */ + +#endif /* GRUB_KERNEL_MACHINE_HEADER */ include/grub/xen.h +0
-0@@ -43,6 +43,7 @@ typedef grub_uint64_t uint64_t;
Quoted 5 lines
include/grub/xen.h typedef grub_uint64_t uint64_t; · line 46
Quoted 3 lines
include/grub/xen.h +1
-0#include <xen/sched.h> #include <xen/grant_table.h> +#include <xen/hvm/start_info.h> Hmmm... Why?
This header contains all #includes of xen interface headers.
I can omit this one and add it to the source files where it is needed if you like that better.
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerRe: [Xen-devel] [PATCH v4 08/19] xen: add basic hooks for PVH in current code
In reply to Daniel KiperQuoted 101 lines · Daniel Kiper
Quoted 100 lines · Juergen Gross
Add the hooks to current code needed for Xen PVH. They will be filled with code later when the related functionality is being added.
Signed-off-by Juergen Gross <[email protected]>---
V3:xenpvh->xen_pvh(Daniel Kiper)
adjust copyright date (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 36 +++++++++++++++++++++++++++++++++++ grub-core/kern/i386/xen/startup_pvh.S | 29 ++++++++++++++++++++++++++++ grub-core/kern/xen/init.c | 6 ++++++ grub-core/loader/i386/linux.c | 1 + include/grub/i386/xen_pvh/kernel.h | 30 +++++++++++++++++++++++++++++ include/grub/xen.h | 6 ++++++ 6 files changed, 108 insertions(+) create mode 100644 grub-core/kern/i386/xen/pvh.c create mode 100644 grub-core/kern/i386/xen/startup_pvh.S create mode 100644 include/grub/i386/xen_pvh/kernel.hgrub-core/kern/i386/xen/pvh.c new file +36
-0@@ -0,0 +1,36 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <grub/kernel.h> +#include <grub/misc.h> +#include <grub/memory.h> +#include <grub/mm.h> +#include <grub/xen.h> +#include <grub/machine/kernel.h> + +grub_uint64_t grub_rsdp_addr; + +void +grub_xen_setup_pvh (void ) +{ +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook,void *hook_data) +{ +}grub-core/kern/i386/xen/startup_pvh.S new file +29
-0@@ -0,0 +1,29 @@ +/* startup.S - bootstrap GRUB itself */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <grub/symbol.h> + + .file "startup_pvh.S" + .text + +/* Saved pointer to start info structure. */ + .globl pvh_start_info +pvh_start_info: + .long 0grub-core/kern/xen/init.c +0
-0
Quoted 8 lines
grub-core/kern/xen/init.c grub_xen_ptr2mfn (void *ptr) · line 49
Quoted 6 lines
grub-core/kern/xen/init.c +2
-0@@ -45,6 +45,8 @@ grub_xen_ptr2mfn (void *ptr)grub_xen_mfn_t *mfn_list = (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;return mfn_list[(grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ]; +#else +return (grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ;It seems to me that this change does not belong to this patch.
Hmm, in which patch would you put it?
I wanted to have all modifications to current grub-core code in place after this patch. This includes all needed #ifdefs.
Quoted 14 lines
Quoted 14 lines
grub-core/kern/xen/init.c +4
-0#endif }@@ -562,6 +564,10 @@ grub_machine_init (void) +GRUB_KERNEL_MACHINE_MOD_GAP , GRUB_KERNEL_MACHINE_MOD_ALIGN); +#ifdef GRUB_MACHINE_XEN_PVH +grub_xen_setup_pvh (); +#endif +grub_xen_setup_gnttab ();
Quoted 12 lines
grub-core/loader/i386/linux.c line 38
Quoted 10 lines
grub-core/kern/xen/init.c +0
-0#ifdef GRUB_MACHINE_XEN grub-core/loader/i386/linux.c +1
-0@@ -35,6 +35,7 @@#include <grub/i18n.h> #include <grub/lib/cmdline.h> #include <grub/linux.h> +#include <grub/machine/kernel.h> Please say in the commit message why you include
grub/machine/kernel.hhere.
Okay.
Quoted 45 lines
Quoted 45 lines
grub-core/loader/i386/linux.c +0
-0GRUB_MOD_LICENSE ("GPLv3+" );include/grub/i386/xen_pvh/kernel.h new file +30
-0@@ -0,0 +1,30 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef GRUB_KERNEL_MACHINE_HEADER +#define GRUB_KERNEL_MACHINE_HEADER 1 + +#ifndef ASM_FILE + +#define GRUB_KERNEL_USE_RSDP_ADDR 1 + +extern grub_uint64_t EXPORT_VAR (grub_rsdp_addr ); + +#endif /* ! ASM_FILE */ + +#endif /* GRUB_KERNEL_MACHINE_HEADER */ include/grub/xen.h +0
-0@@ -43,6 +43,7 @@ typedef grub_uint64_t uint64_t;
Quoted 5 lines
include/grub/xen.h typedef grub_uint64_t uint64_t; · line 46
Quoted 3 lines
include/grub/xen.h +1
-0#include <xen/sched.h> #include <xen/grant_table.h> +#include <xen/hvm/start_info.h> Hmmm... Why?
This header contains all #includes of xen interface headers.
I can omit this one and add it to the source files where it is needed if you like that better.
Juergen
Re: [PATCH v4 08/19] xen: add basic hooks for PVH in current code
Quoted 111 lines · Juergen Gross
Quoted 101 lines · Daniel Kiper
Quoted 100 lines · Juergen Gross
Add the hooks to current code needed for Xen PVH. They will be filled with code later when the related functionality is being added.
Signed-off-by Juergen Gross <[email protected]>---
V3:xenpvh->xen_pvh(Daniel Kiper)
adjust copyright date (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 36 +++++++++++++++++++++++++++++++++++ grub-core/kern/i386/xen/startup_pvh.S | 29 ++++++++++++++++++++++++++++ grub-core/kern/xen/init.c | 6 ++++++ grub-core/loader/i386/linux.c | 1 + include/grub/i386/xen_pvh/kernel.h | 30 +++++++++++++++++++++++++++++ include/grub/xen.h | 6 ++++++ 6 files changed, 108 insertions(+) create mode 100644 grub-core/kern/i386/xen/pvh.c create mode 100644 grub-core/kern/i386/xen/startup_pvh.S create mode 100644 include/grub/i386/xen_pvh/kernel.hgrub-core/kern/i386/xen/pvh.c new file +36
-0@@ -0,0 +1,36 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <grub/kernel.h> +#include <grub/misc.h> +#include <grub/memory.h> +#include <grub/mm.h> +#include <grub/xen.h> +#include <grub/machine/kernel.h> + +grub_uint64_t grub_rsdp_addr; + +void +grub_xen_setup_pvh (void ) +{ +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook,void *hook_data) +{ +}grub-core/kern/i386/xen/startup_pvh.S new file +29
-0@@ -0,0 +1,29 @@ +/* startup.S - bootstrap GRUB itself */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <grub/symbol.h> + + .file "startup_pvh.S" + .text + +/* Saved pointer to start info structure. */ + .globl pvh_start_info +pvh_start_info: + .long 0grub-core/kern/xen/init.c +0
-0Quoted 8 lines
grub-core/kern/xen/init.c grub_xen_ptr2mfn (void *ptr) · line 49
Quoted 6 lines
grub-core/kern/xen/init.c +2
-0@@ -45,6 +45,8 @@ grub_xen_ptr2mfn (void *ptr)grub_xen_mfn_t *mfn_list = (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;return mfn_list[(grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ]; +#else +return (grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ;It seems to me that this change does not belong to this patch.
Quoted 1 line
Hmm, in which patch would you put it?
Separate one? Or at least say something in the commit message. Otherwise it is misleading. Hmmm... But probably I prefer the former...
Quoted 83 lines
I wanted to have all modifications to current grub-core code in place after this patch. This includes all needed #ifdefs.
Quoted 14 lines
Quoted 14 lines
grub-core/kern/xen/init.c +4
-0#endif }@@ -562,6 +564,10 @@ grub_machine_init (void) +GRUB_KERNEL_MACHINE_MOD_GAP , GRUB_KERNEL_MACHINE_MOD_ALIGN); +#ifdef GRUB_MACHINE_XEN_PVH +grub_xen_setup_pvh (); +#endif +grub_xen_setup_gnttab ();Quoted 12 lines
grub-core/loader/i386/linux.c line 38
Quoted 10 lines
grub-core/kern/xen/init.c +0
-0#ifdef GRUB_MACHINE_XEN grub-core/loader/i386/linux.c +1
-0@@ -35,6 +35,7 @@#include <grub/i18n.h> #include <grub/lib/cmdline.h> #include <grub/linux.h> +#include <grub/machine/kernel.h> Please say in the commit message why you include
grub/machine/kernel.hhere.Okay.
Quoted 45 lines
Quoted 45 lines
grub-core/loader/i386/linux.c +0
-0GRUB_MOD_LICENSE ("GPLv3+" );include/grub/i386/xen_pvh/kernel.h new file +30
-0@@ -0,0 +1,30 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef GRUB_KERNEL_MACHINE_HEADER +#define GRUB_KERNEL_MACHINE_HEADER 1 + +#ifndef ASM_FILE + +#define GRUB_KERNEL_USE_RSDP_ADDR 1 + +extern grub_uint64_t EXPORT_VAR (grub_rsdp_addr ); + +#endif /* ! ASM_FILE */ + +#endif /* GRUB_KERNEL_MACHINE_HEADER */ include/grub/xen.h +0
-0@@ -43,6 +43,7 @@ typedef grub_uint64_t uint64_t;Quoted 5 lines
include/grub/xen.h typedef grub_uint64_t uint64_t; · line 46
Quoted 3 lines
include/grub/xen.h +1
-0#include <xen/sched.h> #include <xen/grant_table.h> +#include <xen/hvm/start_info.h> Hmmm... Why?
Quoted 4 lines
This header contains all #includes of xen interface headers.
I can omit this one and add it to the source files where it is needed if you like that better.
Yes, please.
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [PATCH v4 08/19] xen: add basic hooks for PVH in current code
In reply to Juergen GrossQuoted 111 lines · Juergen Gross
Quoted 101 lines · Daniel Kiper
Quoted 100 lines · Juergen Gross
Add the hooks to current code needed for Xen PVH. They will be filled with code later when the related functionality is being added.
Signed-off-by Juergen Gross <[email protected]>---
V3:xenpvh->xen_pvh(Daniel Kiper)
adjust copyright date (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 36 +++++++++++++++++++++++++++++++++++ grub-core/kern/i386/xen/startup_pvh.S | 29 ++++++++++++++++++++++++++++ grub-core/kern/xen/init.c | 6 ++++++ grub-core/loader/i386/linux.c | 1 + include/grub/i386/xen_pvh/kernel.h | 30 +++++++++++++++++++++++++++++ include/grub/xen.h | 6 ++++++ 6 files changed, 108 insertions(+) create mode 100644 grub-core/kern/i386/xen/pvh.c create mode 100644 grub-core/kern/i386/xen/startup_pvh.S create mode 100644 include/grub/i386/xen_pvh/kernel.hgrub-core/kern/i386/xen/pvh.c new file +36
-0@@ -0,0 +1,36 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <grub/kernel.h> +#include <grub/misc.h> +#include <grub/memory.h> +#include <grub/mm.h> +#include <grub/xen.h> +#include <grub/machine/kernel.h> + +grub_uint64_t grub_rsdp_addr; + +void +grub_xen_setup_pvh (void ) +{ +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook,void *hook_data) +{ +}grub-core/kern/i386/xen/startup_pvh.S new file +29
-0@@ -0,0 +1,29 @@ +/* startup.S - bootstrap GRUB itself */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <grub/symbol.h> + + .file "startup_pvh.S" + .text + +/* Saved pointer to start info structure. */ + .globl pvh_start_info +pvh_start_info: + .long 0grub-core/kern/xen/init.c +0
-0Quoted 8 lines
grub-core/kern/xen/init.c grub_xen_ptr2mfn (void *ptr) · line 49
Quoted 6 lines
grub-core/kern/xen/init.c +2
-0@@ -45,6 +45,8 @@ grub_xen_ptr2mfn (void *ptr)grub_xen_mfn_t *mfn_list = (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;return mfn_list[(grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ]; +#else +return (grub_addr_t ) ptr >>GRUB_XEN_LOG_PAGE_SIZE ;It seems to me that this change does not belong to this patch.
Quoted 1 line
Hmm, in which patch would you put it?
Separate one? Or at least say something in the commit message. Otherwise it is misleading. Hmmm... But probably I prefer the former...
Quoted 83 lines
I wanted to have all modifications to current grub-core code in place after this patch. This includes all needed #ifdefs.
Quoted 14 lines
Quoted 14 lines
grub-core/kern/xen/init.c +4
-0#endif }@@ -562,6 +564,10 @@ grub_machine_init (void) +GRUB_KERNEL_MACHINE_MOD_GAP , GRUB_KERNEL_MACHINE_MOD_ALIGN); +#ifdef GRUB_MACHINE_XEN_PVH +grub_xen_setup_pvh (); +#endif +grub_xen_setup_gnttab ();Quoted 12 lines
grub-core/loader/i386/linux.c line 38
Quoted 10 lines
grub-core/kern/xen/init.c +0
-0#ifdef GRUB_MACHINE_XEN grub-core/loader/i386/linux.c +1
-0@@ -35,6 +35,7 @@#include <grub/i18n.h> #include <grub/lib/cmdline.h> #include <grub/linux.h> +#include <grub/machine/kernel.h> Please say in the commit message why you include
grub/machine/kernel.hhere.Okay.
Quoted 45 lines
Quoted 45 lines
grub-core/loader/i386/linux.c +0
-0GRUB_MOD_LICENSE ("GPLv3+" );include/grub/i386/xen_pvh/kernel.h new file +30
-0@@ -0,0 +1,30 @@ +/* +* GRUB -- GRand Unified Bootloader +* Copyright (C) 2018 Free Software Foundation, Inc. +* +* GRUB is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* GRUB is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with GRUB. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef GRUB_KERNEL_MACHINE_HEADER +#define GRUB_KERNEL_MACHINE_HEADER 1 + +#ifndef ASM_FILE + +#define GRUB_KERNEL_USE_RSDP_ADDR 1 + +extern grub_uint64_t EXPORT_VAR (grub_rsdp_addr ); + +#endif /* ! ASM_FILE */ + +#endif /* GRUB_KERNEL_MACHINE_HEADER */ include/grub/xen.h +0
-0@@ -43,6 +43,7 @@ typedef grub_uint64_t uint64_t;Quoted 5 lines
include/grub/xen.h typedef grub_uint64_t uint64_t; · line 46
Quoted 3 lines
include/grub/xen.h +1
-0#include <xen/sched.h> #include <xen/grant_table.h> +#include <xen/hvm/start_info.h> Hmmm... Why?
Quoted 4 lines
This header contains all #includes of xen interface headers.
I can omit this one and add it to the source files where it is needed if you like that better.
Yes, please.
Daniel
Juergen Gross
maintainerPATCH v4 9/19 xen: add PVH boot entry code
In reply to Juergen GrossAdd the code for the Xen PVH mode boot entry.
---
V3: clear %fs and %gs, too (Daniel Kiper)
use GRUB_MEMORY_MACHINE_PROT_STACK_SIZE for stack size (Daniel Kiper)
--- grub-core/kern/i386/xen/startup_pvh.S | 52 +++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+)
grub-core/kern/i386/xen/startup_pvh.S +52 -0
@@ -19,11 +19,63 @@ #include <config.h> #include <grub/symbol.h> +#include <grub/machine/memory.h> .file "startup_pvh.S" .text + .globl start, _start + .code32 +start: +_start: + cld + lgdt gdtdesc + ljmp $GRUB_MEMORY_MACHINE_PROT_MODE_CSEG, $1f +1: + movl $GRUB_MEMORY_MACHINE_PROT_MODE_DSEG, %eax + mov %eax, %ds + mov %eax, %es + mov %eax, %ss + mov %eax, %fs + mov %eax, %gs + leal LOCAL(stack_end), %esp + + /* Save address of start info structure. */ + mov %ebx, pvh_start_info + call EXT_C(grub_main) + /* Doesn't return. */ + + .p2align 3 +gdt: + .word 0, 0 + .byte 0, 0, 0, 0 + + /* -- code segment -- + * base = 0x00000000, limit = 0xFFFFF (4 KiB Granularity), present + * type = 32bit code execute/read, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x9A, 0xCF, 0 + + /* -- data segment -- + * base = 0x00000000, limit 0xFFFFF (4 KiB Granularity), present + * type = 32 bit data read/write, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x92, 0xCF, 0 + + .p2align 3 +/* this is the GDT descriptor */ +gdtdesc: + .word 0x17 /* limit */ + .long gdt /* addr */ + + .p2align 2 /* Saved pointer to start info structure. */ .globl pvh_start_info pvh_start_info: .long 0 + + .bss + .space GRUB_MEMORY_MACHINE_PROT_STACK_SIZE +LOCAL(stack_end):
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 09/19] xen: add PVH boot entry code
Quoted 3 lines · Juergen Gross
Add the code for the Xen PVH mode boot entry.
Signed-off-by Juergen Gross <[email protected]>
One nitpick below. Otherwise
Quoted 24 lines
---
V3: clear %fs and %gs, too (Daniel Kiper)
useGRUB_MEMORY_MACHINE_PROT_STACK_SIZEfor stack size (Daniel Kiper)--- grub-core/kern/i386/xen/startup_pvh.S | 52 +++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+)grub-core/kern/i386/xen/startup_pvh.S +5
-0@@ -19,11 +19,63 @@ #include <config.h> #include <grub/symbol.h> +#include <grub/machine/memory.h> .file "startup_pvh.S" .text + .globl start, _start + .code32 +start: +_start:
grub-core/kern/i386/xen/startup_pvh.S line 40
Quoted 10 lines
grub-core/kern/i386/xen/startup_pvh.S +10
-0+ cld + lgdt gdtdesc + ljmp $GRUB_MEMORY_MACHINE_PROT_MODE_CSEG, $1f +1: + movl $GRUB_MEMORY_MACHINE_PROT_MODE_DSEG, %eax + mov %eax, %ds + mov %eax, %es + mov %eax, %ss + mov %eax, %fs + mov %eax, %gs
I would do this in that order:
mov %eax, %ds
mov %eax, %es
mov %eax, %fs
mov %eax, %gs
mov %eax, %ss
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 09/19] xen: add PVH boot entry code
In reply to Juergen GrossQuoted 3 lines · Juergen Gross
Add the code for the Xen PVH mode boot entry.
Signed-off-by Juergen Gross <[email protected]>
One nitpick below. Otherwise
Quoted 24 lines
---
V3: clear %fs and %gs, too (Daniel Kiper)
useGRUB_MEMORY_MACHINE_PROT_STACK_SIZEfor stack size (Daniel Kiper)--- grub-core/kern/i386/xen/startup_pvh.S | 52 +++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+)grub-core/kern/i386/xen/startup_pvh.S +5
-0@@ -19,11 +19,63 @@ #include <config.h> #include <grub/symbol.h> +#include <grub/machine/memory.h> .file "startup_pvh.S" .text + .globl start, _start + .code32 +start: +_start:
grub-core/kern/i386/xen/startup_pvh.S line 40
Quoted 10 lines
grub-core/kern/i386/xen/startup_pvh.S +10
-0+ cld + lgdt gdtdesc + ljmp $GRUB_MEMORY_MACHINE_PROT_MODE_CSEG, $1f +1: + movl $GRUB_MEMORY_MACHINE_PROT_MODE_DSEG, %eax + mov %eax, %ds + mov %eax, %es + mov %eax, %ss + mov %eax, %fs + mov %eax, %gs
I would do this in that order:
mov %eax, %ds
mov %eax, %es
mov %eax, %fs
mov %eax, %gs
mov %eax, %ss
Daniel
Juergen Gross
maintainerPATCH v4 10/19 xen: setup hypercall page for PVH
In reply to Juergen GrossAdd the needed code to setup the hypercall page for calling into the Xen hypervisor.
---
V3: grub_xen_early_halt->grub_xen_panic (Roger Pau Monné)
issue panic message (Roger Pau Monné)
rewrite grub_xen_hypercall to avoid register variables (Daniel Kiper)
--- grub-core/kern/i386/xen/pvh.c | 69 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+)
grub-core/kern/i386/xen/pvh.c +69 -0
@@ -20,14 +20,83 @@#include <grub/misc.h> #include <grub/memory.h> #include <grub/mm.h> +#include <grub/i386/cpuid.h> +#include <grub/i386/io.h> #include <grub/xen.h> #include <grub/machine/kernel.h> +#define XEN_CONSOLE_PORT 0xe9 +grub_uint64_t grub_rsdp_addr; +static char hypercall_page[GRUB_XEN_PAGE_SIZE] + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); + +static grub_uint32_t xen_cpuid_base; + +static void +grub_xen_panic (const char *msg) +{ +const char *c; + +for (c = msg; *c; c++) +grub_outb (*c,XEN_CONSOLE_PORT ); + + asmvolatile ("hlt" ); +} + +static void +grub_xen_cpuid_base (void ) +{ +grub_uint32_t base, eax, signature[3 ]; + +for (base =0x40000000 ; base <0x40010000 ; base +=0x100 ) + { +grub_cpuid (base, eax, signature[0 ], signature[1 ], signature[2 ]); +if (!grub_memcmp ("XenVMMXenVMM" , signature,12 ) && (eax - base) >=2 ) + { + xen_cpuid_base = base; +return ; + } + } + +grub_xen_panic ("Found no Xen signature.\n" ); +} + +static void +grub_xen_setup_hypercall_page (void ) +{ +grub_uint32_t msr, pfn, eax, ebx, ecx, edx; + +grub_cpuid (xen_cpuid_base +2 , eax, ebx, ecx, edx); + msr = ebx; + pfn = (grub_uint32_t) (&hypercall_page[0 ]); + + asmvolatile ("wrmsr" : :"c" (msr),"a" (pfn),"d" (0 ) :"memory" ); +} + +int +grub_xen_hypercall (grub_uint32_t callno,grub_uint32_t a0, +grub_uint32_t a1,grub_uint32_t a2, +grub_uint32_t a3,grub_uint32_t a4, +grub_uint32_t a5 __attribute__ ((unused))) +{ +grub_uint32_t __res, __ign0, __ign1, __ign2, __ign3, __ign4; + + asmvolatile ("call *%[callno]" + :"=a" (__res),"=b" (__ign0),"=c" (__ign1),"=d" (__ign2), +"=S" (__ign3),"=D" (__ign4) + :"1" (a0),"2" (a1),"3" (a2),"4" (a3),"5" (a4), + [callno]"a" (&hypercall_page[callno *32 ]) + :"memory" ); +return __res; +} +void grub_xen_setup_pvh (void ) { +grub_xen_cpuid_base (); +grub_xen_setup_hypercall_page (); } grub_err_t
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 10/19] xen: setup hypercall page for PVH
Quoted 17 lines · Juergen Gross
Add the needed code to setup the hypercall page for calling into the Xen hypervisor.
Signed-off-by Juergen Gross <[email protected]>---
V3:grub_xen_early_halt->grub_xen_panic(Roger Pau Monné)
issue panic message (Roger Pau Monné)
rewritegrub_xen_hypercallto avoid register variables (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 69 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+)grub-core/kern/i386/xen/pvh.c +0
-0
grub-core/kern/i386/xen/pvh.c line 28
Quoted 9 lines
grub-core/kern/i386/xen/pvh.c +3
-0@@ -20,14 +20,83 @@#include <grub/misc.h> #include <grub/memory.h> #include <grub/mm.h> +#include <grub/i386/cpuid.h> +#include <grub/i386/io.h> #include <grub/xen.h> #include <grub/machine/kernel.h> +#define XEN_CONSOLE_PORT 0xe9
I think that this is not PVH specific thing. Could you move this to more generic Xen header?
grub-core/kern/i386/xen/pvh.c line 30
Quoted 1 line
grub-core/kern/i386/xen/pvh.c +0
-0grub_uint64_t grub_rsdp_addr;
Hmmm... It seems to me that immediately after patch #8 GRUB2 build is broken. Is not it?
Quoted 4 lines
grub-core/kern/i386/xen/pvh.c +4
-0+static char hypercall_page[GRUB_XEN_PAGE_SIZE] + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); + +static grub_uint32_t xen_cpuid_base;
grub-core/kern/i386/xen/pvh.c line 45
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+ +static void +grub_xen_panic (const char *msg) +{ +const char *c; + +for (c = msg; *c; c++) +grub_outb (*c,XEN_CONSOLE_PORT ); + + asmvolatile ("hlt" );
Should not you do something similar to grub-core/lib/i386/halt.c:stop() here?
Quoted 8 lines
grub-core/kern/i386/xen/pvh.c +8
-0+} + +static void +grub_xen_cpuid_base (void ) +{ +grub_uint32_t base, eax, signature[3 ]; + +for (base =0x40000000 ; base <0x40010000 ; base +=0x100 )
grub-core/kern/i386/xen/pvh.c line 63
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+ { +grub_cpuid (base, eax, signature[0 ], signature[1 ], signature[2 ]); +if (!grub_memcmp ("XenVMMXenVMM" , signature,12 ) && (eax - base) >=2 ) + { + xen_cpuid_base = base; +return ; + } + } + +grub_xen_panic ("Found no Xen signature.\n" );
"Found no Xen signature!\nSystem halted!\n"
Or maybe grub_xen_panic() should always add "System halted!\n".
grub-core/kern/i386/xen/pvh.c line 73
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+} + +static void +grub_xen_setup_hypercall_page (void ) +{ +grub_uint32_t msr, pfn, eax, ebx, ecx, edx; + +grub_cpuid (xen_cpuid_base +2 , eax, ebx, ecx, edx); + msr = ebx; + pfn = (grub_uint32_t) (&hypercall_page[0 ]);
Could not you use hypercall_page alone here?
Quoted 6 lines
grub-core/kern/i386/xen/pvh.c +6
-0+ + asmvolatile ("wrmsr" : :"c" (msr),"a" (pfn),"d" (0 ) :"memory" ); +} + +int +grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0,
grub-core/kern/i386/xen/pvh.c line 89
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+ grub_uint32_t a1, grub_uint32_t a2, + grub_uint32_t a3, grub_uint32_t a4, + grub_uint32_t a5 __attribute__ ((unused))) +{ + grub_uint32_t __res, __ign0, __ign1, __ign2, __ign3, __ign4; + + asm volatile ("call *%[callno]" + : "=a" (__res), "=b" (__ign0), "=c" (__ign1), "=d" (__ign2), + "=S" (__ign3), "=D" (__ign4) + : "1" (a0), "2" (a1), "3" (a2), "4" (a3), "5" (a4),
I think that you can drop all __ign* variables if you specify proper registers in input argument. If this does not work you can use "+" modifier instead of "=" in the output argument.
grub-core/kern/i386/xen/pvh.c line 93
Quoted 4 lines
grub-core/kern/i386/xen/pvh.c +4
-0+ [callno] "a" (&hypercall_page[callno * 32]) + : "memory"); +return __res; +}
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerRe: [PATCH v4 10/19] xen: setup hypercall page for PVH
Quoted 31 lines · Daniel Kiper
Quoted 17 lines · Juergen Gross
Add the needed code to setup the hypercall page for calling into the Xen hypervisor.
Signed-off-by Juergen Gross <[email protected]>---
V3:grub_xen_early_halt->grub_xen_panic(Roger Pau Monné)
issue panic message (Roger Pau Monné)
rewritegrub_xen_hypercallto avoid register variables (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 69 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+)grub-core/kern/i386/xen/pvh.c +0
-0grub-core/kern/i386/xen/pvh.c line 28
Quoted 9 lines
grub-core/kern/i386/xen/pvh.c +3
-0@@ -20,14 +20,83 @@#include <grub/misc.h> #include <grub/memory.h> #include <grub/mm.h> +#include <grub/i386/cpuid.h> +#include <grub/i386/io.h> #include <grub/xen.h> #include <grub/machine/kernel.h> +#define XEN_CONSOLE_PORT 0xe9I think that this is not PVH specific thing. Could you move this to more generic Xen header?
Quoted 4 lines
grub-core/kern/i386/xen/pvh.c line 30
Quoted 1 line
grub-core/kern/i386/xen/pvh.c +0
-0grub_uint64_t grub_rsdp_addr;Hmmm... It seems to me that immediately after patch #8 GRUB2 build is broken. Is not it?
No. xen-pvh isn't yet selectable.
Quoted 17 lines
Quoted 5 lines
grub-core/kern/i386/xen/pvh.c +4
-0+static char hypercall_page[GRUB_XEN_PAGE_SIZE] + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); + +static grub_uint32_t xen_cpuid_base;grub-core/kern/i386/xen/pvh.c line 45
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+ +static void +grub_xen_panic (const char *msg) +{ +const char *c; + +for (c = msg; *c; c++) +grub_outb (*c,XEN_CONSOLE_PORT ); + + asmvolatile ("hlt" );Should not you do something similar to grub-core/lib/i386/halt.c:stop() here?
Yes, as already replied to Roger.
Quoted 22 lines
Quoted 9 lines
grub-core/kern/i386/xen/pvh.c +8
-0+} + +static void +grub_xen_cpuid_base (void ) +{ +grub_uint32_t base, eax, signature[3 ]; + +for (base =0x40000000 ; base <0x40010000 ; base +=0x100 )grub-core/kern/i386/xen/pvh.c line 63
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+ { +grub_cpuid (base, eax, signature[0 ], signature[1 ], signature[2 ]); +if (!grub_memcmp ("XenVMMXenVMM" , signature,12 ) && (eax - base) >=2 ) + { + xen_cpuid_base = base; +return ; + } + } + +grub_xen_panic ("Found no Xen signature.\n" );"Found no Xen signature!\nSystem halted!\n"
Quoted 1 line
Or maybe
grub_xen_panic()should always add "System halted!\n".
Okay (the latter).
Quoted 13 lines
grub-core/kern/i386/xen/pvh.c line 73
Quoted 11 lines
grub-core/kern/i386/xen/pvh.c +10
-0+} + +static void +grub_xen_setup_hypercall_page (void ) +{ +grub_uint32_t msr, pfn, eax, ebx, ecx, edx; + +grub_cpuid (xen_cpuid_base +2 , eax, ebx, ecx, edx); + msr = ebx; + pfn = (grub_uint32_t) (&hypercall_page[0 ]);Could not you use
hypercall_pagealone here?
Hmm, yes.
Quoted 13 lines
Quoted 13 lines
grub-core/kern/i386/xen/pvh.c +12
-0+ + asmvolatile ("wrmsr" : :"c" (msr),"a" (pfn),"d" (0 ) :"memory" ); +} + +int +grub_xen_hypercall (grub_uint32_t callno,grub_uint32_t a0, +grub_uint32_t a1,grub_uint32_t a2, +grub_uint32_t a3,grub_uint32_t a4, +grub_uint32_t a5 __attribute__ ((unused))) +{ +grub_uint32_t __res, __ign0, __ign1, __ign2, __ign3, __ign4; +
Quoted 8 lines
grub-core/kern/i386/xen/pvh.c line 89
Quoted 4 lines
grub-core/kern/i386/xen/pvh.c +4
-0+ asm volatile ("call *%[callno]" + : "=a" (__res), "=b" (__ign0), "=c" (__ign1), "=d" (__ign2), + "=S" (__ign3), "=D" (__ign4) + : "1" (a0), "2" (a1), "3" (a2), "4" (a3), "5" (a4),I think that you can drop all __ign* variables if you specify proper registers in input argument. If this does not work you can use "+" modifier instead of "=" in the output argument.
I'll have a try.
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerRe: [Xen-devel] [PATCH v4 10/19] xen: setup hypercall page for PVH
Quoted 22 lines · Juergen Gross
Quoted 12 lines · Daniel Kiper
On Fri, Nov 02, 2018 at 01:37:29PM +0100, Juergen Gross wrote:>>> +
Quoted 11 lines
grub-core/kern/i386/xen/pvh.c +11
-0+ asmvolatile ("wrmsr" : :"c" (msr),"a" (pfn),"d" (0 ) :"memory" ); +} + +int +grub_xen_hypercall (grub_uint32_t callno,grub_uint32_t a0, +grub_uint32_t a1,grub_uint32_t a2, +grub_uint32_t a3,grub_uint32_t a4, +grub_uint32_t a5 __attribute__ ((unused))) +{ +grub_uint32_t __res, __ign0, __ign1, __ign2, __ign3, __ign4; +Quoted 8 lines
grub-core/kern/i386/xen/pvh.c line 89
Quoted 4 lines
grub-core/kern/i386/xen/pvh.c +4
-0+ asm volatile ("call *%[callno]" + : "=a" (__res), "=b" (__ign0), "=c" (__ign1), "=d" (__ign2), + "=S" (__ign3), "=D" (__ign4) + : "1" (a0), "2" (a1), "3" (a2), "4" (a3), "5" (a4),I think that you can drop all __ign* variables if you specify proper registers in input argument. If this does not work you can use "+" modifier instead of "=" in the output argument.
Quoted 1 line
I'll have a try.
Doesn't work.
Specifying only the input registers neglects the hypercall clobbering those.
Using the "+" modifier lets gcc complain.
I'll just use a single dummy variable.
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 10/19] xen: setup hypercall page for PVH
In reply to Juergen GrossQuoted 4 lines · Juergen Gross
Add the needed code to setup the hypercall page for calling into the Xen hypervisor.
Signed-off-by Juergen Gross <[email protected]>
Thanks, LGTM, just one suggestion and one question.
Quoted 13 lines
---
V3:grub_xen_early_halt->grub_xen_panic(Roger Pau Monné)
issue panic message (Roger Pau Monné)
rewritegrub_xen_hypercallto avoid register variables (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 69 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+)grub-core/kern/i386/xen/pvh.c +0
-0
grub-core/kern/i386/xen/pvh.c line 28
Quoted 9 lines
grub-core/kern/i386/xen/pvh.c +3
-0@@ -20,14 +20,83 @@#include <grub/misc.h> #include <grub/memory.h> #include <grub/mm.h> +#include <grub/i386/cpuid.h> +#include <grub/i386/io.h> #include <grub/xen.h> #include <grub/machine/kernel.h> +#define XEN_CONSOLE_PORT 0xe9
This is now part of the public headers (XEN_HVM_DEBUGCONS_IOPORT) if you wish to pick it up from there.
Quoted 7 lines
grub-core/kern/i386/xen/pvh.c +5
-0+grub_uint64_t grub_rsdp_addr; +static char hypercall_page[GRUB_XEN_PAGE_SIZE] + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); + +static grub_uint32_t xen_cpuid_base;
grub-core/kern/i386/xen/pvh.c line 45
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+ +static void +grub_xen_panic (const char *msg) +{ +const char *c; + +for (c = msg; *c; c++) +grub_outb (*c,XEN_CONSOLE_PORT ); + + asmvolatile ("hlt" );
Should this be "cli; hlt;", or does grub always runs with interrupt flag clear?
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [PATCH v4 10/19] xen: setup hypercall page for PVH
In reply to Juergen GrossQuoted 4 lines · Juergen Gross
Add the needed code to setup the hypercall page for calling into the Xen hypervisor.
Signed-off-by Juergen Gross <[email protected]>
Thanks, LGTM, just one suggestion and one question.
Quoted 13 lines
---
V3:grub_xen_early_halt->grub_xen_panic(Roger Pau Monné)
issue panic message (Roger Pau Monné)
rewritegrub_xen_hypercallto avoid register variables (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 69 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+)grub-core/kern/i386/xen/pvh.c +0
-0
grub-core/kern/i386/xen/pvh.c line 28
Quoted 9 lines
grub-core/kern/i386/xen/pvh.c +3
-0@@ -20,14 +20,83 @@#include <grub/misc.h> #include <grub/memory.h> #include <grub/mm.h> +#include <grub/i386/cpuid.h> +#include <grub/i386/io.h> #include <grub/xen.h> #include <grub/machine/kernel.h> +#define XEN_CONSOLE_PORT 0xe9
This is now part of the public headers (XEN_HVM_DEBUGCONS_IOPORT) if you wish to pick it up from there.
Quoted 7 lines
grub-core/kern/i386/xen/pvh.c +5
-0+grub_uint64_t grub_rsdp_addr; +static char hypercall_page[GRUB_XEN_PAGE_SIZE] + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); + +static grub_uint32_t xen_cpuid_base;
grub-core/kern/i386/xen/pvh.c line 45
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+ +static void +grub_xen_panic (const char *msg) +{ +const char *c; + +for (c = msg; *c; c++) +grub_outb (*c,XEN_CONSOLE_PORT ); + + asmvolatile ("hlt" );
Should this be "cli; hlt;", or does grub always runs with interrupt flag clear?
Thanks, Roger.
Juergen Gross
maintainerRe: [PATCH v4 10/19] xen: setup hypercall page for PVH
Quoted 29 lines · Roger Pau Monné
Quoted 4 lines · Juergen Gross
Add the needed code to setup the hypercall page for calling into the Xen hypervisor.
Signed-off-by Juergen Gross <[email protected]>Thanks, LGTM, just one suggestion and one question.
Quoted 21 lines
---
V3:grub_xen_early_halt->grub_xen_panic(Roger Pau Monné)
issue panic message (Roger Pau Monné)
rewritegrub_xen_hypercallto avoid register variables (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 69 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+)grub-core/kern/i386/xen/pvh.c +2
-0@@ -20,14 +20,83 @@#include <grub/misc.h> #include <grub/memory.h> #include <grub/mm.h> +#include <grub/i386/cpuid.h> +#include <grub/i386/io.h> #include <grub/xen.h> #include <grub/machine/kernel.h>
Quoted 4 lines
grub-core/kern/i386/xen/pvh.c line 28
Quoted 1 line
grub-core/kern/i386/xen/pvh.c +1
-0+#define XEN_CONSOLE_PORT 0xe9This is now part of the public headers (
XEN_HVM_DEBUGCONS_IOPORT) if you wish to pick it up from there.
I don't want to import headers from Xen unstable, so I'll add just that define (and the associated comment) to include/xen/arch-x86/xen.h
Quoted 13 lines
Quoted 13 lines
grub-core/kern/i386/xen/pvh.c +10
-0+grub_uint64_t grub_rsdp_addr; +static char hypercall_page[GRUB_XEN_PAGE_SIZE] + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); + +static grub_uint32_t xen_cpuid_base; + +static void +grub_xen_panic (const char *msg) +{ +const char *c;
Quoted 8 lines
grub-core/kern/i386/xen/pvh.c line 45
Quoted 5 lines
grub-core/kern/i386/xen/pvh.c +5
-0+ +for (c = msg; *c; c++) +grub_outb (*c,XEN_CONSOLE_PORT ); + + asmvolatile ("hlt" );Should this be "cli; hlt;", or does grub always runs with interrupt flag clear?
Good point. Maybe I should even add a loop around the hlt.
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerRe: [Xen-devel] [PATCH v4 10/19] xen: setup hypercall page for PVH
In reply to Roger Pau MonnéQuoted 29 lines · Roger Pau Monné
Quoted 4 lines · Juergen Gross
Add the needed code to setup the hypercall page for calling into the Xen hypervisor.
Signed-off-by Juergen Gross <[email protected]>Thanks, LGTM, just one suggestion and one question.
Quoted 21 lines
---
V3:grub_xen_early_halt->grub_xen_panic(Roger Pau Monné)
issue panic message (Roger Pau Monné)
rewritegrub_xen_hypercallto avoid register variables (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 69 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+)grub-core/kern/i386/xen/pvh.c +2
-0@@ -20,14 +20,83 @@#include <grub/misc.h> #include <grub/memory.h> #include <grub/mm.h> +#include <grub/i386/cpuid.h> +#include <grub/i386/io.h> #include <grub/xen.h> #include <grub/machine/kernel.h>
Quoted 4 lines
grub-core/kern/i386/xen/pvh.c line 28
Quoted 1 line
grub-core/kern/i386/xen/pvh.c +1
-0+#define XEN_CONSOLE_PORT 0xe9This is now part of the public headers (
XEN_HVM_DEBUGCONS_IOPORT) if you wish to pick it up from there.
I don't want to import headers from Xen unstable, so I'll add just that define (and the associated comment) to include/xen/arch-x86/xen.h
Quoted 13 lines
Quoted 13 lines
grub-core/kern/i386/xen/pvh.c +10
-0+grub_uint64_t grub_rsdp_addr; +static char hypercall_page[GRUB_XEN_PAGE_SIZE] + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); + +static grub_uint32_t xen_cpuid_base; + +static void +grub_xen_panic (const char *msg) +{ +const char *c;
Quoted 8 lines
grub-core/kern/i386/xen/pvh.c line 45
Quoted 5 lines
grub-core/kern/i386/xen/pvh.c +5
-0+ +for (c = msg; *c; c++) +grub_outb (*c,XEN_CONSOLE_PORT ); + + asmvolatile ("hlt" );Should this be "cli; hlt;", or does grub always runs with interrupt flag clear?
Good point. Maybe I should even add a loop around the hlt.
Juergen
Juergen Gross
maintainerPATCH v4 11/19 xen: get memory map from hypervisor for PVH
In reply to Juergen GrossRetrieve the memory map from the hypervisor and normalize it to contain no overlapping entries and to be sorted by address.
---
V3: use grub_e820_mmap_entry instead of own struct (Daniel Kiper)
--- grub-core/kern/i386/xen/pvh.c | 96 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-)
grub-core/kern/i386/xen/pvh.c +95 -1
@@ -23,9 +23,14 @@#include <grub/i386/cpuid.h> #include <grub/i386/io.h> #include <grub/xen.h> +#include <grub/i386/linux.h> #include <grub/machine/kernel.h> +#include <grub/machine/memory.h> +#include <xen/memory.h> -#define XEN_CONSOLE_PORT 0xe9 +#define XEN_CONSOLE_PORT 0xe9 + +#define XEN_MEMORY_MAP_SIZE 128grub_uint64_t grub_rsdp_addr;
@@ -33,6 +38,8 @@ static char hypercall_page[GRUB_XEN_PAGE_SIZE] __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE)));static grub_uint32_t xen_cpuid_base; +static struct grub_e820_mmap_entry map[XEN_MEMORY_MAP_SIZE ]; +static unsigned int nr_map_entries;static void grub_xen_panic (const char *msg)
@@ -92,11 +99,98 @@ grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0,return __res; } +static void +grub_xen_sort_mmap (void ) +{ +grub_uint64_t from, to; +unsigned int i; +struct grub_e820_mmap_entry tmp; + +/* Align map entries to page boundaries. */ +for (i =0 ; i < nr_map_entries; i++) + { + from = map[i].addr; + to = from + map[i].len; +if (map[i].type ==GRUB_MEMORY_AVAILABLE ) + { + from =ALIGN_UP (from,GRUB_XEN_PAGE_SIZE ); + to =ALIGN_DOWN (to,GRUB_XEN_PAGE_SIZE ); + } +else + { + from =ALIGN_DOWN (from,GRUB_XEN_PAGE_SIZE ); + to =ALIGN_UP (to,GRUB_XEN_PAGE_SIZE ); + } + map[i].addr = from; + map[i].len = to - from; + } + + again: +/* Sort entries by start address. */ +for (i =1 ; i < nr_map_entries; i++) + { +if (map[i].addr >= map[i -1 ].addr) +continue ; + tmp = map[i]; + map[i] = map[i -1 ]; + map[i -1 ] = tmp; + i =0 ; + } + +/* Detect overlapping areas. */ +for (i =1 ; i < nr_map_entries; i++) + { +if (map[i].addr >= map[i -1 ].addr + map[i -1 ].len) +continue ; + tmp = map[i -1 ]; + map[i -1 ].len = map[i].addr - map[i -1 ].addr; +if (map[i].addr + map[i].len >= tmp.addr + tmp.len) +continue ; +if (nr_map_entries <ARRAY_SIZE (map)) + { + map[nr_map_entries].addr = map[i].addr + map[i].len; + map[nr_map_entries].len = tmp.addr + tmp.len - map[nr_map_entries].addr; + map[nr_map_entries].type = tmp.type; + nr_map_entries++; + goto again; + } + } + +/* Merge adjacent entries. */ +for (i =1 ; i < nr_map_entries; i++) + { +if (map[i].type == map[i -1 ].type && + map[i].addr == map[i -1 ].addr + map[i -1 ].len) + { + map[i -1 ].len += map[i].len; + map[i] = map[nr_map_entries -1 ]; + nr_map_entries--; + goto again; + } + } +} + +static void +grub_xen_get_mmap (void ) +{ +struct xen_memory_map memmap; + + memmap.nr_entries =ARRAY_SIZE (map); +set_xen_guest_handle (memmap.buffer, map); +if (grub_xen_hypercall (__HYPERVISOR_memory_op, XENMEM_memory_map, + (grub_uint32_t) (&memmap),0 ,0 ,0 ,0 )) +grub_xen_panic ("Could not get memory map from Xen.\n" ); + nr_map_entries = memmap.nr_entries; + +grub_xen_sort_mmap (); +} +void grub_xen_setup_pvh (void ) {grub_xen_cpuid_base ();grub_xen_setup_hypercall_page (); +grub_xen_get_mmap (); } grub_err_t
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 11/19] xen: get memory map from hypervisor for PVH
Quoted 4 lines · Juergen Gross
Retrieve the memory map from the hypervisor and normalize it to contain no overlapping entries and to be sorted by address.
Signed-off-by Juergen Gross <[email protected]>
One nit pick below. Otherwise
Quoted 11 lines
---
V3: usegrub_e820_mmap_entryinstead of own struct (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 96 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-)grub-core/kern/i386/xen/pvh.c +0
-0
grub-core/kern/i386/xen/pvh.c line 31
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +4
-1@@ -23,9 +23,14 @@#include <grub/i386/cpuid.h> #include <grub/i386/io.h> #include <grub/xen.h> +#include <grub/i386/linux.h> #include <grub/machine/kernel.h> +#include <grub/machine/memory.h> +#include <xen/memory.h> -#define XEN_CONSOLE_PORT 0xe9 +#define XEN_CONSOLE_PORT 0xe9
Probably this will disappear but if not please put properly aligned values in earlier patch to avoid such code shuffling.
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 11/19] xen: get memory map from hypervisor for PVH
In reply to Juergen GrossQuoted 4 lines · Juergen Gross
Retrieve the memory map from the hypervisor and normalize it to contain no overlapping entries and to be sorted by address.
Signed-off-by Juergen Gross <[email protected]>
One nit pick below. Otherwise
Quoted 11 lines
---
V3: usegrub_e820_mmap_entryinstead of own struct (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 96 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-)grub-core/kern/i386/xen/pvh.c +0
-0
grub-core/kern/i386/xen/pvh.c line 31
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +4
-1@@ -23,9 +23,14 @@#include <grub/i386/cpuid.h> #include <grub/i386/io.h> #include <grub/xen.h> +#include <grub/i386/linux.h> #include <grub/machine/kernel.h> +#include <grub/machine/memory.h> +#include <xen/memory.h> -#define XEN_CONSOLE_PORT 0xe9 +#define XEN_CONSOLE_PORT 0xe9
Probably this will disappear but if not please put properly aligned values in earlier patch to avoid such code shuffling.
Daniel
Re: [PATCH v4 11/19] xen: get memory map from hypervisor for PVH
In reply to Juergen GrossQuoted 40 lines · Juergen Gross
Retrieve the memory map from the hypervisor and normalize it to contain no overlapping entries and to be sorted by address.
Signed-off-by Juergen Gross <[email protected]>---
V3: usegrub_e820_mmap_entryinstead of own struct (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 96 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-)grub-core/kern/i386/xen/pvh.c +8
-1@@ -23,9 +23,14 @@#include <grub/i386/cpuid.h> #include <grub/i386/io.h> #include <grub/xen.h> +#include <grub/i386/linux.h> #include <grub/machine/kernel.h> +#include <grub/machine/memory.h> +#include <xen/memory.h> -#define XEN_CONSOLE_PORT 0xe9 +#define XEN_CONSOLE_PORT 0xe9 + +#define XEN_MEMORY_MAP_SIZE 128grub_uint64_t grub_rsdp_addr;@@ -33,6 +38,8 @@ static char hypercall_page[GRUB_XEN_PAGE_SIZE] __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE)));static grub_uint32_t xen_cpuid_base; +static struct grub_e820_mmap_entry map[XEN_MEMORY_MAP_SIZE ]; +static unsigned int nr_map_entries;static void grub_xen_panic (const char *msg)
grub-core/kern/i386/xen/pvh.c grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0, · line 103
Quoted 5 lines
grub-core/kern/i386/xen/pvh.c +2
-0@@ -92,11 +99,98 @@ grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0,return __res; } +static void +grub_xen_sort_mmap (void )
There's nothing Xen-specific about this function, shouldn't it reside in some x86 related file?
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [PATCH v4 11/19] xen: get memory map from hypervisor for PVH
In reply to Juergen GrossQuoted 40 lines · Juergen Gross
Retrieve the memory map from the hypervisor and normalize it to contain no overlapping entries and to be sorted by address.
Signed-off-by Juergen Gross <[email protected]>---
V3: usegrub_e820_mmap_entryinstead of own struct (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 96 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-)grub-core/kern/i386/xen/pvh.c +8
-1@@ -23,9 +23,14 @@#include <grub/i386/cpuid.h> #include <grub/i386/io.h> #include <grub/xen.h> +#include <grub/i386/linux.h> #include <grub/machine/kernel.h> +#include <grub/machine/memory.h> +#include <xen/memory.h> -#define XEN_CONSOLE_PORT 0xe9 +#define XEN_CONSOLE_PORT 0xe9 + +#define XEN_MEMORY_MAP_SIZE 128grub_uint64_t grub_rsdp_addr;@@ -33,6 +38,8 @@ static char hypercall_page[GRUB_XEN_PAGE_SIZE] __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE)));static grub_uint32_t xen_cpuid_base; +static struct grub_e820_mmap_entry map[XEN_MEMORY_MAP_SIZE ]; +static unsigned int nr_map_entries;static void grub_xen_panic (const char *msg)
grub-core/kern/i386/xen/pvh.c grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0, · line 103
Quoted 5 lines
grub-core/kern/i386/xen/pvh.c +2
-0@@ -92,11 +99,98 @@ grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0,return __res; } +static void +grub_xen_sort_mmap (void )
There's nothing Xen-specific about this function, shouldn't it reside in some x86 related file?
Thanks, Roger.
Juergen Gross
maintainerRe: [PATCH v4 11/19] xen: get memory map from hypervisor for PVH
Quoted 44 lines · Roger Pau Monné
Quoted 43 lines · Juergen Gross
Retrieve the memory map from the hypervisor and normalize it to contain no overlapping entries and to be sorted by address.
Signed-off-by Juergen Gross <[email protected]>---
V3: usegrub_e820_mmap_entryinstead of own struct (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 96 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-)grub-core/kern/i386/xen/pvh.c +8
-1@@ -23,9 +23,14 @@#include <grub/i386/cpuid.h> #include <grub/i386/io.h> #include <grub/xen.h> +#include <grub/i386/linux.h> #include <grub/machine/kernel.h> +#include <grub/machine/memory.h> +#include <xen/memory.h> -#define XEN_CONSOLE_PORT 0xe9 +#define XEN_CONSOLE_PORT 0xe9 + +#define XEN_MEMORY_MAP_SIZE 128grub_uint64_t grub_rsdp_addr;@@ -33,6 +38,8 @@ static char hypercall_page[GRUB_XEN_PAGE_SIZE] __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE)));static grub_uint32_t xen_cpuid_base; +static struct grub_e820_mmap_entry map[XEN_MEMORY_MAP_SIZE ]; +static unsigned int nr_map_entries;static void grub_xen_panic (const char *msg)@@ -92,11 +99,98 @@ grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0,return __res; }
Quoted 5 lines
grub-core/kern/i386/xen/pvh.c grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0, · line 103
Quoted 2 lines
grub-core/kern/i386/xen/pvh.c +2
-0+static void +grub_xen_sort_mmap (void )There's nothing Xen-specific about this function, shouldn't it reside in some x86 related file?
As long as there is no other potential user of it I don't think so. Why should we bloat up grub for other machine types without a need?
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerRe: [Xen-devel] [PATCH v4 11/19] xen: get memory map from hypervisor for PVH
In reply to Roger Pau MonnéQuoted 44 lines · Roger Pau Monné
Quoted 43 lines · Juergen Gross
Retrieve the memory map from the hypervisor and normalize it to contain no overlapping entries and to be sorted by address.
Signed-off-by Juergen Gross <[email protected]>---
V3: usegrub_e820_mmap_entryinstead of own struct (Daniel Kiper)--- grub-core/kern/i386/xen/pvh.c | 96 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-)grub-core/kern/i386/xen/pvh.c +8
-1@@ -23,9 +23,14 @@#include <grub/i386/cpuid.h> #include <grub/i386/io.h> #include <grub/xen.h> +#include <grub/i386/linux.h> #include <grub/machine/kernel.h> +#include <grub/machine/memory.h> +#include <xen/memory.h> -#define XEN_CONSOLE_PORT 0xe9 +#define XEN_CONSOLE_PORT 0xe9 + +#define XEN_MEMORY_MAP_SIZE 128grub_uint64_t grub_rsdp_addr;@@ -33,6 +38,8 @@ static char hypercall_page[GRUB_XEN_PAGE_SIZE] __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE)));static grub_uint32_t xen_cpuid_base; +static struct grub_e820_mmap_entry map[XEN_MEMORY_MAP_SIZE ]; +static unsigned int nr_map_entries;static void grub_xen_panic (const char *msg)@@ -92,11 +99,98 @@ grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0,return __res; }
Quoted 5 lines
grub-core/kern/i386/xen/pvh.c grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0, · line 103
Quoted 2 lines
grub-core/kern/i386/xen/pvh.c +2
-0+static void +grub_xen_sort_mmap (void )There's nothing Xen-specific about this function, shouldn't it reside in some x86 related file?
As long as there is no other potential user of it I don't think so. Why should we bloat up grub for other machine types without a need?
Juergen
Juergen Gross
maintainerPATCH v4 12/19 xen: add PCI MMIO areas to memory map
In reply to Juergen GrossAdd possible PCI space MMIO areas as "Reserved" to the memory map in order to avoid using those areas for special Xen pages later.
---
V4: new patch (Roger Pau Monné)
--- grub-core/kern/i386/xen/pvh.c | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+)
grub-core/kern/i386/xen/pvh.c +70 -0
@@ -20,6 +20,7 @@#include <grub/misc.h> #include <grub/memory.h> #include <grub/mm.h> +#include <grub/pci.h> #include <grub/i386/cpuid.h> #include <grub/i386/io.h> #include <grub/xen.h>
@@ -170,6 +171,73 @@ grub_xen_sort_mmap (void) } } +static grub_uint64_t +grub_xen_pci_read (grub_pci_address_t addr,grub_uint32_t is_64bit) +{ +grub_uint64_t val; + + val =grub_pci_read (addr); +if (is_64bit) + { + addr +=sizeof (grub_uint32_t); + val |= ((grub_uint64_t )grub_pci_read (addr)) <<32 ; + } + +return val; +} + +static void +grub_xen_pci_write (grub_pci_address_t addr,grub_uint64_t val, +grub_uint32_t is_64bit) +{ +grub_pci_write (addr, (grub_uint32_t ) val); +if (is_64bit) + { + addr +=sizeof (grub_uint32_t); +grub_pci_write (addr, val >>32 ); + } +} + +static int +grub_xen_pci_mmap (grub_pci_device_t dev, +grub_pci_id_t pciid __attribute__ ((unused)), +void *data __attribute__ ((unused))) +{ +int reg; +grub_pci_address_t addr; +grub_uint32_t val; +grub_uint64_t mmio_addr, mmio_size; + +if (nr_map_entries ==ARRAY_SIZE (map)) +return 1 ; + +for (reg =GRUB_PCI_REG_ADDRESSES ; reg <GRUB_PCI_REG_CIS_POINTER ; + reg +=sizeof (grub_uint32_t)) + { + addr =grub_pci_make_address (dev, reg); + val =grub_pci_read (addr); +if (val ==0 || + (val &GRUB_PCI_ADDR_SPACE_MASK ) !=GRUB_PCI_ADDR_SPACE_MEMORY ) +continue ; + + val &=GRUB_PCI_ADDR_MEM_TYPE_MASK ; + mmio_addr =grub_xen_pci_read (addr, val); +grub_xen_pci_write (addr, ~0ULL , val); + mmio_size = ~(grub_xen_pci_read (addr, val) & ~0x0fULL ) +1 ; +grub_xen_pci_write (addr, mmio_addr, val); + + map[nr_map_entries].type =GRUB_MEMORY_RESERVED ; + map[nr_map_entries].addr = mmio_addr; + map[nr_map_entries].len = mmio_size; + nr_map_entries++; + +if (val) + reg +=sizeof (grub_uint32_t); + } + +return 0 ; +} +static void grub_xen_get_mmap (void ) {
@@ -182,6 +250,8 @@ grub_xen_get_mmap (void)grub_xen_panic ("Could not get memory map from Xen.\n" ); nr_map_entries = memmap.nr_entries; +grub_pci_iterate (grub_xen_pci_mmap,NULL ); +grub_xen_sort_mmap (); }
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 12/19] xen: add PCI MMIO areas to memory map
Quoted 4 lines · Juergen Gross
Add possible PCI space MMIO areas as "Reserved" to the memory map in order to avoid using those areas for special Xen pages later.
Signed-off-by Juergen Gross <[email protected]>
here something from Roger here too.
Daniel
Quoted 102 lines
---
V4: new patch (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+)grub-core/kern/i386/xen/pvh.c +70
-1@@ -20,6 +20,7 @@#include <grub/misc.h> #include <grub/memory.h> #include <grub/mm.h> +#include <grub/pci.h> #include <grub/i386/cpuid.h> #include <grub/i386/io.h> #include <grub/xen.h> @@ -170,6 +171,73 @@ grub_xen_sort_mmap (void) } } +static grub_uint64_t +grub_xen_pci_read (grub_pci_address_t addr,grub_uint32_t is_64bit) +{ +grub_uint64_t val; + + val =grub_pci_read (addr); +if (is_64bit) + { + addr +=sizeof (grub_uint32_t); + val |= ((grub_uint64_t )grub_pci_read (addr)) <<32 ; + } + +return val; +} + +static void +grub_xen_pci_write (grub_pci_address_t addr,grub_uint64_t val, +grub_uint32_t is_64bit) +{ +grub_pci_write (addr, (grub_uint32_t ) val); +if (is_64bit) + { + addr +=sizeof (grub_uint32_t); +grub_pci_write (addr, val >>32 ); + } +} + +static int +grub_xen_pci_mmap (grub_pci_device_t dev, +grub_pci_id_t pciid __attribute__ ((unused)), +void *data __attribute__ ((unused))) +{ +int reg; +grub_pci_address_t addr; +grub_uint32_t val; +grub_uint64_t mmio_addr, mmio_size; + +if (nr_map_entries ==ARRAY_SIZE (map)) +return 1 ; + +for (reg =GRUB_PCI_REG_ADDRESSES ; reg <GRUB_PCI_REG_CIS_POINTER ; + reg +=sizeof (grub_uint32_t)) + { + addr =grub_pci_make_address (dev, reg); + val =grub_pci_read (addr); +if (val ==0 || + (val &GRUB_PCI_ADDR_SPACE_MASK ) !=GRUB_PCI_ADDR_SPACE_MEMORY ) +continue ; + + val &=GRUB_PCI_ADDR_MEM_TYPE_MASK ; + mmio_addr =grub_xen_pci_read (addr, val); +grub_xen_pci_write (addr, ~0ULL , val); + mmio_size = ~(grub_xen_pci_read (addr, val) & ~0x0fULL ) +1 ; +grub_xen_pci_write (addr, mmio_addr, val); + + map[nr_map_entries].type =GRUB_MEMORY_RESERVED ; + map[nr_map_entries].addr = mmio_addr; + map[nr_map_entries].len = mmio_size; + nr_map_entries++; + +if (val) + reg +=sizeof (grub_uint32_t); + } + +return 0 ; +} +static void grub_xen_get_mmap (void ) {@@ -182,6 +250,8 @@ grub_xen_get_mmap (void)grub_xen_panic ("Could not get memory map from Xen.\n" ); nr_map_entries = memmap.nr_entries; +grub_pci_iterate (grub_xen_pci_mmap,NULL ); +grub_xen_sort_mmap (); } --
Quoted 1 line
2.16.4
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 12/19] xen: add PCI MMIO areas to memory map
In reply to Juergen GrossQuoted 4 lines · Juergen Gross
Add possible PCI space MMIO areas as "Reserved" to the memory map in order to avoid using those areas for special Xen pages later.
Signed-off-by Juergen Gross <[email protected]>
here something from Roger here too.
Daniel
Quoted 103 lines
---
V4: new patch (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+)grub-core/kern/i386/xen/pvh.c +70
-1@@ -20,6 +20,7 @@#include <grub/misc.h> #include <grub/memory.h> #include <grub/mm.h> +#include <grub/pci.h> #include <grub/i386/cpuid.h> #include <grub/i386/io.h> #include <grub/xen.h> @@ -170,6 +171,73 @@ grub_xen_sort_mmap (void) } } +static grub_uint64_t +grub_xen_pci_read (grub_pci_address_t addr,grub_uint32_t is_64bit) +{ +grub_uint64_t val; + + val =grub_pci_read (addr); +if (is_64bit) + { + addr +=sizeof (grub_uint32_t); + val |= ((grub_uint64_t )grub_pci_read (addr)) <<32 ; + } + +return val; +} + +static void +grub_xen_pci_write (grub_pci_address_t addr,grub_uint64_t val, +grub_uint32_t is_64bit) +{ +grub_pci_write (addr, (grub_uint32_t ) val); +if (is_64bit) + { + addr +=sizeof (grub_uint32_t); +grub_pci_write (addr, val >>32 ); + } +} + +static int +grub_xen_pci_mmap (grub_pci_device_t dev, +grub_pci_id_t pciid __attribute__ ((unused)), +void *data __attribute__ ((unused))) +{ +int reg; +grub_pci_address_t addr; +grub_uint32_t val; +grub_uint64_t mmio_addr, mmio_size; + +if (nr_map_entries ==ARRAY_SIZE (map)) +return 1 ; + +for (reg =GRUB_PCI_REG_ADDRESSES ; reg <GRUB_PCI_REG_CIS_POINTER ; + reg +=sizeof (grub_uint32_t)) + { + addr =grub_pci_make_address (dev, reg); + val =grub_pci_read (addr); +if (val ==0 || + (val &GRUB_PCI_ADDR_SPACE_MASK ) !=GRUB_PCI_ADDR_SPACE_MEMORY ) +continue ; + + val &=GRUB_PCI_ADDR_MEM_TYPE_MASK ; + mmio_addr =grub_xen_pci_read (addr, val); +grub_xen_pci_write (addr, ~0ULL , val); + mmio_size = ~(grub_xen_pci_read (addr, val) & ~0x0fULL ) +1 ; +grub_xen_pci_write (addr, mmio_addr, val); + + map[nr_map_entries].type =GRUB_MEMORY_RESERVED ; + map[nr_map_entries].addr = mmio_addr; + map[nr_map_entries].len = mmio_size; + nr_map_entries++; + +if (val) + reg +=sizeof (grub_uint32_t); + } + +return 0 ; +} +static void grub_xen_get_mmap (void ) {@@ -182,6 +250,8 @@ grub_xen_get_mmap (void)grub_xen_panic ("Could not get memory map from Xen.\n" ); nr_map_entries = memmap.nr_entries; +grub_pci_iterate (grub_xen_pci_mmap,NULL ); +grub_xen_sort_mmap (); } --2.16.4
Re: [Xen-devel] [PATCH v4 12/19] xen: add PCI MMIO areas to memory map
Quoted 8 lines · Daniel Kiper
Quoted 4 lines · Juergen Gross
Add possible PCI space MMIO areas as "Reserved" to the memory map in order to avoid using those areas for special Xen pages later.
Signed-off-by Juergen Gross <[email protected]>here something from Roger here too.
I've almost missed this one, could you please Cc me next time?
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 12/19] xen: add PCI MMIO areas to memory map
Quoted 11 lines · Roger Pau Monné
Quoted 8 lines · Daniel Kiper
Quoted 4 lines · Juergen Gross
Add possible PCI space MMIO areas as "Reserved" to the memory map in order to avoid using those areas for special Xen pages later.
Signed-off-by Juergen Gross <[email protected]>here something from Roger here too.
I've almost missed this one, could you please Cc me next time?
Ahhh, sorry about that. However, I think that it will be much easier if Juergen will CC you on next version of these patches. Juergen?
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [PATCH v4 12/19] xen: add PCI MMIO areas to memory map
In reply to Roger Pau MonnéQuoted 11 lines · Roger Pau Monné
Quoted 8 lines · Daniel Kiper
Quoted 4 lines · Juergen Gross
Add possible PCI space MMIO areas as "Reserved" to the memory map in order to avoid using those areas for special Xen pages later.
Signed-off-by Juergen Gross <[email protected]>here something from Roger here too.
I've almost missed this one, could you please Cc me next time?
Ahhh, sorry about that. However, I think that it will be much easier if Juergen will CC you on next version of these patches. Juergen?
Daniel
Re: [Xen-devel] [PATCH v4 12/19] xen: add PCI MMIO areas to memory map
In reply to Juergen GrossQuoted 2 lines · Juergen Gross
Add possible PCI space MMIO areas as "Reserved" to the memory map in order to avoid using those areas for special Xen pages later.
TBH, I'm not sure this is the best way to solve the issues related to where to map stuff in the physmap without colliding with either emulated or passed through MMIO regions.
IMO I think the guest should be able to query this from Xen, overall I would defer this patch until there's a discussion about where to map stuff safely in the physmap for autotranslated guests.
Quoted 65 lines
Signed-off-by Juergen Gross <[email protected]>---
V4: new patch (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+)grub-core/kern/i386/xen/pvh.c +43
-0@@ -20,6 +20,7 @@#include <grub/misc.h> #include <grub/memory.h> #include <grub/mm.h> +#include <grub/pci.h> #include <grub/i386/cpuid.h> #include <grub/i386/io.h> #include <grub/xen.h> @@ -170,6 +171,73 @@ grub_xen_sort_mmap (void) } } +static grub_uint64_t +grub_xen_pci_read (grub_pci_address_t addr,grub_uint32_t is_64bit) +{ +grub_uint64_t val; + + val =grub_pci_read (addr); +if (is_64bit) + { + addr +=sizeof (grub_uint32_t); + val |= ((grub_uint64_t )grub_pci_read (addr)) <<32 ; + } + +return val; +} + +static void +grub_xen_pci_write (grub_pci_address_t addr,grub_uint64_t val, +grub_uint32_t is_64bit) +{ +grub_pci_write (addr, (grub_uint32_t ) val); +if (is_64bit) + { + addr +=sizeof (grub_uint32_t); +grub_pci_write (addr, val >>32 ); + } +} + +static int +grub_xen_pci_mmap (grub_pci_device_t dev, +grub_pci_id_t pciid __attribute__ ((unused)), +void *data __attribute__ ((unused))) +{ +int reg; +grub_pci_address_t addr; +grub_uint32_t val; +grub_uint64_t mmio_addr, mmio_size; + +if (nr_map_entries ==ARRAY_SIZE (map)) +return 1 ; + +for (reg =GRUB_PCI_REG_ADDRESSES ; reg <GRUB_PCI_REG_CIS_POINTER ; + reg +=sizeof (grub_uint32_t))
grub-core/kern/i386/xen/pvh.c grub_xen_sort_mmap (void) · line 225
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+ { + addr =grub_pci_make_address (dev, reg); + val =grub_pci_read (addr); +if (val ==0 || + (val &GRUB_PCI_ADDR_SPACE_MASK ) !=GRUB_PCI_ADDR_SPACE_MEMORY ) +continue ; + + val &=GRUB_PCI_ADDR_MEM_TYPE_MASK ; + mmio_addr =grub_xen_pci_read (addr, val); +grub_xen_pci_write (addr, ~0ULL , val);
You should make sure memory decoding is disabled on the command register before sizing the BARs.
grub-core/kern/i386/xen/pvh.c grub_xen_sort_mmap (void) · line 226
Quoted 1 line
grub-core/kern/i386/xen/pvh.c +1
-0+ mmio_size = ~(grub_xen_pci_read (addr, val) & ~0x0fULL ) +1 ;
Isn't there a define for this 0xf value?
grub-core/kern/i386/xen/pvh.c grub_xen_sort_mmap (void) · line 227
Quoted 1 line
grub-core/kern/i386/xen/pvh.c +1
-0+grub_xen_pci_write (addr, mmio_addr, val);
I've come across BARs with size 0, which will just waste an entry in the physmap here.
grub-core/kern/i386/xen/pvh.c grub_xen_sort_mmap (void) · line 232
Quoted 4 lines
grub-core/kern/i386/xen/pvh.c +4
-0+ map[nr_map_entries].type =GRUB_MEMORY_RESERVED ; + map[nr_map_entries].addr = mmio_addr; + map[nr_map_entries].len = mmio_size; + nr_map_entries++;
Also, I'm not sure about the size of the map array, but keep in mind big systems can have a huge amount of PCI devices (and thus BARs) and could likely overrun the array?
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerRe: [PATCH v4 12/19] xen: add PCI MMIO areas to memory map
Quoted 11 lines · Roger Pau Monné
Quoted 2 lines · Juergen Gross
Add possible PCI space MMIO areas as "Reserved" to the memory map in order to avoid using those areas for special Xen pages later.
TBH, I'm not sure this is the best way to solve the issues related to where to map stuff in the physmap without colliding with either emulated or passed through MMIO regions.
IMO I think the guest should be able to query this from Xen, overall I would defer this patch until there's a discussion about where to map stuff safely in the physmap for autotranslated guests.
Okay, I'll drop the patch for now.
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerRe: [Xen-devel] [PATCH v4 12/19] xen: add PCI MMIO areas to memory map
In reply to Roger Pau MonnéQuoted 11 lines · Roger Pau Monné
Quoted 2 lines · Juergen Gross
Add possible PCI space MMIO areas as "Reserved" to the memory map in order to avoid using those areas for special Xen pages later.
TBH, I'm not sure this is the best way to solve the issues related to where to map stuff in the physmap without colliding with either emulated or passed through MMIO regions.
IMO I think the guest should be able to query this from Xen, overall I would defer this patch until there's a discussion about where to map stuff safely in the physmap for autotranslated guests.
Okay, I'll drop the patch for now.
Juergen
Juergen Gross
maintainerPATCH v4 13/19 xen: setup Xen specific data for PVH
In reply to Juergen GrossInitialize the needed Xen specific data. This is:
- the Xen start of day page containing the console and Xenstore ring page PFN and event channel
- the grant table
- the shared info page
Write back the possibly modified memory map to the hypervisor in case the guest is reading it from there again.
Set the RSDP address for the guest from the start_info page passed as boot parameter.
---
V4: write back memory map to Xen (Roger Pau Monné)
--- grub-core/kern/i386/xen/pvh.c | 119 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+)
grub-core/kern/i386/xen/pvh.c +119 -0
@@ -27,6 +27,7 @@#include <grub/i386/linux.h> #include <grub/machine/kernel.h> #include <grub/machine/memory.h> +#include <xen/hvm/params.h> #include <xen/memory.h> #define XEN_CONSOLE_PORT 0xe9
@@ -39,6 +40,7 @@ static char hypercall_page[GRUB_XEN_PAGE_SIZE] __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE)));static grub_uint32_t xen_cpuid_base; +static struct start_info grub_xen_start_page;static struct grub_e820_mmap_entry map[XEN_MEMORY_MAP_SIZE ];static unsigned int nr_map_entries;
@@ -100,6 +102,36 @@ grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0,return __res; } +static grub_uint32_t +grub_xen_get_param (int idx) +{ +struct xen_hvm_param xhv; +int r; + + xhv.domid =DOMID_SELF ; + xhv.index = idx; + r =grub_xen_hypercall (__HYPERVISOR_hvm_op, HVMOP_get_param, + (grub_uint32_t) (&xhv),0 ,0 ,0 ,0 ); +if (r <0 ) +grub_xen_panic ("Could not get parameter from Xen.\n" ); +return xhv.value; +} + +static void * +grub_xen_add_physmap (unsigned int space,void *addr) +{ +struct xen_add_to_physmap xatp; + + xatp.domid =DOMID_SELF ; + xatp.idx =0 ; + xatp.space = space; + xatp.gpfn = (grub_addr_t ) addr >>GRUB_XEN_LOG_PAGE_SIZE ; +if (grub_xen_hypercall (__HYPERVISOR_memory_op, XENMEM_add_to_physmap, + (grub_uint32_t) (&xatp),0 ,0 ,0 ,0 )) +grub_xen_panic ("Memory_op hypercall failed.\n" ); +return addr; +} +static void grub_xen_sort_mmap (void ) {
@@ -255,12 +287,99 @@ grub_xen_get_mmap (void)grub_xen_sort_mmap (); } +static void +grub_xen_set_mmap (void ) +{ +struct xen_foreign_memory_map memmap; + + memmap.domid =DOMID_SELF ; + memmap.map.nr_entries = nr_map_entries; +set_xen_guest_handle (memmap.map.buffer, map); +grub_xen_hypercall (__HYPERVISOR_memory_op, XENMEM_set_memory_map, + (grub_uint32_t) (&memmap),0 ,0 ,0 ,0 ); +} + +static grub_uint64_t +grub_xen_find_page (grub_uint64_t start) +{ +unsigned int i, j; +grub_uint64_t last = start; + +/* Try to find a e820 map hole below 4G. */ +for (i =0 ; i < nr_map_entries; i++) + { +if (last > map[i].addr + map[i].len) +continue ; +if (last < map[i].addr) +return last; +if ((map[i].addr >>32 ) || ((map[i].addr + map[i].len) >>32 )) +break ; + last = map[i].addr + map[i].len; + } +if (i == nr_map_entries) +return last; + +/* No hole found, use the highest RAM page below 4G and reserve it. */ +if (nr_map_entries ==ARRAY_SIZE (map)) +grub_xen_panic ("Memory map size limit reached.\n" ); +for (i =0 , j =0 ; i < nr_map_entries; i++) + { +if (map[i].type !=GRUB_MEMORY_AVAILABLE ) +continue ; +if (map[i].addr >>32 ) +break ; + j = i; +if ((map[i].addr + map[i].len) >>32 ) +break ; + } +if (map[j].type !=GRUB_MEMORY_AVAILABLE ) +grub_xen_panic ("No free memory page found.\n" ); +if ((map[j].addr + map[j].len) >>32 ) + last = (1ULL <<32 ) -GRUB_XEN_PAGE_SIZE ; +else + last = map[j].addr + map[j].len -GRUB_XEN_PAGE_SIZE ; + map[nr_map_entries].addr = last; + map[nr_map_entries].len =GRUB_XEN_PAGE_SIZE ; + map[nr_map_entries].type =GRUB_MEMORY_RESERVED ; + nr_map_entries++; +grub_xen_sort_mmap (); + +return last; +} +void grub_xen_setup_pvh (void ) { +grub_addr_t par; +grub_xen_cpuid_base ();grub_xen_setup_hypercall_page ();grub_xen_get_mmap (); + +/* Setup Xen data. */ + grub_xen_start_page_addr = &grub_xen_start_page; + + par =grub_xen_get_param (HVM_PARAM_CONSOLE_PFN ); + grub_xen_start_page_addr->console.domU.mfn = par; + grub_xen_xcons = (void *) (grub_addr_t) (par <<GRUB_XEN_LOG_PAGE_SIZE ); + par =grub_xen_get_param (HVM_PARAM_CONSOLE_EVTCHN ); + grub_xen_start_page_addr->console.domU.evtchn = par; + + par =grub_xen_get_param (HVM_PARAM_STORE_PFN ); + grub_xen_start_page_addr->store_mfn = par; + grub_xen_xenstore = (void *) (grub_addr_t) (par <<GRUB_XEN_LOG_PAGE_SIZE ); + par =grub_xen_get_param (HVM_PARAM_STORE_EVTCHN ); + grub_xen_start_page_addr->store_evtchn = par; + + par =grub_xen_find_page (0 ); + grub_xen_grant_table =grub_xen_add_physmap (XENMAPSPACE_grant_table, + (void *) par); + par =grub_xen_find_page (par +GRUB_XEN_PAGE_SIZE ); + grub_xen_shared_info =grub_xen_add_physmap (XENMAPSPACE_shared_info, + (void *) par); +grub_xen_set_mmap (); + + grub_rsdp_addr = pvh_start_info->rsdp_paddr; } grub_err_t
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 13/19] xen: setup Xen specific data for PVH
Quoted 46 lines · Juergen Gross
Initialize the needed Xen specific data. This is:
- the Xen start of day page containing the console and Xenstore ring page PFN and event channel
- the grant table
- the shared info pageWrite back the possibly modified memory map to the hypervisor in case the guest is reading it from there again.
Set the RSDP address for the guest from the
start_infopage passed as boot parameter.Signed-off-by Juergen Gross <[email protected]>---
V4: write back memory map to Xen (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 119 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+)grub-core/kern/i386/xen/pvh.c +4
-0@@ -27,6 +27,7 @@#include <grub/i386/linux.h> #include <grub/machine/kernel.h> #include <grub/machine/memory.h> +#include <xen/hvm/params.h> #include <xen/memory.h> #define XEN_CONSOLE_PORT 0xe9@@ -39,6 +40,7 @@ static char hypercall_page[GRUB_XEN_PAGE_SIZE] __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE)));static grub_uint32_t xen_cpuid_base; +static struct start_info grub_xen_start_page;static struct grub_e820_mmap_entry map[XEN_MEMORY_MAP_SIZE ];static unsigned int nr_map_entries;@@ -100,6 +102,36 @@ grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0,return __res; } +static grub_uint32_t +grub_xen_get_param (int idx)
grub-core/kern/i386/xen/pvh.c grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0, · line 116
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+{ +struct xen_hvm_param xhv; +int r; + + xhv.domid =DOMID_SELF ; + xhv.index = idx; + r =grub_xen_hypercall (__HYPERVISOR_hvm_op, HVMOP_get_param, + (grub_uint32_t) (&xhv),0 ,0 ,0 ,0 ); +if (r <0 ) +grub_xen_panic ("Could not get parameter from Xen.\n" );
I would replace "." with "!" here and in the other grub_xen_panic() calls.
Quoted 44 lines
grub-core/kern/i386/xen/pvh.c +37
-0+return xhv.value; +} + +static void * +grub_xen_add_physmap (unsigned int space,void *addr) +{ +struct xen_add_to_physmap xatp; + + xatp.domid =DOMID_SELF ; + xatp.idx =0 ; + xatp.space = space; + xatp.gpfn = (grub_addr_t ) addr >>GRUB_XEN_LOG_PAGE_SIZE ; +if (grub_xen_hypercall (__HYPERVISOR_memory_op, XENMEM_add_to_physmap, + (grub_uint32_t) (&xatp),0 ,0 ,0 ,0 )) +grub_xen_panic ("Memory_op hypercall failed.\n" ); +return addr; +} +static void grub_xen_sort_mmap (void ) {@@ -255,12 +287,99 @@ grub_xen_get_mmap (void)grub_xen_sort_mmap (); } +static void +grub_xen_set_mmap (void ) +{ +struct xen_foreign_memory_map memmap; + + memmap.domid =DOMID_SELF ; + memmap.map.nr_entries = nr_map_entries; +set_xen_guest_handle (memmap.map.buffer, map); +grub_xen_hypercall (__HYPERVISOR_memory_op, XENMEM_set_memory_map, + (grub_uint32_t) (&memmap),0 ,0 ,0 ,0 ); +} + +static grub_uint64_t +grub_xen_find_page (grub_uint64_t start) +{ +unsigned int i, j; +grub_uint64_t last = start; + +/* Try to find a e820 map hole below 4G. */
grub-core/kern/i386/xen/pvh.c grub_xen_get_mmap (void) · line 318
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+for (i =0 ; i < nr_map_entries; i++) + { +if (last > map[i].addr + map[i].len) +continue ; +if (last < map[i].addr) +return last; +if ((map[i].addr >>32 ) || ((map[i].addr + map[i].len) >>32 )) +break ; + last = map[i].addr + map[i].len; + }
It took me some time to get why it works. AIUI this is due to proper start/end alignment. Right? So, please say about that in the comment.
And I would like to hear a word from Roger here too. If he is OK with the patch you can add my RB too.
Daniel
Quoted 68 lines
grub-core/kern/i386/xen/pvh.c +58
-1+if (i == nr_map_entries) +return last; + +/* No hole found, use the highest RAM page below 4G and reserve it. */ +if (nr_map_entries ==ARRAY_SIZE (map)) +grub_xen_panic ("Memory map size limit reached.\n" ); +for (i =0 , j =0 ; i < nr_map_entries; i++) + { +if (map[i].type !=GRUB_MEMORY_AVAILABLE ) +continue ; +if (map[i].addr >>32 ) +break ; + j = i; +if ((map[i].addr + map[i].len) >>32 ) +break ; + } +if (map[j].type !=GRUB_MEMORY_AVAILABLE ) +grub_xen_panic ("No free memory page found.\n" ); +if ((map[j].addr + map[j].len) >>32 ) + last = (1ULL <<32 ) -GRUB_XEN_PAGE_SIZE ; +else + last = map[j].addr + map[j].len -GRUB_XEN_PAGE_SIZE ; + map[nr_map_entries].addr = last; + map[nr_map_entries].len =GRUB_XEN_PAGE_SIZE ; + map[nr_map_entries].type =GRUB_MEMORY_RESERVED ; + nr_map_entries++; +grub_xen_sort_mmap (); + +return last; +} +void grub_xen_setup_pvh (void ) { +grub_addr_t par; +grub_xen_cpuid_base ();grub_xen_setup_hypercall_page ();grub_xen_get_mmap (); + +/* Setup Xen data. */ + grub_xen_start_page_addr = &grub_xen_start_page; + + par =grub_xen_get_param (HVM_PARAM_CONSOLE_PFN ); + grub_xen_start_page_addr->console.domU.mfn = par; + grub_xen_xcons = (void *) (grub_addr_t) (par <<GRUB_XEN_LOG_PAGE_SIZE ); + par =grub_xen_get_param (HVM_PARAM_CONSOLE_EVTCHN ); + grub_xen_start_page_addr->console.domU.evtchn = par; + + par =grub_xen_get_param (HVM_PARAM_STORE_PFN ); + grub_xen_start_page_addr->store_mfn = par; + grub_xen_xenstore = (void *) (grub_addr_t) (par <<GRUB_XEN_LOG_PAGE_SIZE ); + par =grub_xen_get_param (HVM_PARAM_STORE_EVTCHN ); + grub_xen_start_page_addr->store_evtchn = par; + + par =grub_xen_find_page (0 ); + grub_xen_grant_table =grub_xen_add_physmap (XENMAPSPACE_grant_table, + (void *) par); + par =grub_xen_find_page (par +GRUB_XEN_PAGE_SIZE ); + grub_xen_shared_info =grub_xen_add_physmap (XENMAPSPACE_shared_info, + (void *) par); +grub_xen_set_mmap (); + + grub_rsdp_addr = pvh_start_info->rsdp_paddr; } grub_err_t --
Quoted 1 line
2.16.4
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 13/19] xen: setup Xen specific data for PVH
In reply to Juergen GrossQuoted 46 lines · Juergen Gross
Initialize the needed Xen specific data. This is:
- the Xen start of day page containing the console and Xenstore ring page PFN and event channel
- the grant table
- the shared info pageWrite back the possibly modified memory map to the hypervisor in case the guest is reading it from there again.
Set the RSDP address for the guest from the
start_infopage passed as boot parameter.Signed-off-by Juergen Gross <[email protected]>---
V4: write back memory map to Xen (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 119 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+)grub-core/kern/i386/xen/pvh.c +4
-0@@ -27,6 +27,7 @@#include <grub/i386/linux.h> #include <grub/machine/kernel.h> #include <grub/machine/memory.h> +#include <xen/hvm/params.h> #include <xen/memory.h> #define XEN_CONSOLE_PORT 0xe9@@ -39,6 +40,7 @@ static char hypercall_page[GRUB_XEN_PAGE_SIZE] __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE)));static grub_uint32_t xen_cpuid_base; +static struct start_info grub_xen_start_page;static struct grub_e820_mmap_entry map[XEN_MEMORY_MAP_SIZE ];static unsigned int nr_map_entries;@@ -100,6 +102,36 @@ grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0,return __res; } +static grub_uint32_t +grub_xen_get_param (int idx)
grub-core/kern/i386/xen/pvh.c grub_xen_hypercall (grub_uint32_t callno, grub_uint32_t a0, · line 116
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+{ +struct xen_hvm_param xhv; +int r; + + xhv.domid =DOMID_SELF ; + xhv.index = idx; + r =grub_xen_hypercall (__HYPERVISOR_hvm_op, HVMOP_get_param, + (grub_uint32_t) (&xhv),0 ,0 ,0 ,0 ); +if (r <0 ) +grub_xen_panic ("Could not get parameter from Xen.\n" );
I would replace "." with "!" here and in the other grub_xen_panic() calls.
Quoted 44 lines
grub-core/kern/i386/xen/pvh.c +37
-0+return xhv.value; +} + +static void * +grub_xen_add_physmap (unsigned int space,void *addr) +{ +struct xen_add_to_physmap xatp; + + xatp.domid =DOMID_SELF ; + xatp.idx =0 ; + xatp.space = space; + xatp.gpfn = (grub_addr_t ) addr >>GRUB_XEN_LOG_PAGE_SIZE ; +if (grub_xen_hypercall (__HYPERVISOR_memory_op, XENMEM_add_to_physmap, + (grub_uint32_t) (&xatp),0 ,0 ,0 ,0 )) +grub_xen_panic ("Memory_op hypercall failed.\n" ); +return addr; +} +static void grub_xen_sort_mmap (void ) {@@ -255,12 +287,99 @@ grub_xen_get_mmap (void)grub_xen_sort_mmap (); } +static void +grub_xen_set_mmap (void ) +{ +struct xen_foreign_memory_map memmap; + + memmap.domid =DOMID_SELF ; + memmap.map.nr_entries = nr_map_entries; +set_xen_guest_handle (memmap.map.buffer, map); +grub_xen_hypercall (__HYPERVISOR_memory_op, XENMEM_set_memory_map, + (grub_uint32_t) (&memmap),0 ,0 ,0 ,0 ); +} + +static grub_uint64_t +grub_xen_find_page (grub_uint64_t start) +{ +unsigned int i, j; +grub_uint64_t last = start; + +/* Try to find a e820 map hole below 4G. */
grub-core/kern/i386/xen/pvh.c grub_xen_get_mmap (void) · line 318
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+for (i =0 ; i < nr_map_entries; i++) + { +if (last > map[i].addr + map[i].len) +continue ; +if (last < map[i].addr) +return last; +if ((map[i].addr >>32 ) || ((map[i].addr + map[i].len) >>32 )) +break ; + last = map[i].addr + map[i].len; + }
It took me some time to get why it works. AIUI this is due to proper start/end alignment. Right? So, please say about that in the comment.
And I would like to hear a word from Roger here too. If he is OK with the patch you can add my RB too.
Daniel
Quoted 69 lines
grub-core/kern/i386/xen/pvh.c +58
-1+if (i == nr_map_entries) +return last; + +/* No hole found, use the highest RAM page below 4G and reserve it. */ +if (nr_map_entries ==ARRAY_SIZE (map)) +grub_xen_panic ("Memory map size limit reached.\n" ); +for (i =0 , j =0 ; i < nr_map_entries; i++) + { +if (map[i].type !=GRUB_MEMORY_AVAILABLE ) +continue ; +if (map[i].addr >>32 ) +break ; + j = i; +if ((map[i].addr + map[i].len) >>32 ) +break ; + } +if (map[j].type !=GRUB_MEMORY_AVAILABLE ) +grub_xen_panic ("No free memory page found.\n" ); +if ((map[j].addr + map[j].len) >>32 ) + last = (1ULL <<32 ) -GRUB_XEN_PAGE_SIZE ; +else + last = map[j].addr + map[j].len -GRUB_XEN_PAGE_SIZE ; + map[nr_map_entries].addr = last; + map[nr_map_entries].len =GRUB_XEN_PAGE_SIZE ; + map[nr_map_entries].type =GRUB_MEMORY_RESERVED ; + nr_map_entries++; +grub_xen_sort_mmap (); + +return last; +} +void grub_xen_setup_pvh (void ) { +grub_addr_t par; +grub_xen_cpuid_base ();grub_xen_setup_hypercall_page ();grub_xen_get_mmap (); + +/* Setup Xen data. */ + grub_xen_start_page_addr = &grub_xen_start_page; + + par =grub_xen_get_param (HVM_PARAM_CONSOLE_PFN ); + grub_xen_start_page_addr->console.domU.mfn = par; + grub_xen_xcons = (void *) (grub_addr_t) (par <<GRUB_XEN_LOG_PAGE_SIZE ); + par =grub_xen_get_param (HVM_PARAM_CONSOLE_EVTCHN ); + grub_xen_start_page_addr->console.domU.evtchn = par; + + par =grub_xen_get_param (HVM_PARAM_STORE_PFN ); + grub_xen_start_page_addr->store_mfn = par; + grub_xen_xenstore = (void *) (grub_addr_t) (par <<GRUB_XEN_LOG_PAGE_SIZE ); + par =grub_xen_get_param (HVM_PARAM_STORE_EVTCHN ); + grub_xen_start_page_addr->store_evtchn = par; + + par =grub_xen_find_page (0 ); + grub_xen_grant_table =grub_xen_add_physmap (XENMAPSPACE_grant_table, + (void *) par); + par =grub_xen_find_page (par +GRUB_XEN_PAGE_SIZE ); + grub_xen_shared_info =grub_xen_add_physmap (XENMAPSPACE_shared_info, + (void *) par); +grub_xen_set_mmap (); + + grub_rsdp_addr = pvh_start_info->rsdp_paddr; } grub_err_t --2.16.4
Re: [PATCH v4 13/19] xen: setup Xen specific data for PVH
In reply to Juergen GrossQuoted 23 lines · Juergen Gross
Initialize the needed Xen specific data. This is:
- the Xen start of day page containing the console and Xenstore ring page PFN and event channel
- the grant table
- the shared info pageWrite back the possibly modified memory map to the hypervisor in case the guest is reading it from there again.
Set the RSDP address for the guest from the
start_infopage passed as boot parameter.Signed-off-by Juergen Gross <[email protected]>---
V4: write back memory map to Xen (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 119 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+)grub-core/kern/i386/xen/pvh.c +2
-0+static grub_uint64_t +grub_xen_find_page (grub_uint64_t start)
grub-core/kern/i386/xen/pvh.c grub_xen_get_mmap (void) · line 313
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+{ +unsigned int i, j; +grub_uint64_t last = start; + +/* Try to find a e820 map hole below 4G. */ +for (i =0 ; i < nr_map_entries; i++) + { +if (last > map[i].addr + map[i].len) +continue ; +if (last < map[i].addr)
Shouldn't this be last + PAGE_SIZE <= map[i].addr?
grub_xen_sort_mmap already aligns memory map entries to page boundaries, so the result will be correct as long as 'start' is also page aligned.
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [Xen-devel] [PATCH v4 13/19] xen: setup Xen specific data for PVH
In reply to Juergen GrossQuoted 23 lines · Juergen Gross
Initialize the needed Xen specific data. This is:
- the Xen start of day page containing the console and Xenstore ring page PFN and event channel
- the grant table
- the shared info pageWrite back the possibly modified memory map to the hypervisor in case the guest is reading it from there again.
Set the RSDP address for the guest from the
start_infopage passed as boot parameter.Signed-off-by Juergen Gross <[email protected]>---
V4: write back memory map to Xen (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 119 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+)grub-core/kern/i386/xen/pvh.c +2
-0+static grub_uint64_t +grub_xen_find_page (grub_uint64_t start)
grub-core/kern/i386/xen/pvh.c grub_xen_get_mmap (void) · line 313
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+{ +unsigned int i, j; +grub_uint64_t last = start; + +/* Try to find a e820 map hole below 4G. */ +for (i =0 ; i < nr_map_entries; i++) + { +if (last > map[i].addr + map[i].len) +continue ; +if (last < map[i].addr)
Shouldn't this be last + PAGE_SIZE <= map[i].addr?
grub_xen_sort_mmap already aligns memory map entries to page boundaries, so the result will be correct as long as 'start' is also page aligned.
Thanks, Roger.
Juergen Gross
maintainerRe: [PATCH v4 13/19] xen: setup Xen specific data for PVH
Quoted 37 lines · Roger Pau Monné
Quoted 23 lines · Juergen Gross
Initialize the needed Xen specific data. This is:
- the Xen start of day page containing the console and Xenstore ring page PFN and event channel
- the grant table
- the shared info pageWrite back the possibly modified memory map to the hypervisor in case the guest is reading it from there again.
Set the RSDP address for the guest from the
start_infopage passed as boot parameter.Signed-off-by Juergen Gross <[email protected]>---
V4: write back memory map to Xen (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 119 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+)grub-core/kern/i386/xen/pvh.c +2
-0+static grub_uint64_t +grub_xen_find_page (grub_uint64_t start)grub-core/kern/i386/xen/pvh.c grub_xen_get_mmap (void) · line 313
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+{ +unsigned int i, j; +grub_uint64_t last = start; + +/* Try to find a e820 map hole below 4G. */ +for (i =0 ; i < nr_map_entries; i++) + { +if (last > map[i].addr + map[i].len) +continue ; +if (last < map[i].addr)Shouldn't this be last +
PAGE_SIZE<= map[i].addr?
Quoted 3 lines
grub_xen_sort_mmapalready aligns memory map entries to page boundaries, so the result will be correct as long as 'start' is also page aligned.
Correct, page alignment is a requirement (which is met currently). I'll add a comment to point that out.
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerRe: [Xen-devel] [PATCH v4 13/19] xen: setup Xen specific data for PVH
In reply to Roger Pau MonnéQuoted 37 lines · Roger Pau Monné
Quoted 23 lines · Juergen Gross
Initialize the needed Xen specific data. This is:
- the Xen start of day page containing the console and Xenstore ring page PFN and event channel
- the grant table
- the shared info pageWrite back the possibly modified memory map to the hypervisor in case the guest is reading it from there again.
Set the RSDP address for the guest from the
start_infopage passed as boot parameter.Signed-off-by Juergen Gross <[email protected]>---
V4: write back memory map to Xen (Roger Pau Monné)--- grub-core/kern/i386/xen/pvh.c | 119 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+)grub-core/kern/i386/xen/pvh.c +2
-0+static grub_uint64_t +grub_xen_find_page (grub_uint64_t start)grub-core/kern/i386/xen/pvh.c grub_xen_get_mmap (void) · line 313
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+{ +unsigned int i, j; +grub_uint64_t last = start; + +/* Try to find a e820 map hole below 4G. */ +for (i =0 ; i < nr_map_entries; i++) + { +if (last > map[i].addr + map[i].len) +continue ; +if (last < map[i].addr)Shouldn't this be last +
PAGE_SIZE<= map[i].addr?
Quoted 3 lines
grub_xen_sort_mmapalready aligns memory map entries to page boundaries, so the result will be correct as long as 'start' is also page aligned.
Correct, page alignment is a requirement (which is met currently). I'll add a comment to point that out.
Juergen
Juergen Gross
maintainerPATCH v4 14/19 xen: init memory regions for PVH
In reply to Juergen GrossAdd all usable memory regions to grub memory management and add the needed mmap iterate code, which will be used by grub core (e.g. grub-core/lib/relocator.c or grub-core/mmap/mmap.c).
As we are running in 32-bit mode don't add memory above 4GB.
--- grub-core/kern/i386/xen/pvh.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+)
grub-core/kern/i386/xen/pvh.c +35 -0
@@ -299,6 +299,30 @@ grub_xen_set_mmap (void) (grub_uint32_t) (&memmap), 0, 0, 0, 0); } +static void +grub_xen_mm_init_regions (void ) +{ +grub_uint64_t modend, from, to; +unsigned int i; + + modend =grub_modules_get_end (); + +for (i =0 ; i < nr_map_entries; i++) + { +if (map[i].type !=GRUB_MEMORY_AVAILABLE ) +continue ; + from = map[i].addr; + to = from + map[i].len; +if (from < modend) + from = modend; +if (from >= to || from >=0x100000000ULL ) +continue ; +if (to >0x100000000ULL ) + to =0x100000000ULL ; +grub_mm_init_region ((void *) (grub_addr_t ) from, to - from); + } +} +static grub_uint64_t grub_xen_find_page (grub_uint64_t start) {
@@ -379,10 +403,21 @@ grub_xen_setup_pvh (void) (void *) par);grub_xen_set_mmap (); +grub_xen_mm_init_regions (); + grub_rsdp_addr = pvh_start_info->rsdp_paddr; }grub_err_t grub_machine_mmap_iterate (grub_memory_hook_t hook,void *hook_data) { +unsigned int i; + +for (i =0 ; i < nr_map_entries; i++) + { +if (map[i].len &&hook (map[i].addr, map[i].len, map[i].type, hook_data)) +break ; + } + +return GRUB_ERR_NONE ; }
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 14/19] xen: init memory regions for PVH
Quoted 7 lines · Juergen Gross
Add all usable memory regions to grub memory management and add the needed mmap iterate code, which will be used by grub core (e.g.
grub-core/lib/relocator.corgrub-core/mmap/mmap.c).As we are running in 32-bit mode don't add memory above 4GB.
Signed-off-by Juergen Gross <[email protected]>
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 14/19] xen: init memory regions for PVH
In reply to Juergen GrossQuoted 7 lines · Juergen Gross
Add all usable memory regions to grub memory management and add the needed mmap iterate code, which will be used by grub core (e.g.
grub-core/lib/relocator.corgrub-core/mmap/mmap.c).As we are running in 32-bit mode don't add memory above 4GB.
Signed-off-by Juergen Gross <[email protected]>
Daniel
Re: [Xen-devel] [PATCH v4 14/19] xen: init memory regions for PVH
In reply to Juergen GrossQuoted 29 lines · Juergen Gross
Add all usable memory regions to grub memory management and add the needed mmap iterate code, which will be used by grub core (e.g.
grub-core/lib/relocator.corgrub-core/mmap/mmap.c).As we are running in 32-bit mode don't add memory above 4GB.
Signed-off-by Juergen Gross <[email protected]>--- grub-core/kern/i386/xen/pvh.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+)grub-core/kern/i386/xen/pvh.c +10
-0@@ -299,6 +299,30 @@ grub_xen_set_mmap (void) (grub_uint32_t) (&memmap), 0, 0, 0, 0); } +static void +grub_xen_mm_init_regions (void ) +{ +grub_uint64_t modend, from, to; +unsigned int i; + + modend =grub_modules_get_end (); + +for (i =0 ; i < nr_map_entries; i++) + {
grub-core/kern/i386/xen/pvh.c grub_xen_set_mmap (void) · line 321
Quoted 10 lines
grub-core/kern/i386/xen/pvh.c +10
-0+if (map[i].type !=GRUB_MEMORY_AVAILABLE ) +continue ; + from = map[i].addr; + to = from + map[i].len; +if (from < modend) + from = modend; +if (from >= to || from >=0x100000000ULL ) +continue ; +if (to >0x100000000ULL ) + to =0x100000000ULL ;
In previous patches you have used 1ULL << 32 which I think I prefer. Overall I would consider introducing a GB(X) macro, so that you can use GB(4) in order to make this even clearer.
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerPATCH v4 15/19 xen_pvh: add build runes for grub-core
In reply to Juergen GrossAdd the modifications to the build system needed to build a xen_pvh grub.
---
V3: sorted some filenames (Daniel Kiper)
V4: add bus/pci.c to xen_pvh
--- gentpl.py | 4 ++-- grub-core/Makefile.am | 12 ++++++++++++ grub-core/Makefile.core.def | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-)
gentpl.py +2 -2
@@ -28,7 +28,7 @@ import re GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_multiboot", "i386_ieee1275", "x86_64_efi", - "i386_xen", "x86_64_xen", + "i386_xen", "x86_64_xen", "i386_xen_pvh", "mips_loongson", "sparc64_ieee1275", "powerpc_ieee1275", "mips_arc", "ia64_efi", "mips_qemu_mips", "arm_uboot", "arm_efi", "arm64_efi",
@@ -71,7 +71,7 @@ GROUPS["videomodules"] = GRUB_PLATFORMS[:]; for i in GROUPS["videoinkernel"]: GROUPS["videomodules"].remove(i) # Similar for terminfo -GROUPS["terminfoinkernel"] = [ "emu", "mips_loongson", "mips_arc", "mips_qemu_mips" ] + GROUPS["xen"] + GROUPS["ieee1275"] + GROUPS["uboot"]; +GROUPS["terminfoinkernel"] = [ "emu", "mips_loongson", "mips_arc", "mips_qemu_mips", "i386_xen_pvh" ] + GROUPS["xen"] + GROUPS["ieee1275"] + GROUPS["uboot"]; GROUPS["terminfomodule"] = GRUB_PLATFORMS[:]; for i in GROUPS["terminfoinkernel"]: GROUPS["terminfomodule"].remove(i)
grub-core/Makefile.am +12 -0
@@ -101,6 +101,18 @@ KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/int.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h endif +if COND_i386_xen_pvh +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/int.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/xen.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/xen/hypercall.h +endif + if COND_i386_efi KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
grub-core/Makefile.core.def +36 -0
@@ -79,6 +79,8 @@ kernel = { i386_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0'; x86_64_xen_ldflags = '$(TARGET_IMG_LDFLAGS)'; x86_64_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0'; + i386_xen_pvh_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_xen_pvh_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x100000'; mips_loongson_ldflags = '-Wl,-Ttext,0x80200000'; powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000';
@@ -100,6 +102,7 @@ kernel = { x86_64_efi_startup = kern/x86_64/efi/startup.S; i386_xen_startup = kern/i386/xen/startup.S; x86_64_xen_startup = kern/x86_64/xen/startup.S; + i386_xen_pvh_startup = kern/i386/xen/startup_pvh.S; i386_qemu_startup = kern/i386/qemu/startup.S; i386_ieee1275_startup = kern/i386/ieee1275/startup.S; i386_coreboot_startup = kern/i386/coreboot/startup.S;
@@ -177,6 +180,7 @@ kernel = { i386 = kern/i386/dl.c; i386_xen = kern/i386/dl.c; + i386_xen_pvh = kern/i386/dl.c; i386_coreboot = kern/i386/coreboot/init.c; i386_multiboot = kern/i386/coreboot/init.c;
@@ -222,6 +226,15 @@ kernel = { xen = disk/xen/xendisk.c; xen = commands/boot.c; + i386_xen_pvh = bus/pci.c; + i386_xen_pvh = commands/boot.c; + i386_xen_pvh = disk/xen/xendisk.c; + i386_xen_pvh = kern/i386/tsc.c; + i386_xen_pvh = kern/i386/xen/tsc.c; + i386_xen_pvh = kern/i386/xen/pvh.c; + i386_xen_pvh = kern/xen/init.c; + i386_xen_pvh = term/xen/console.c; + ia64_efi = kern/ia64/efi/startup.S; ia64_efi = kern/ia64/efi/init.c; ia64_efi = kern/ia64/dl.c;
@@ -801,6 +814,7 @@ module = { name = cpuid; common = commands/i386/cpuid.c; enable = x86; + enable = i386_xen_pvh; enable = i386_xen; enable = x86_64_xen; };
@@ -860,6 +874,7 @@ module = { i386_coreboot = lib/i386/halt.c; i386_qemu = lib/i386/halt.c; xen = lib/xen/halt.c; + i386_xen_pvh = lib/xen/halt.c; efi = lib/efi/halt.c; ieee1275 = lib/ieee1275/halt.c; emu = lib/emu/halt.c;
@@ -877,6 +892,7 @@ module = { mips_loongson = lib/mips/loongson/reboot.c; mips_qemu_mips = lib/mips/qemu_mips/reboot.c; xen = lib/xen/reboot.c; + i386_xen_pvh = lib/xen/reboot.c; uboot = lib/uboot/reboot.c; arm_coreboot = lib/dummy/reboot.c; common = commands/reboot.c;
@@ -1545,12 +1561,18 @@ module = { x86 = lib/i386/relocator16.S; x86 = lib/i386/relocator32.S; x86 = lib/i386/relocator64.S; + i386_xen_pvh = lib/i386/relocator16.S; + i386_xen_pvh = lib/i386/relocator32.S; + i386_xen_pvh = lib/i386/relocator64.S; i386 = lib/i386/relocator_asm.S; + i386_xen_pvh = lib/i386/relocator_asm.S; x86_64 = lib/x86_64/relocator_asm.S; i386_xen = lib/i386/relocator_asm.S; x86_64_xen = lib/x86_64/relocator_asm.S; x86 = lib/i386/relocator.c; x86 = lib/i386/relocator_common_c.c; + i386_xen_pvh = lib/i386/relocator.c; + i386_xen_pvh = lib/i386/relocator_common_c.c; ieee1275 = lib/ieee1275/relocator.c; efi = lib/efi/relocator.c; mips = lib/mips/relocator_asm.S;
@@ -1569,6 +1591,7 @@ module = { enable = mips; enable = powerpc; enable = x86; + enable = i386_xen_pvh; enable = xen; };
@@ -1583,6 +1606,7 @@ module = { sparc64_ieee1275 = lib/ieee1275/cmos.c; powerpc_ieee1275 = lib/ieee1275/cmos.c; xen = lib/xen/datetime.c; + i386_xen_pvh = lib/xen/datetime.c; mips_arc = lib/arc/datetime.c; enable = noemu;
@@ -1666,6 +1690,7 @@ module = { common = loader/multiboot.c; common = loader/multiboot_mbi2.c; enable = x86; + enable = i386_xen_pvh; enable = mips; };
@@ -1673,8 +1698,10 @@ module = { name = multiboot; common = loader/multiboot.c; x86 = loader/i386/multiboot_mbi.c; + i386_xen_pvh = loader/i386/multiboot_mbi.c; extra_dist = loader/multiboot_elfxx.c; enable = x86; + enable = i386_xen_pvh; }; module = {
@@ -1686,8 +1713,10 @@ module = { module = { name = linux; x86 = loader/i386/linux.c; + i386_xen_pvh = loader/i386/linux.c; xen = loader/i386/xen.c; i386_pc = lib/i386/pc/vesa_modes_table.c; + i386_xen_pvh = lib/i386/pc/vesa_modes_table.c; mips = loader/mips/linux.c; powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c; sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c;
@@ -1775,6 +1804,8 @@ module = { common = mmap/mmap.c; x86 = mmap/i386/uppermem.c; x86 = mmap/i386/mmap.c; + i386_xen_pvh = mmap/i386/uppermem.c; + i386_xen_pvh = mmap/i386/mmap.c; i386_pc = mmap/i386/pc/mmap.c; i386_pc = mmap/i386/pc/mmap_helper.S;
@@ -1784,6 +1815,7 @@ module = { mips = mmap/mips/uppermem.c; enable = x86; + enable = i386_xen_pvh; enable = ia64_efi; enable = arm_efi; enable = arm64_efi;
@@ -2023,6 +2055,7 @@ module = { name = legacy_password_test; common = tests/legacy_password_test.c; enable = i386_pc; + enable = i386_xen_pvh; enable = i386_efi; enable = x86_64_efi; enable = emu;
@@ -2221,6 +2254,7 @@ module = { xen = lib/i386/pc/vesa_modes_table.c; enable = i386_pc; + enable = i386_xen_pvh; enable = i386_efi; enable = x86_64_efi; enable = emu;
@@ -2264,10 +2298,12 @@ module = { module = { name = backtrace; x86 = lib/i386/backtrace.c; + i386_xen_pvh = lib/i386/backtrace.c; i386_xen = lib/i386/backtrace.c; x86_64_xen = lib/i386/backtrace.c; common = lib/backtrace.c; enable = x86; + enable = i386_xen_pvh; enable = i386_xen; enable = x86_64_xen; };
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerPATCH v4 16/19 grub-module-verifier: Ignore all_video for xenpvh
In reply to Juergen GrossFrom: Hans van Kranenburg <[email protected]>
This solves the build failing with "Error: no symbol table and no .moddeps section"
Also see:
- 6371e9c10433578bb236a8284ddb9ce9e201eb59
- https://savannah.gnu.org/bugs/?49012
---
V2: new patch
--- util/grub-module-verifier.c | 1 + 1 file changed, 1 insertion(+)
util/grub-module-verifier.c +1 -0
@@ -129,6 +129,7 @@ struct platform_whitelist {static struct platform_whitelist whitelists[] = { {"i386" ,"xen" , (const char *[]) {"all_video" ,0 }}, + {"i386" ,"xen_pvh" , (const char *[]) {"all_video" ,0 }}, {"x86_64" ,"xen" , (const char *[]) {"all_video" ,0 }}, {"sparc64" ,"ieee1275" , (const char *[]) {"all_video" ,0 }},
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerPATCH v4 17/19 xen_pvh: support building a standalone image
In reply to Juergen GrossSupport mkimage for xen_pvh.
In order to avoid using plain integers for the ELF notes use the available Xen include instead. While at it replace the plain numbers for Xen PV mode, too.
---
V2: some style adjustments (Daniel Kiper)
use defines for elf-notes (Daniel Kiper)
I didn't replace the 4096 by a PAGE_SIZE macro as requested by Daniel, as there isn't such a macro easily available for util/mkimage.c and I didn't introduce its usage.
--- include/grub/util/mkimage.h | 3 ++- util/grub-mkimage32.c | 4 +++- util/grub-mkimage64.c | 4 +++- util/grub-mkimagexx.c | 58 +++++++++++++++++++++++++++++++++++++-------- util/mkimage.c | 23 +++++++++++++++++- 5 files changed, 78 insertions(+), 14 deletions(-)
include/grub/util/mkimage.h +2 -1
@@ -71,7 +71,8 @@ struct grub_install_image_target_descIMAGE_I386_IEEE1275 ,IMAGE_LOONGSON_ELF ,IMAGE_QEMU ,IMAGE_PPC ,IMAGE_YEELOONG_FLASH ,IMAGE_FULOONG2F_FLASH ,IMAGE_I386_PC_PXE ,IMAGE_MIPS_ARC , -IMAGE_QEMU_MIPS_FLASH ,IMAGE_UBOOT ,IMAGE_XEN ,IMAGE_I386_PC_ELTORITO +IMAGE_QEMU_MIPS_FLASH ,IMAGE_UBOOT ,IMAGE_XEN ,IMAGE_I386_PC_ELTORITO , +IMAGE_XEN_PVH } id;enum {
util/grub-mkimage32.c +3 -1
@@ -17,7 +17,9 @@# define ELF_R_SYM (val) ELF32_R_SYM(val)# define ELF_R_TYPE (val) ELF32_R_TYPE(val)# define ELF_ST_TYPE (val) ELF32_ST_TYPE(val) -#define XEN_NOTE_SIZE 132 + +#define XEN_NOTE_SIZE 132 +#define XEN_PVH_NOTE_SIZE 20#ifndef GRUB_MKIMAGEXX #include "grub-mkimagexx.c"
util/grub-mkimage64.c +3 -1
@@ -17,7 +17,9 @@# define ELF_R_SYM (val) ELF64_R_SYM(val)# define ELF_R_TYPE (val) ELF64_R_TYPE(val)# define ELF_ST_TYPE (val) ELF64_ST_TYPE(val) -#define XEN_NOTE_SIZE 120 + +#define XEN_NOTE_SIZE 120 +#define XEN_PVH_NOTE_SIZE 24#ifndef GRUB_MKIMAGEXX #include "grub-mkimagexx.c"
util/grub-mkimagexx.c +48 -10
128 lines not on this page · raw message
util/mkimage.c +22 -1
@@ -132,6 +132,24 @@ static const struct grub_install_image_target_desc image_targets[] = .link_addr = GRUB_KERNEL_I386_PC_LINK_ADDR, .default_compression = GRUB_COMPRESSION_LZMA }, + { + .dirname = "i386-xen_pvh", + .names = { "i386-xen_pvh", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_XEN_PVH, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .elf_target = EM_386, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_I386_XEN_PVH_LINK_ADDR, + .mod_align = GRUB_KERNEL_I386_XEN_PVH_MOD_ALIGN, + .link_align = 4 + }, { .dirname ="i386-pc" , .names = { "i386-pc-pxe", NULL },
@@ -860,7 +878,8 @@ grub_install_generate_image (const char *dir, const char *prefix,else kernel_img =grub_mkimage_load_image64 (kernel_path, total_module_size, &layout, image_target); -if (image_target->id ==IMAGE_XEN && layout.align <4096 ) +if ((image_target->id ==IMAGE_XEN || image_target->id ==IMAGE_XEN_PVH ) && + layout.align <4096 ) layout.align =4096 ; if ((image_target->flags & PLATFORM_FLAGS_DECOMPRESSORS)
@@ -1103,6 +1122,7 @@ grub_install_generate_image (const char *dir, const char *prefix,case IMAGE_MIPS_ARC :case IMAGE_QEMU_MIPS_FLASH :case IMAGE_XEN : +case IMAGE_XEN_PVH :break ;case IMAGE_SPARC64_AOUT :case IMAGE_SPARC64_RAW :
@@ -1679,6 +1699,7 @@ grub_install_generate_image (const char *dir, const char *prefix,case IMAGE_LOONGSON_ELF :case IMAGE_PPC :case IMAGE_XEN : +case IMAGE_XEN_PVH :case IMAGE_COREBOOT :case IMAGE_I386_IEEE1275 : {
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 17/19] xen_pvh: support building a standalone image
Quoted 11 lines · Juergen Gross
Support mkimage for
xen_pvh.In order to avoid using plain integers for the ELF notes use the available Xen include instead. While at it replace the plain numbers for Xen PV mode, too.
Signed-off-by Juergen Gross <[email protected]>Reviewed-by Daniel Kiper <[email protected]>---
V2: some style adjustments (Daniel Kiper)
use defines for elf-notes (Daniel Kiper)
Thanks a lot! However, I would like to ask you to move the latter to separate patch. You can retain my RB though.
Daniel
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Re: [PATCH v4 17/19] xen_pvh: support building a standalone image
In reply to Juergen GrossQuoted 11 lines · Juergen Gross
Support mkimage for
xen_pvh.In order to avoid using plain integers for the ELF notes use the available Xen include instead. While at it replace the plain numbers for Xen PV mode, too.
Signed-off-by Juergen Gross <[email protected]>Reviewed-by Daniel Kiper <[email protected]>---
V2: some style adjustments (Daniel Kiper)
use defines for elf-notes (Daniel Kiper)
Thanks a lot! However, I would like to ask you to move the latter to separate patch. You can retain my RB though.
Daniel
Juergen Gross
maintainerPATCH v4 18/19 xen_pvh: support grub-install for xen_pvh
In reply to Juergen GrossAdd xen_pvh support to grub-install.
--- include/grub/util/install.h | 1 + util/grub-install-common.c | 1 + util/grub-install.c | 7 +++++++ 3 files changed, 9 insertions(+)
include/grub/util/install.h +1 -0
@@ -100,6 +100,7 @@ enum grub_install_platGRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS ,GRUB_INSTALL_PLATFORM_I386_XEN ,GRUB_INSTALL_PLATFORM_X86_64_XEN , +GRUB_INSTALL_PLATFORM_I386_XEN_PVH ,GRUB_INSTALL_PLATFORM_ARM64_EFI ,GRUB_INSTALL_PLATFORM_ARM_COREBOOT ,GRUB_INSTALL_PLATFORM_MAX
util/grub-install-common.c +1 -0
@@ -716,6 +716,7 @@ static struct [GRUB_INSTALL_PLATFORM_X86_64_EFI] = { "x86_64", "efi" }, [GRUB_INSTALL_PLATFORM_I386_XEN] = { "i386", "xen" }, [GRUB_INSTALL_PLATFORM_X86_64_XEN] = { "x86_64", "xen" }, + [GRUB_INSTALL_PLATFORM_I386_XEN_PVH] = { "i386", "xen_pvh" }, [GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON] = { "mipsel", "loongson" }, [GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS] = { "mipsel", "qemu_mips" }, [GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS] = { "mips", "qemu_mips" },
util/grub-install.c +7 -0
@@ -496,6 +496,7 @@ have_bootdev (enum grub_install_plat pl)case GRUB_INSTALL_PLATFORM_I386_XEN :case GRUB_INSTALL_PLATFORM_X86_64_XEN : +case GRUB_INSTALL_PLATFORM_I386_XEN_PVH :return 0 ;/* pacify warning. */
@@ -913,6 +914,7 @@ main (int argc, char *argv[])case GRUB_INSTALL_PLATFORM_ARM_UBOOT :case GRUB_INSTALL_PLATFORM_I386_XEN :case GRUB_INSTALL_PLATFORM_X86_64_XEN : +case GRUB_INSTALL_PLATFORM_I386_XEN_PVH :break ;case GRUB_INSTALL_PLATFORM_I386_QEMU :
@@ -960,6 +962,7 @@ main (int argc, char *argv[])case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS :case GRUB_INSTALL_PLATFORM_I386_XEN :case GRUB_INSTALL_PLATFORM_X86_64_XEN : +case GRUB_INSTALL_PLATFORM_I386_XEN_PVH :free (install_device); install_device =NULL ;break ;
@@ -1477,6 +1480,7 @@ main (int argc, char *argv[])case GRUB_INSTALL_PLATFORM_ARM_UBOOT :case GRUB_INSTALL_PLATFORM_I386_XEN :case GRUB_INSTALL_PLATFORM_X86_64_XEN : +case GRUB_INSTALL_PLATFORM_I386_XEN_PVH :grub_util_warn ("%s" ,_ ("no hints available for your platform. Expect reduced performance" ));break ;/* pacify warning. */
@@ -1568,6 +1572,7 @@ main (int argc, char *argv[])case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275 :case GRUB_INSTALL_PLATFORM_I386_XEN :case GRUB_INSTALL_PLATFORM_X86_64_XEN : +case GRUB_INSTALL_PLATFORM_I386_XEN_PVH : core_name ="core.elf" ; snprintf (mkimage_target, sizeof (mkimage_target), "%s-%s",
@@ -1660,6 +1665,7 @@ main (int argc, char *argv[])case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275 :case GRUB_INSTALL_PLATFORM_I386_XEN :case GRUB_INSTALL_PLATFORM_X86_64_XEN : +case GRUB_INSTALL_PLATFORM_I386_XEN_PVH :break ;/* pacify warning. */ case GRUB_INSTALL_PLATFORM_MAX :
@@ -1926,6 +1932,7 @@ main (int argc, char *argv[])case GRUB_INSTALL_PLATFORM_I386_QEMU :case GRUB_INSTALL_PLATFORM_I386_XEN :case GRUB_INSTALL_PLATFORM_X86_64_XEN : +case GRUB_INSTALL_PLATFORM_I386_XEN_PVH :grub_util_warn ("%s" ,_ ("WARNING: no platform-specific install was performed" ));break ;
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
Juergen Gross
maintainerPATCH v4 19/19 xen_pvh: add support to configure
In reply to Juergen GrossSupport platform i386/xen_pvh in configure.
--- configure.ac | 3 +++ 1 file changed, 3 insertions(+)
configure.ac +3 -0
@@ -151,6 +151,7 @@ case "$target_cpu"-"$platform" in i386-efi) ;; x86_64-efi) ;; i386-xen) ;; + i386-xen_pvh) ;; x86_64-xen) ;; i386-pc) ;; i386-multiboot) ;;
@@ -219,6 +220,7 @@ case "$platform" in multiboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MULTIBOOT=1" ;; efi) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EFI=1" ;; xen) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_XEN=1" ;; + xen_pvh) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_XEN_PVH=1" ;; ieee1275) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_IEEE1275=1" ;; uboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_UBOOT=1" ;; qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;;
@@ -1897,6 +1899,7 @@ AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot]) AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi]) AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen]) +AM_CONDITIONAL([COND_i386_xen_pvh], [test x$target_cpu = xi386 -a x$platform = xxen_pvh]) AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen]) AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson]) AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips])
Signature · 7 lines
2.16.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel