All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juergen Gross <jgross@suse.com>
To: xen-devel@lists.xenproject.org
Cc: Juergen Gross <jgross@suse.com>, Tim Deegan <tim@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	George Dunlap <george.dunlap@eu.citrix.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	Dario Faggioli <dfaggioli@suse.com>,
	Julien Grall <julien.grall@arm.com>,
	Meng Xu <mengxu@cis.upenn.edu>, Jan Beulich <jbeulich@suse.com>
Subject: [Xen-devel] [PATCH v3 13/47] xen/sched: add is_running indicator to struct sched_unit
Date: Sat, 14 Sep 2019 10:52:17 +0200	[thread overview]
Message-ID: <20190914085251.18816-14-jgross@suse.com> (raw)
In-Reply-To: <20190914085251.18816-1-jgross@suse.com>

Add an is_running indicator to struct sched_unit which will be set
whenever the unit is being scheduled. Switch scheduler code to use
unit->is_running instead of vcpu->is_running for scheduling decisions.

At the same time introduce a state_entry_time field in struct
sched_unit being updated whenever the is_running indicator is changed.
Use that new field in the schedulers instead of the similar vcpu field.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
RFC V2:
- fix arm build, don't drop v->is_running
V3:
- avoid holes in structures (Jan Beulich)
---
 xen/common/sched_credit.c  | 12 +++++++-----
 xen/common/sched_credit2.c | 18 +++++++++---------
 xen/common/sched_rt.c      |  2 +-
 xen/common/schedule.c      | 13 ++++++++++---
 xen/include/xen/sched.h    |  6 ++++++
 5 files changed, 33 insertions(+), 18 deletions(-)

diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c
index 2bf11b0616..c0f6ef831e 100644
--- a/xen/common/sched_credit.c
+++ b/xen/common/sched_credit.c
@@ -709,7 +709,7 @@ __csched_vcpu_is_migrateable(const struct csched_private *prv, struct vcpu *vc,
      * The caller is supposed to have already checked that vc is also
      * not running.
      */
-    ASSERT(!vc->is_running);
+    ASSERT(!vc->sched_unit->is_running);
 
     return !__csched_vcpu_is_cache_hot(prv, svc) &&
            cpumask_test_cpu(dest_cpu, mask);
@@ -1033,7 +1033,8 @@ csched_unit_insert(const struct scheduler *ops, struct sched_unit *unit)
 
     lock = unit_schedule_lock_irq(unit);
 
-    if ( !__vcpu_on_runq(svc) && vcpu_runnable(vc) && !vc->is_running )
+    if ( !__vcpu_on_runq(svc) && vcpu_runnable(vc) &&
+         !vc->sched_unit->is_running )
         runq_insert(svc);
 
     unit_schedule_unlock_irq(lock, unit);
@@ -1646,8 +1647,9 @@ csched_runq_steal(int peer_cpu, int cpu, int pri, int balance_step)
          * vCPUs with useful soft affinities in some sort of bitmap
          * or counter.
          */
-        if ( vc->is_running || (balance_step == BALANCE_SOFT_AFFINITY &&
-                                !has_soft_affinity(vc->sched_unit)) )
+        if ( vc->sched_unit->is_running ||
+             (balance_step == BALANCE_SOFT_AFFINITY &&
+              !has_soft_affinity(vc->sched_unit)) )
             continue;
 
         affinity_balance_cpumask(vc->sched_unit, balance_step, cpumask_scratch);
@@ -1855,7 +1857,7 @@ csched_schedule(
                     (unsigned char *)&d);
     }
 
-    runtime = now - current->runstate.state_entry_time;
+    runtime = now - current->sched_unit->state_entry_time;
     if ( runtime < 0 ) /* Does this ever happen? */
         runtime = 0;
 
diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c
index 910440d5d9..a6083289f6 100644
--- a/xen/common/sched_credit2.c
+++ b/xen/common/sched_credit2.c
@@ -1284,7 +1284,7 @@ runq_insert(const struct scheduler *ops, struct csched2_unit *svc)
 
     ASSERT(&svc->rqd->runq == runq);
     ASSERT(!is_idle_vcpu(svc->vcpu));
-    ASSERT(!svc->vcpu->is_running);
+    ASSERT(!svc->vcpu->sched_unit->is_running);
     ASSERT(!(svc->flags & CSFLAG_scheduled));
 
     list_for_each( iter, runq )
