WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ia64-devel

Re: [Xen-ia64-devel] [patch 01/14] kexec for xen

To: Simon Horman <horms@xxxxxxxxxxxx>
Subject: Re: [Xen-ia64-devel] [patch 01/14] kexec for xen
From: Alex Williamson <alex.williamson@xxxxxx>
Date: Wed, 12 Sep 2007 12:21:19 -0600
Cc: xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Wed, 12 Sep 2007 11:21:40 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <20070912082601.199337604@xxxxxxxxxxxx>
List-help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-id: Discussion of the ia64 port of Xen <xen-ia64-devel.lists.xensource.com>
List-post: <mailto:xen-ia64-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: OSLO R&D
References: <20070912080845.674923870@xxxxxxxxxxxx> <20070912082601.199337604@xxxxxxxxxxxx>
Sender: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx
On Wed, 2007-09-12 at 17:08 +0900, Simon Horman wrote:

> @@ -401,6 +406,14 @@ efi_get_pal_addr (void)
>  
>  #ifdef XEN
>  void *pal_vaddr = 0;
> +
> +void *
> +efi_get_pal_addr(void)
> +{
> +     if (pal_vaddr)
> +             return pal_vaddr;
> +     return pal_vaddr = __efi_get_pal_addr();
> +}
>  #endif

Coding style nit

        if (!pal_vaddr)
                pal_vaddr = __efi_get_pal_addr();
        return pal_vaddr;

Does the same thing in the same number of lines and is cleaner IMHO.
 
>  void
> @@ -408,9 +421,7 @@ efi_map_pal_code (void)
>  {
>  #ifdef XEN
>       u64 psr;
> -     if (!pal_vaddr) {
> -             pal_vaddr = efi_get_pal_addr ();
> -     }
> +     efi_get_pal_addr();

(void)efi_get_pal_addr();  to make it obvious the return is
intentionally ignored?


> +#ifdef XEN
> +/* find a block of memory aligned to 64M exclude reserved regions
> + * rsvd_regions are sorted
> + */
> +unsigned long
> +kdump_find_rsvd_region(unsigned long size, struct rsvd_region *r, int n)
> +{

   This all looks fine, but is there any reason this chunk of memory
needs to be at a low address?  If not, maybe the memmap should be
searched in reverse order to avoid using up 32bit memory (should it
exist).

> +     int i;
> +     u64 start, end;
> +     u64 alignment = 1UL << _PAGE_SIZE_64M;
> +     void *efi_map_start, *efi_map_end, *p;
> +     efi_memory_desc_t *md;
> +     u64 efi_desc_size;
> +
> +     efi_map_start = __va(ia64_boot_param->efi_memmap);
> +     efi_map_end   = efi_map_start + ia64_boot_param->efi_memmap_size;
> +     efi_desc_size = ia64_boot_param->efi_memdesc_size;
> +
> +     for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
> +             md = p;
> +             if (!efi_wb(md))
> +                     continue;
> +             start = ALIGN(md->phys_addr, alignment);
> +             end = efi_md_end(md);
> +             for (i = 0; i < n; i++) {
> +                     if (__pa(r[i].start) >= start && __pa(r[i].end) < end) {
> +                             if (__pa(r[i].start) > start + size)
> +                                     return start;
> +                             start = ALIGN(__pa(r[i].end), alignment);
> +                             if (i < n - 1
> +                                 && __pa(r[i + 1].start) < start + size)
> +                                     continue;
> +                             else
> +                                     break;
> +                     }
> +             }
> +             if (end > start + size)
> +                     return start;
> +     }
> +
> +     printk(KERN_WARNING
> +            "Cannot reserve 0x%lx byte of memory for crashdump\n", size);
> +     return ~0UL;
> +}
> +#endif

   There seems to be a mix of tab and space indenting in the
machine_kexec.c changes.  Please pick one.

> Index: xen-unstable.hg/xen/arch/ia64/xen/machine_kexec.c
> ===================================================================
> --- xen-unstable.hg.orig/xen/arch/ia64/xen/machine_kexec.c    2007-07-11 
> 13:20:14.000000000 +0900
> +++ xen-unstable.hg/xen/arch/ia64/xen/machine_kexec.c 2007-07-11 
> 13:20:16.000000000 +0900

> +static void ia64_machine_kexec(struct unw_frame_info *info, void *arg)
> +{
> +    xen_kexec_image_t *image = arg;
> +    relocate_new_kernel_t rnk;
> +    unsigned long code_addr = (unsigned long)__va(image->reboot_code_buffer);
> +    unsigned long cpu_data_pa = (unsigned long)
> +                             __pa(cpu_data(smp_processor_id()));
> +    unsigned long vector;
> +    int ii;
> +
> +    /* Interrupts aren't acceptable while we reboot */
> +    local_irq_disable();
> +
> +    /* Mask CMC and Performance Monitor interrupts */
> +    ia64_setreg(_IA64_REG_CR_PMV, 1 << 16);
> +    ia64_setreg(_IA64_REG_CR_CMCV, 1 << 16);
> +
> +    /* Mask ITV and Local Redirect Registers */
> +    ia64_set_itv(1 << 16);
> +    ia64_set_lrr0(1 << 16);
> +    ia64_set_lrr1(1 << 16);
> +
> +    /* terminate possible nested in-service interrupts */
> +    for (ii = 0; ii < 16; ii++)
> +        ia64_eoi();
> +
> +    /* unmask TPR and clear any pending interrupts */
> +    ia64_setreg(_IA64_REG_CR_TPR, 0);
> +    ia64_srlz_d();
> +    vector = ia64_get_ivr();
> +    while (vector != IA64_SPURIOUS_INT_VECTOR) {
> +        ia64_eoi();
> +        vector = ia64_get_ivr();
> +    }

   Is there a need for vector?  It seems extraneous

    while (ia64_get_ivr() != IA64_SPURIOUS_INT_VECTOR)
        ia64_eoi();

Thanks,

        Alex

-- 
Alex Williamson                             HP Open Source & Linux Org.


_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel

<Prev in Thread] Current Thread [Next in Thread>