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-changelog

[Xen-changelog] [xen-unstable] credit: allocate CPU masks dynamically

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] credit: allocate CPU masks dynamically
From: Xen patchbot-unstable <patchbot@xxxxxxx>
Date: Tue, 25 Oct 2011 01:55:14 +0100
Delivery-date: Mon, 24 Oct 2011 17:56:41 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Jan Beulich <jbeulich@xxxxxxxx>
# Date 1319183043 -7200
# Node ID 8269826353d8b9e5bb6248f22e85f6d4280ad9c9
# Parent  53528bab2eb423c352d6d43963b9bb7ee16abf18
credit: allocate CPU masks dynamically

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Acked-by: Keir Fraser <keir@xxxxxxx>
---


diff -r 53528bab2eb4 -r 8269826353d8 xen/common/sched_credit.c
--- a/xen/common/sched_credit.c Fri Oct 21 09:43:35 2011 +0200
+++ b/xen/common/sched_credit.c Fri Oct 21 09:44:03 2011 +0200
@@ -166,8 +166,8 @@
     uint32_t ncpus;
     struct timer  master_ticker;
     unsigned int master;
-    cpumask_t idlers;
-    cpumask_t cpus;
+    cpumask_var_t idlers;
+    cpumask_var_t cpus;
     uint32_t weight;
     uint32_t credit;
     int credit_balance;
@@ -283,7 +283,7 @@
      */
     if ( cur->pri > CSCHED_PRI_IDLE )
     {
-        if ( cpumask_empty(&prv->idlers) )
+        if ( cpumask_empty(prv->idlers) )
         {
             CSCHED_STAT_CRANK(tickle_idlers_none);
         }
@@ -291,7 +291,7 @@
         {
             cpumask_t idle_mask;
 
-            cpumask_and(&idle_mask, &prv->idlers, new->vcpu->cpu_affinity);
+            cpumask_and(&idle_mask, prv->idlers, new->vcpu->cpu_affinity);
             if ( !cpumask_empty(&idle_mask) )
             {
                 CSCHED_STAT_CRANK(tickle_idlers_some);
@@ -327,11 +327,11 @@
 
     prv->credit -= prv->credits_per_tslice;
     prv->ncpus--;
-    cpu_clear(cpu, prv->idlers);
-    cpu_clear(cpu, prv->cpus);
+    cpumask_clear_cpu(cpu, prv->idlers);
+    cpumask_clear_cpu(cpu, prv->cpus);
     if ( (prv->master == cpu) && (prv->ncpus > 0) )
     {
-        prv->master = first_cpu(prv->cpus);
+        prv->master = cpumask_first(prv->cpus);
         migrate_timer(&prv->master_ticker, prv->master);
     }
     kill_timer(&spc->ticker);
@@ -360,7 +360,7 @@
     /* Initialize/update system-wide config */
     prv->credit += prv->credits_per_tslice;
     prv->ncpus++;
-    cpu_set(cpu, prv->cpus);
+    cpumask_set_cpu(cpu, prv->cpus);
     if ( prv->ncpus == 1 )
     {
         prv->master = cpu;
@@ -380,7 +380,7 @@
 
     /* Start off idling... */
     BUG_ON(!is_idle_vcpu(per_cpu(schedule_data, cpu).curr));
-    cpu_set(cpu, prv->idlers);
+    cpumask_set_cpu(cpu, prv->idlers);
 
     spin_unlock_irqrestore(&prv->lock, flags);
 
@@ -488,7 +488,7 @@
      * like run two VCPUs on co-hyperthreads while there are idle cores
      * or sockets.
      */
-    cpumask_and(&idlers, &cpu_online_map, &CSCHED_PRIV(ops)->idlers);
+    cpumask_and(&idlers, &cpu_online_map, CSCHED_PRIV(ops)->idlers);
     cpumask_set_cpu(cpu, &idlers);
     cpumask_and(&cpus, &cpus, &idlers);
     cpumask_clear_cpu(cpu, &cpus);
@@ -1242,7 +1242,7 @@
      * Peek at non-idling CPUs in the system, starting with our
      * immediate neighbour.
      */
-    cpumask_andnot(&workers, online, &prv->idlers);
+    cpumask_andnot(&workers, online, prv->idlers);
     cpumask_clear_cpu(cpu, &workers);
     peer_cpu = cpu;
 
@@ -1356,12 +1356,12 @@
      */
     if ( snext->pri == CSCHED_PRI_IDLE )
     {
-        if ( !cpu_isset(cpu, prv->idlers) )
-            cpu_set(cpu, prv->idlers);
+        if ( !cpumask_test_cpu(cpu, prv->idlers) )
+            cpumask_set_cpu(cpu, prv->idlers);
     }
-    else if ( cpu_isset(cpu, prv->idlers) )
+    else if ( cpumask_test_cpu(cpu, prv->idlers) )
     {
-        cpu_clear(cpu, prv->idlers);
+        cpumask_clear_cpu(cpu, prv->idlers);
     }
 
     if ( !is_idle_vcpu(snext->vcpu) )
@@ -1481,7 +1481,7 @@
            prv->ticks_per_tslice,
            vcpu_migration_delay);
 
-    cpumask_scnprintf(idlers_buf, sizeof(idlers_buf), &prv->idlers);
+    cpumask_scnprintf(idlers_buf, sizeof(idlers_buf), prv->idlers);
     printk("idlers: %s\n", idlers_buf);
 
     printk("active vcpus:\n");
@@ -1513,6 +1513,13 @@
     prv = xzalloc(struct csched_private);
     if ( prv == NULL )
         return -ENOMEM;
+    if ( !zalloc_cpumask_var(&prv->cpus) ||
+         !zalloc_cpumask_var(&prv->idlers) )
+    {
+        free_cpumask_var(prv->cpus);
+        xfree(prv);
+        return -ENOMEM;
+    }
 
     ops->sched_data = prv;
     spin_lock_init(&prv->lock);
@@ -1536,7 +1543,11 @@
 
     prv = CSCHED_PRIV(ops);
     if ( prv != NULL )
+    {
+        free_cpumask_var(prv->cpus);
+        free_cpumask_var(prv->idlers);
         xfree(prv);
+    }
 }
 
 static void csched_tick_suspend(const struct scheduler *ops, unsigned int cpu)

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] credit: allocate CPU masks dynamically, Xen patchbot-unstable <=