Hi Andre,
On 06/02/2017 19:16, Julien Grall wrote:
On 30/01/17 18:31, Andre Przywara wrote:
+/* Wait for an ITS to become quiescient (all ITS operations
completed). */
s/quiescient/quiescent/
+static int gicv3_its_wait_quiescient(struct host_its *hw_its)
s/quiescient/quiescent/
+{
+ uint32_t reg;
+ s_time_t deadline = NOW() + MILLISECS(1000);
So that sounds fine for handling a couple of command, but what about
thousands at the same time?
Please ignore this question. I just noticed that I commented on the
wrong function. Sorry for that.
+
+ reg = readl_relaxed(hw_its->its_base + GITS_CTLR);
+ if ( (reg & (GITS_CTLR_QUIESCENT | GITS_CTLR_ENABLE)) ==
GITS_CTLR_QUIESCENT )
+ return 0;
+
+ writel_relaxed(reg & ~GITS_CTLR_ENABLE, hw_its->its_base +
GITS_CTLR);
+
+ do {
+ reg = readl_relaxed(hw_its->its_base + GITS_CTLR);
+ if ( reg & GITS_CTLR_QUIESCENT )
+ return 0;
+
+ cpu_relax();
+ udelay(1);
+ } while ( NOW() <= deadline );
+
+ dprintk(XENLOG_ERR, "ITS not quiescient\n");
s/quiescient/quiescent/ + newline.
+ return -ETIMEDOUT;
+}
+
Cheers,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel