From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dario Faggioli Subject: [PATCH v2 1/5] xen: sched_rt: avoid ASSERT()ing on runq dump if there are no domains Date: Tue, 17 Mar 2015 16:32:52 +0100 Message-ID: <20150317153251.9867.5967.stgit@Solace.station> References: <20150317152615.9867.48676.stgit@Solace.station> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20150317152615.9867.48676.stgit@Solace.station> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Xen-devel Cc: George Dunlap , Keir Fraser , Meng Xu , Meng Xu , Jan Beulich List-Id: xen-devel@lists.xenproject.org being serviced by the RTDS scheduler, as that is a legit situation to be in: think, for instance, of a newly created RTDS cpupool, with no domains migrated to it yet. While there: - move the spinlock acquisition up, to effectively protect the domain list and avoid races; - the mask of online pCPUs was being retrieved but then not used anywhere in the function: get rid of that. Signed-off-by: Dario Faggioli Cc: George Dunlap Cc: Meng Xu Cc: Jan Beulich Cc: Keir Fraser Reviewed-by: Meng Xu Acked-by: George Dunlap --- Changes from v1: * updated the changelog as requested during review; * fixed coding style, as requested during review; * fixed label indentation, as requested during review. --- xen/common/sched_rt.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xen/common/sched_rt.c b/xen/common/sched_rt.c index ffc5107..2b0b7c6 100644 --- a/xen/common/sched_rt.c +++ b/xen/common/sched_rt.c @@ -264,18 +264,17 @@ rt_dump(const struct scheduler *ops) struct list_head *iter_sdom, *iter_svc, *runq, *depletedq, *iter; struct rt_private *prv = rt_priv(ops); struct rt_vcpu *svc; - cpumask_t *online; struct rt_dom *sdom; unsigned long flags; - ASSERT(!list_empty(&prv->sdom)); + spin_lock_irqsave(&prv->lock, flags); + + if ( list_empty(&prv->sdom) ) + goto out; - sdom = list_entry(prv->sdom.next, struct rt_dom, sdom_elem); - online = cpupool_scheduler_cpumask(sdom->dom->cpupool); runq = rt_runq(ops); depletedq = rt_depletedq(ops); - spin_lock_irqsave(&prv->lock, flags); printk("Global RunQueue info:\n"); list_for_each( iter, runq ) { @@ -303,6 +302,7 @@ rt_dump(const struct scheduler *ops) } } + out: spin_unlock_irqrestore(&prv->lock, flags); }