NetBSD-Bugs archive

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

Re: port-xen/45961: panic: kernel diagnostic assertion "err == 0" failed: file "/usr/src/sys/arch/xen/xen/clock.c", line 465



The following reply was made to PR port-xen/45961; it has been noted by GNATS.

From: Manuel Bouyer <bouyer%antioche.eu.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: port-xen-maintainer%NetBSD.org@localhost, gnats-admin%NetBSD.org@localhost,
        netbsd-bugs%NetBSD.org@localhost
Subject: Re: port-xen/45961: panic: kernel diagnostic assertion "err == 0"
 failed: file "/usr/src/sys/arch/xen/xen/clock.c", line 465
Date: Fri, 10 Feb 2012 17:30:17 +0100

 --rwEMma7ioTxnRzrJ
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 On Fri, Feb 10, 2012 at 02:45:00AM +0000, riz%NetBSD.org@localhost wrote:
 > I got the following crash on Amazon EC2.  I assume it had
 > something to do with the fact that this hypervisor
 > says it's 3.0.
 > 
 > 
 > Loaded initial symtab at 0xffffffff807fb204, strtab at 0xffffffff80850e68, # 
 > entries 14537
 > Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 >     2006, 2007, 2008, 2009, 2010, 2011, 2012
 >     The NetBSD Foundation, Inc.  All rights reserved.
 > Copyright (c) 1982, 1986, 1989, 1991, 1993
 >     The Regents of the University of California.  All rights reserved.
 > 
 > NetBSD 5.99.64 (EC2) #0: Thu Feb  9 17:10:50 PST 2012
 >      riz@wintermute:/space/build/obj.amd64/sys/arch/amd64/compile/EC2
 > total memory = 7680 MB
 > avail memory = 7427 MB
 > cprng kernel: WARNING insufficient entropy at creation.
 > mainbus0 (root)
 > hypervisor0 at mainbus0: Xen version 3.0
 > vcpu0 at hypervisor0: Intel(R) Xeon(R) CPU           E5430  @ 2.66GHz, id 
 > 0x1067a
 > vcpu1 at hypervisor0pmap_kenter_pa: mapping already present
 > vcpu1: feature mismatch: cpu_feature[0] is 0xbeebcbf7, but CPU reported 
 > 0xbfebfbff
 > : Intel(R) Xeon(R) CPU           E5430  @ 2.66GHz, id 0x1067a
 > xenbus0 at hypervisor0: Xen Virtual Bus Interface
 > xencons0 at hypervisor0: Xen Virtual Console Driver
 > panic: kernel diagnostic assertion "err == 0" failed: file 
 > "/usr/src/sys/arch/xen/xen/clock.c", line 465 
 
 I assumed there wouldn't be Xen 3.0 installation around any more; it looks
 like I was wrong :(
 
 Can you try the attached patch ?
 
 -- 
 Manuel Bouyer <bouyer%antioche.eu.org@localhost>
      NetBSD: 26 ans d'experience feront toujours la difference
 --
 
 --rwEMma7ioTxnRzrJ
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: attachment; filename="xenclock.diff"
 
 Index: sys/arch/xen/include/hypervisor.h
 ===================================================================
 RCS file: /cvsroot/src/sys/arch/xen/include/hypervisor.h,v
 retrieving revision 1.36
 diff -u -p -u -r1.36 hypervisor.h
 --- sys/arch/xen/include/hypervisor.h  7 Dec 2011 15:47:42 -0000       1.36
 +++ sys/arch/xen/include/hypervisor.h  10 Feb 2012 16:29:11 -0000
 @@ -133,6 +133,10 @@ struct cpu_info;
  void do_hypervisor_callback(struct intrframe *regs);
  void hypervisor_enable_event(unsigned int);
  
 +extern int xen_version;
 +#define XEN_MAJOR(x) (((x) & 0xffff0000) >> 16)
 +#define XEN_MINOR(x) ((x) & 0x0000ffff)
 +
  /* hypervisor_machdep.c */
  void hypervisor_send_event(struct cpu_info *, unsigned int);
  void hypervisor_unmask_event(unsigned int);
 Index: sys/arch/xen/xen/clock.c
 ===================================================================
 RCS file: /cvsroot/src/sys/arch/xen/xen/clock.c,v
 retrieving revision 1.60
 diff -u -p -u -r1.60 clock.c
 --- sys/arch/xen/xen/clock.c   9 Jan 2012 13:35:42 -0000       1.60
 +++ sys/arch/xen/xen/clock.c   10 Feb 2012 16:29:11 -0000
 @@ -458,11 +458,14 @@ xen_initclocks(void)
         * after a while. Use the one-shot timer every NS_PER_TICK
         * and rearm it from the event handler.
         */
 -      err = HYPERVISOR_vcpu_op(VCPUOP_stop_periodic_timer,
 -                               ci->ci_cpuid,
 -                               NULL);
 +      if (XEN_MAJOR(xen_version) > 3 || XEN_MINOR(xen_version) > 0) {
 +              /* exists only on Xen 3.1 and later */
 +              err = HYPERVISOR_vcpu_op(VCPUOP_stop_periodic_timer,
 +                                       ci->ci_cpuid,
 +                                       NULL);
  
 -      KASSERT(err == 0);
 +              KASSERT(err == 0);
 +      }
        err = HYPERVISOR_set_timer_op(
            vcpu_system_time[ci->ci_cpuid] + NS_PER_TICK);
        KASSERT(err == 0);
 Index: sys/arch/xen/xen/hypervisor.c
 ===================================================================
 RCS file: /cvsroot/src/sys/arch/xen/xen/hypervisor.c,v
 retrieving revision 1.60
 diff -u -p -u -r1.60 hypervisor.c
 --- sys/arch/xen/xen/hypervisor.c      9 Dec 2011 11:47:49 -0000       1.60
 +++ sys/arch/xen/xen/hypervisor.c      10 Feb 2012 16:29:11 -0000
 @@ -169,6 +169,8 @@ struct  x86_isa_chipset x86_isa_chipset;
  #endif
  #endif
  
 +int xen_version;
 +
  /* power management, for save/restore */
  static bool hypervisor_suspend(device_t, const pmf_qual_t *);
  static bool hypervisor_resume(device_t, const pmf_qual_t *);
 @@ -201,7 +203,6 @@ hypervisor_vcpu_print(void *aux, const c
  void
  hypervisor_attach(device_t parent, device_t self, void *aux)
  {
 -      int xen_version;
  
  #if NPCI >0
  #ifdef PCI_BUS_FIXUP
 @@ -213,8 +214,8 @@ hypervisor_attach(device_t parent, devic
        xenkernfs_init();
  
        xen_version = HYPERVISOR_xen_version(XENVER_version, NULL);
 -      aprint_normal(": Xen version %d.%d\n", (xen_version & 0xffff0000) >> 16,
 -             xen_version & 0x0000ffff);
 +      aprint_normal(": Xen version %d.%d\n", XEN_MAJOR(xen_version),
 +             XEN_MINOR(xen_version));
  
        xengnt_init();
        events_init();
 
 --rwEMma7ioTxnRzrJ--
 


Home | Main Index | Thread Index | Old Index