[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xen PVonHVM: move shared_info to reserved memory area



>>> On 25.10.12 at 11:04, Olaf Hering <olaf@xxxxxxxxx> wrote:
> @@ -1495,38 +1494,53 @@ asmlinkage void __init xen_start_kernel(void)
>  #endif
>  }
>  
> -void __ref xen_hvm_init_shared_info(void)

Was the __ref here in fact unnecessary (i.e. did you check that
its removal doesn't cause any section mismatch warnings)?

> +#ifdef CONFIG_XEN_PVHVM
> +#define HVM_SHARED_INFO_ADDR 0xFE700000UL
> +static struct shared_info *xen_hvm_shared_info;
> +
> +static void xen_hvm_connect_shared_info(unsigned long pfn)
>  {
> -     int cpu;
>       struct xen_add_to_physmap xatp;
> -     static struct shared_info *shared_info_page = 0;
>  
> -     if (!shared_info_page)
> -             shared_info_page = (struct shared_info *)
> -                     extend_brk(PAGE_SIZE, PAGE_SIZE);
>       xatp.domid = DOMID_SELF;
>       xatp.idx = 0;
>       xatp.space = XENMAPSPACE_shared_info;
> -     xatp.gpfn = __pa(shared_info_page) >> PAGE_SHIFT;
> +     xatp.gpfn = pfn;
>       if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp))
>               BUG();
>  
> -     HYPERVISOR_shared_info = (struct shared_info *)shared_info_page;
> +}
> +static void xen_hvm_set_shared_info(struct shared_info *sip)

With its sole caller being __init, this should also be __init.

Jan

> +{
> +     int cpu;
> +
> +     HYPERVISOR_shared_info = sip;
>  
>       /* xen_vcpu is a pointer to the vcpu_info struct in the shared_info
>        * page, we use it in the event channel upcall and in some pvclock
>        * related functions. We don't need the vcpu_info placement
>        * optimizations because we don't use any pv_mmu or pv_irq op on
> -      * HVM.
> -      * When xen_hvm_init_shared_info is run at boot time only vcpu 0 is
> -      * online but xen_hvm_init_shared_info is run at resume time too and
> -      * in that case multiple vcpus might be online. */
> -     for_each_online_cpu(cpu) {
> +      * HVM. */
> +     for_each_online_cpu(cpu)
>               per_cpu(xen_vcpu, cpu) = 
> &HYPERVISOR_shared_info->vcpu_info[cpu];
> -     }
>  }
>  
> -#ifdef CONFIG_XEN_PVHVM
> +/* Reconnect the shared_info pfn to a (new) mfn */
> +void xen_hvm_resume_shared_info(void)
> +{
> +     xen_hvm_connect_shared_info(HVM_SHARED_INFO_ADDR >> PAGE_SHIFT);
> +}
> +
> +/* Obtain an address to the pfn in reserved area */
> +void __init xen_hvm_init_shared_info(void)
> +{
> +     set_fixmap(FIX_PARAVIRT_BOOTMAP, HVM_SHARED_INFO_ADDR);
> +     xen_hvm_shared_info =
> +             (struct shared_info *)fix_to_virt(FIX_PARAVIRT_BOOTMAP);
> +     xen_hvm_connect_shared_info(HVM_SHARED_INFO_ADDR >> PAGE_SHIFT);
> +     xen_hvm_set_shared_info(xen_hvm_shared_info);
> +}
> +
>  static void __init init_hvm_pv_info(void)
>  {
>       int major, minor;



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.