svn commit: r269508 - head/sys/x86/xen

Roger Pau Monné royger at FreeBSD.org
Mon Aug 4 08:43:28 UTC 2014


Author: royger
Date: Mon Aug  4 08:43:27 2014
New Revision: 269508
URL: http://svnweb.freebsd.org/changeset/base/269508

Log:
  xen: mask all event channels on init
  
  Mask all event channels during initialization. This is done so that we
  don't receive spurious interrupts while dynamically registering new
  event channels. There's a small window during registration where an
  event channel can fire before we have attached a handler to it.
  
  Sponsored by: Citrix Systems R&D
  
  x86/xen/xen_intr.c:
   - Mask all event channels on init.

Modified:
  head/sys/x86/xen/xen_intr.c

Modified: head/sys/x86/xen/xen_intr.c
==============================================================================
--- head/sys/x86/xen/xen_intr.c	Mon Aug  4 08:42:29 2014	(r269507)
+++ head/sys/x86/xen/xen_intr.c	Mon Aug  4 08:43:27 2014	(r269508)
@@ -584,6 +584,7 @@ xen_intr_handle_upcall(struct trapframe 
 static int
 xen_intr_init(void *dummy __unused)
 {
+	shared_info_t *s = HYPERVISOR_shared_info;
 	struct xen_intr_pcpu_data *pcpu;
 	struct physdev_pirq_eoi_gmfn eoi_gmfn;
 	int i, rc;
@@ -607,6 +608,9 @@ xen_intr_init(void *dummy __unused)
 		xen_intr_intrcnt_add(i);
 	}
 
+	for (i = 0; i < nitems(s->evtchn_mask); i++)
+		atomic_store_rel_long(&s->evtchn_mask[i], ~0);
+
 	/* Try to register PIRQ EOI map */
 	xen_intr_pirq_eoi_map = malloc(PAGE_SIZE, M_XENINTR, M_WAITOK | M_ZERO);
 	eoi_gmfn.gmfn = atop(vtophys(xen_intr_pirq_eoi_map));


More information about the svn-src-head mailing list