From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?euc-kr?B?sejA57nO?= Subject: A suggestion about processing irq Date: Mon, 19 Aug 2013 02:29:53 +0000 (GMT) Message-ID: <21544000.538851376879393907.JavaMail.weblogic@epml08> Reply-To: jmkim.kim@samsung.com Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: MIME-version: 1.0 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@lists.xen.org List-Id: xen-devel@lists.xenproject.org Hello, While I was reading gic handling part of xen arm, I noticed that, in gic_set_guest_irq function, if lr_pending is not empty, the arrival irq is also stored into pending list. I think although lr_pending is not empty, there maybe empty slots in lr, and if so, we can insert IRQ immediately. Since I'd like to keep the IRQ in priority order, how about checking the highest priority in lr_pending list rather than emptiness? Here goes the simple patch: Signed-off-by: Jaemin Kim --- diff -urN xen/arch/arm/gic.c xen2/arch/arm/gic.c --- xen/arch/arm/gic.c 2013-07-30 10:16:45.076382483 +0900 +++ xen2/arch/arm/gic.c 2013-07-31 11:19:28.094799335 +0900 @@ -587,12 +587,17 @@ unsigned int state, unsigned int priority) { int i; - struct pending_irq *iter, *n; + struct pending_irq *iter, *n, *first_item; unsigned long flags; spin_lock_irqsave(&gic.lock, flags); + + first_item = list_entry( (&v->arch.vgic.lr_pending)->next, + typeof(*iter), lr_queue ); - if (( v == current ) && (list_empty(&v->arch.vgic.lr_pending) )) + if ( ( v == current ) && + ( list_empty(&v->arch.vgic.lr_pending) || + ( priority > first_item->priority ) ) ) { i = find_first_zero_bit(&this_cpu(lr_mask), nr_lrs); if (i < nr_lrs) { --- Thanks. Best Regards. Jaemin Kim