@@ -1341,8 +1341,8 @@ static inline bool is_preemptable(const struct csched2_unit *svc,
     if ( ratelimit <= CSCHED2_RATELIMIT_TICKLE_TOLERANCE )
         return true;
 
-    ASSERT(svc->vcpu->is_running);
-    return now - svc->vcpu->runstate.state_entry_time >
+    ASSERT(svc->vcpu->sched_unit->is_running);
+    return now - svc->vcpu->sched_unit->state_entry_time >
            ratelimit - CSCHED2_RATELIMIT_TICKLE_TOLERANCE;
 }
 
@@ -2932,7 +2932,7 @@ csched2_dom_cntl(
                 {
                     svc = csched2_unit(v->sched_unit);
                     lock = unit_schedule_lock(svc->vcpu->sched_unit);
-                    if ( v->is_running )
+                    if ( v->sched_unit->is_running )
                     {
                         unsigned int cpu = v->processor;
                         struct csched2_runqueue_data *rqd = c2rqd(ops, cpu);
@@ -3205,8 +3205,8 @@ csched2_runtime(const struct scheduler *ops, int cpu,
     if ( prv->ratelimit_us )
     {
         s_time_t ratelimit_min = MICROSECS(prv->ratelimit_us);
-        if ( snext->vcpu->is_running )
-            ratelimit_min = snext->vcpu->runstate.state_entry_time +
+        if ( snext->vcpu->sched_unit->is_running )
+            ratelimit_min = snext->vcpu->sched_unit->state_entry_time +
                             MICROSECS(prv->ratelimit_us) - now;
         if ( ratelimit_min > min_time )
             min_time = ratelimit_min;
@@ -3303,7 +3303,7 @@ runq_candidate(struct csched2_runqueue_data *rqd,
      * no point forcing it to do so until rate limiting expires.
      */
     if ( !yield && prv->ratelimit_us && vcpu_runnable(scurr->vcpu) &&
-         (now - scurr->vcpu->runstate.state_entry_time) <
+         (now - scurr->vcpu->sched_unit->state_entry_time) <
           MICROSECS(prv->ratelimit_us) )
     {
         if ( unlikely(tb_init_done) )
@@ -3314,7 +3314,7 @@ runq_candidate(struct csched2_runqueue_data *rqd,
             } d;
             d.dom = scurr->vcpu->domain->domain_id;
             d.vcpu = scurr->vcpu->vcpu_id;
-            d.runtime = now - scurr->vcpu->runstate.state_entry_time;
+            d.runtime = now - scurr->vcpu->sched_unit->state_entry_time;
             __trace_var(TRC_CSCHED2_RATELIMIT, 1,
                         sizeof(d),
                         (unsigned char *)&d);
@@ -3562,7 +3562,7 @@ csched2_schedule(
         if ( snext != scurr )
         {
             ASSERT(snext->rqd == rqd);
-            ASSERT(!snext->vcpu->is_running);
+            ASSERT(!snext->vcpu->sched_unit->is_running);
 
             runq_remove(snext);
             __set_bit(__CSFLAG_scheduled, &snext->flags);
diff --git a/xen/common/sched_rt.c b/xen/common/sched_rt.c
index 8b5ae159b2..a47cc598a9 100644
--- a/xen/common/sched_rt.c
+++ b/xen/common/sched_rt.c
@@ -906,7 +906,7 @@ rt_unit_insert(const struct scheduler *ops, struct sched_unit *unit)
     {
         replq_insert(ops, svc);
 
-        if ( !vc->is_running )
+        if ( !unit->is_running )
             runq_insert(ops, svc);
     }
     unit_schedule_unlock_irq(lock, unit);
diff --git a/xen/common/schedule.c b/xen/common/schedule.c
index 92a74b731b..05bc42d7e9 100644
--- a/xen/common/schedule.c
+++ b/xen/common/schedule.c
@@ -411,6 +411,8 @@ int sched_init_vcpu(struct vcpu *v, unsigned int processor)
     {
         get_sched_res(v->processor)->curr = unit;
         v->is_running = 1;
+        unit->is_running = 1;
+        unit->state_entry_time = NOW();
     }
     else
     {
@@ -731,7 +733,8 @@ static void vcpu_migrate_finish(struct vcpu *v)
      * context_saved(); and in any case, if the bit is cleared, then
      * someone else has already done the work so we don't need to.
      */
-    if ( v->is_running || !test_bit(_VPF_migrating, &v->pause_flags) )
+    if ( v->sched_unit->is_running ||
+         !test_bit(_VPF_migrating, &v->pause_flags) )
         return;
 
     old_cpu = new_cpu = v->processor;
@@ -785,7 +788,7 @@ static void vcpu_migrate_finish(struct vcpu *v)
      * because they both happen in (different) spinlock regions, and those
      * regions are strictly serialised.
      */
-    if ( v->is_running ||
+    if ( v->sched_unit->is_running ||
          !test_and_clear_bit(_VPF_migrating, &v->pause_flags) )
     {
         sched_spin_unlock_double(old_lock, new_lock, flags);
@@ -1673,8 +1676,10 @@ static void schedule(void)
      * switch, else lost_records resume will not work properly.
      */
 
-    ASSERT(!next->is_running);
+    ASSERT(!next->sched_unit->is_running);
     next->is_running = 1;
+    next->sched_unit->is_running = 1;
+    next->sched_unit->state_entry_time = now;
 
     pcpu_schedule_unlock_irq(lock, cpu);
 
@@ -1696,6 +1701,8 @@ void context_saved(struct vcpu *prev)
     smp_wmb();
 
     prev->is_running = 0;
+    prev->sched_unit->is_running = 0;
+    prev->sched_unit->state_entry_time = NOW();
 
     /* Check for migration request /after/ clearing running flag. */
     smp_mb();
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 949bb6b696..d4698b3f0d 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -270,8 +270,14 @@ struct sched_unit {
     struct sched_resource *res;
     unsigned int           unit_id;
 
+    /* Currently running on a CPU? */
+    bool                   is_running;
     /* Does soft affinity actually play a role (given hard affinity)? */
     bool                   soft_aff_effective;
+
+    /* Last time unit got (de-)scheduled. */
+    uint64_t               state_entry_time;
+
     /* Bitmask of CPUs on which this VCPU may run. */
     cpumask_var_t          cpu_hard_affinity;
     /* Used to save affinity during temporary pinning. */
-- 
2.16.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  parent reply	other threads:[~2019-09-14  8:53 UTC|newest]

Thread overview: 161+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-14  8:52 [Xen-devel] [PATCH v3 00/47] xen: add core scheduling support Juergen Gross
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 01/47] xen/sched: use new sched_unit instead of vcpu in scheduler interfaces Juergen Gross
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 02/47] xen/sched: move per-vcpu scheduler private data pointer to sched_unit Juergen Gross
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 03/47] xen/sched: build a linked list of struct sched_unit Juergen Gross
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 04/47] xen/sched: introduce struct sched_resource Juergen Gross
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 05/47] xen/sched: let pick_cpu return a scheduler resource Juergen Gross
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 06/47] xen/sched: switch schedule_data.curr to point at sched_unit Juergen Gross
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 07/47] xen/sched: move per cpu scheduler private data into struct sched_resource Juergen Gross
2019-09-19 15:27   ` Jan Beulich
2019-09-24 11:41     ` Jürgen Groß
2019-09-24 12:08       ` Jan Beulich
2019-09-24 15:10         ` Jürgen Groß
2019-09-24 17:07           ` Dario Faggioli
2019-09-25  6:49         ` Jürgen Groß
2019-09-24 17:11       ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 08/47] xen/sched: switch vcpu_schedule_lock to unit_schedule_lock Juergen Gross
2019-09-24 17:18   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 09/47] xen/sched: move some per-vcpu items to struct sched_unit Juergen Gross
2019-09-19 15:38   ` Jan Beulich
2019-09-24 11:44     ` Jürgen Groß
2019-09-24 17:23   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 10/47] xen/sched: add scheduler helpers hiding vcpu Juergen Gross
2019-09-19 15:45   ` Jan Beulich
2019-09-24 11:46     ` Jürgen Groß
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 11/47] xen/sched: rename scheduler related perf counters Juergen Gross
2019-09-24 17:25   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 12/47] xen/sched: switch struct task_slice from vcpu to sched_unit Juergen Gross
2019-09-25 15:23   ` Dario Faggioli
2019-09-14  8:52 ` Juergen Gross [this message]
2019-09-19 15:53   ` [Xen-devel] [PATCH v3 13/47] xen/sched: add is_running indicator to struct sched_unit Jan Beulich
2019-09-24 11:47     ` Jürgen Groß
2019-09-24 12:00       ` Jan Beulich
2019-09-24 12:34         ` Jürgen Groß
2019-09-25 15:27   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 14/47] xen/sched: make null scheduler vcpu agnostic Juergen Gross
2019-09-25 12:51   ` Dario Faggioli
2019-09-25 12:59     ` Jürgen Groß
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 15/47] xen/sched: make rt " Juergen Gross
2019-09-25 13:20   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 16/47] xen/sched: make credit " Juergen Gross
2019-09-25 14:21   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 17/47] xen/sched: make credit2 " Juergen Gross
2019-09-25 15:02   ` Dario Faggioli
2019-09-25 15:18     ` Jürgen Groß
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 18/47] xen/sched: make arinc653 " Juergen Gross
2019-09-25 13:51   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 19/47] xen: add sched_unit_pause_nosync() and sched_unit_unpause() Juergen Gross
2019-09-25 15:20   ` Dario Faggioli
2019-09-26  4:49     ` Jürgen Groß
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 20/47] xen: let vcpu_create() select processor Juergen Gross
2019-09-25 16:31   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 21/47] xen/sched: use sched_resource cpu instead smp_processor_id in schedulers Juergen Gross
2019-09-26 10:01   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 22/47] xen/sched: switch schedule() from vcpus to sched_units Juergen Gross
2019-09-25 16:34   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 23/47] xen/sched: switch sched_move_irqs() to take sched_unit as parameter Juergen Gross
2019-09-20 14:34   ` Jan Beulich
2019-09-24 11:55     ` Jürgen Groß
2019-09-24 20:43   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 24/47] xen: switch from for_each_vcpu() to for_each_sched_unit() Juergen Gross
2019-09-20 15:05   ` Jan Beulich
2019-09-24 12:13     ` Jürgen Groß
2019-09-24 12:31       ` Jan Beulich
2019-09-24 15:00         ` Jürgen Groß
2019-09-24 15:04           ` Jan Beulich
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 25/47] xen/sched: add runstate counters to struct sched_unit Juergen Gross
2019-09-20 15:27   ` Jan Beulich
2019-09-24 13:50     ` Jürgen Groß
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 26/47] xen/sched: Change vcpu_migrate_*() to operate on schedule unit Juergen Gross
2019-09-24 22:33   ` Dario Faggioli
2019-09-25 12:04     ` Jürgen Groß
2019-09-25 16:37       ` Dario Faggioli
2019-09-26  4:51         ` Jürgen Groß
2019-09-26 13:29           ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 27/47] xen/sched: move struct task_slice into struct sched_unit Juergen Gross
2019-09-26 10:30   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 28/47] xen/sched: add code to sync scheduling of all vcpus of a sched unit Juergen Gross
2019-09-20 16:08   ` Jan Beulich
2019-09-24 14:14     ` Jürgen Groß
2019-09-24 14:39       ` Jan Beulich
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 29/47] xen/sched: introduce unit_runnable_state() Juergen Gross
2019-09-23 15:24   ` Jan Beulich
2019-09-24 14:25     ` Jürgen Groß
2019-09-24 14:45       ` Jan Beulich
2019-09-24 14:48         ` Jürgen Groß
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 30/47] xen/sched: add support for multiple vcpus per sched unit where missing Juergen Gross
2019-09-23 15:41   ` Jan Beulich
2019-09-24 14:41     ` Jürgen Groß
2019-09-24 15:00       ` Jan Beulich
2019-09-24 15:09         ` Jürgen Groß
2019-09-24 15:22           ` Jan Beulich
2019-09-25 12:40             ` Jürgen Groß
2019-09-25 13:07               ` Jan Beulich
2019-09-26 13:53                 ` Dario Faggioli
2019-09-26 14:24                   ` Jan Beulich
2019-09-26 14:40                   ` Jürgen Groß
2019-09-26 16:41                     ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 31/47] xen/sched: modify cpupool_domain_cpumask() to be an unit mask Juergen Gross
2019-09-23 15:44   ` Jan Beulich
2019-09-24 14:45     ` Jürgen Groß
2019-09-23 15:50   ` Jan Beulich
2019-09-24 14:46     ` Jürgen Groß
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 32/47] xen/sched: support allocating multiple vcpus into one sched unit Juergen Gross
2019-09-24  9:46   ` Jan Beulich
2019-09-24 10:06     ` Jürgen Groß
2019-09-24 10:13       ` Jan Beulich
2019-09-24 15:13         ` Jürgen Groß
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 33/47] xen/sched: add a percpu resource index Juergen Gross
2019-09-24 10:05   ` Jan Beulich
2019-09-24 15:20     ` Jürgen Groß
2019-09-24 15:29       ` Jan Beulich
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 34/47] xen/sched: add fall back to idle vcpu when scheduling unit Juergen Gross
2019-09-24 10:53   ` Jan Beulich
2019-09-25 12:58     ` Jürgen Groß
2019-09-25 13:11       ` Jan Beulich
2019-09-25 13:15         ` Jürgen Groß
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 35/47] xen/sched: make vcpu_wake() and vcpu_sleep() core scheduling aware Juergen Gross
2019-09-24 11:55   ` Jan Beulich
2019-09-25 13:07     ` Jürgen Groß
2019-09-27  4:42       ` Jürgen Groß
2019-09-27  7:32         ` Dario Faggioli
2019-09-27  7:48           ` Jürgen Groß
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 36/47] xen/sched: carve out freeing sched_unit memory into dedicated function Juergen Gross
2019-09-24 12:04   ` Jan Beulich
2019-09-25 13:09     ` Jürgen Groß
2019-09-25 13:16       ` Jan Beulich
2019-09-25 17:31         ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 37/47] xen/sched: move per-cpu variable scheduler to struct sched_resource Juergen Gross
2019-09-24 12:16   ` Jan Beulich
2019-09-25 13:13     ` Jürgen Groß
2019-09-26  9:06       ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 38/47] xen/sched: move per-cpu variable cpupool " Juergen Gross
2019-09-24 13:10   ` Jan Beulich
2019-09-25 13:17     ` Jürgen Groß
2019-09-26  9:09   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 39/47] xen/sched: reject switching smt on/off with core scheduling active Juergen Gross
2019-09-26  9:10   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 40/47] xen/sched: prepare per-cpupool scheduling granularity Juergen Gross
2019-09-24 13:34   ` Jan Beulich
2019-09-25 13:31     ` Jürgen Groß
2019-09-26  9:41     ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 41/47] xen/sched: split schedule_cpu_switch() Juergen Gross
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 42/47] xen/sched: protect scheduling resource via rcu Juergen Gross
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 43/47] xen/sched: support multiple cpus per scheduling resource Juergen Gross
2019-09-24 13:49   ` Jan Beulich
2019-09-25 13:39     ` Jürgen Groß
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 44/47] xen/sched: support differing granularity in schedule_cpu_[add/rm]() Juergen Gross
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 45/47] xen/sched: support core scheduling for moving cpus to/from cpupools Juergen Gross
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 46/47] xen/sched: disable scheduling when entering ACPI deep sleep states Juergen Gross
2019-09-25 16:02   ` Jan Beulich
2019-09-26  9:41   ` Dario Faggioli
2019-09-14  8:52 ` [Xen-devel] [PATCH v3 47/47] xen/sched: add scheduling granularity enum Juergen Gross
2019-09-26  9:46   ` Dario Faggioli
2019-09-26 12:37     ` Jürgen Groß
2019-09-26 16:21       ` Dario Faggioli
2019-09-20 16:14 ` [Xen-devel] [PATCH v3 00/47] xen: add core scheduling support Jan Beulich
2019-09-24 10:36   ` Dario Faggioli
2019-09-24 11:15 ` Sergey Dyasli
2019-09-24 11:17   ` Jürgen Groß
2019-09-24 17:29   ` Dario Faggioli
2019-09-24 17:42     ` Igor Druzhinin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190914085251.18816-14-jgross@suse.com \
    --to=jgross@suse.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=dfaggioli@suse.com \
    --cc=george.dunlap@eu.citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien.grall@arm.com \
    --cc=konrad.wilk@oracle.com \
    --cc=mengxu@cis.upenn.edu \
    --cc=sstabellini@kernel.org \
    --cc=tim@xen.org \
    --cc=wl@xen.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.