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

[Xen-changelog] [xen-unstable] x86/HPET: fix oversight in 23033:84bacd800bf8 (2nd try)



# HG changeset patch
# User Jan Beulich <jbeulich@xxxxxxxxxx>
# Date 1300368761 0
# Node ID c0a717aa8415ae975ad58b9756cd2b82e4da0319
# Parent  93c864c16ab19756e44da20a6c3d09c3a3ce948e
x86/HPET: fix oversight in 23033:84bacd800bf8 (2nd try)

Clearly for the adjusted BUG_ON()s to not yield false positives
num_hpets_used (rather than num_chs_used, as done mistakenly in
23042:599ceb5b0a9b) must be incremented before setting up an IRQ (and
decremented back when the setup failed). To avoid further confusion,
just eliminate the local variable altogether.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---


diff -r 93c864c16ab1 -r c0a717aa8415 xen/arch/x86/hpet.c
--- a/xen/arch/x86/hpet.c       Thu Mar 17 13:31:43 2011 +0000
+++ b/xen/arch/x86/hpet.c       Thu Mar 17 13:32:41 2011 +0000
@@ -392,17 +392,17 @@
     return irq;
 }
 
-static unsigned int __init hpet_fsb_cap_lookup(void)
+static void __init hpet_fsb_cap_lookup(void)
 {
     u32 id;
-    unsigned int i, num_chs, num_chs_used;
+    unsigned int i, num_chs;
 
     /* TODO. */
     if ( iommu_intremap )
     {
         printk(XENLOG_INFO "HPET's MSI mode hasn't been supported when "
             "Interrupt Remapping is enabled.\n");
-        return 0;
+        return;
     }
 
     id = hpet_read32(HPET_ID);
@@ -412,13 +412,12 @@
 
     hpet_events = xmalloc_array(struct hpet_event_channel, num_chs);
     if ( !hpet_events )
-        return 0;
+        return;
     memset(hpet_events, 0, num_chs * sizeof(*hpet_events));
 
-    num_chs_used = 0;
     for ( i = 0; i < num_chs; i++ )
     {
-        struct hpet_event_channel *ch = &hpet_events[num_chs_used];
+        struct hpet_event_channel *ch = &hpet_events[num_hpets_used];
         u32 cfg = hpet_read32(HPET_Tn_CFG(i));
 
         /* Only consider HPET timer with MSI support */
@@ -428,14 +427,12 @@
         ch->flags = 0;
         ch->idx = i;
 
-        if ( (ch->irq = hpet_assign_irq(num_chs_used++)) < 0 )
-            num_chs_used--;
+        if ( (ch->irq = hpet_assign_irq(num_hpets_used++)) < 0 )
+            num_hpets_used--;
     }
 
     printk(XENLOG_INFO "HPET: %u timers (%u will be used for broadcast)\n",
-           num_chs, num_chs_used);
-
-    return num_chs_used;
+           num_chs, num_hpets_used);
 }
 
 static struct hpet_event_channel *hpet_get_channel(unsigned int cpu)
@@ -555,7 +552,7 @@
 
     cfg = hpet_read32(HPET_CFG);
 
-    num_hpets_used = hpet_fsb_cap_lookup();
+    hpet_fsb_cap_lookup();
     if ( num_hpets_used > 0 )
     {
         /* Stop HPET legacy interrupts */

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


 


Rackspace

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