From patchwork Tue Apr 22 12:58:49 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 28789 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ie0-f200.google.com (mail-ie0-f200.google.com [209.85.223.200]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 7A795203AC for ; Tue, 22 Apr 2014 13:04:48 +0000 (UTC) Received: by mail-ie0-f200.google.com with SMTP id lx4sf35132888iec.3 for ; Tue, 22 Apr 2014 06:04:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:cc:subject:precedence:list-id:list-unsubscribe:list-post :list-help:list-subscribe:mime-version:sender:errors-to :x-original-sender:x-original-authentication-results:mailing-list :list-archive:content-type:content-transfer-encoding; bh=Ivx7TjgjWE8ACwjPFSqUHK+TgiQjOAYtd0lRi9noo/M=; b=aB7yZa8n/7Rrbt30oRqVu6Mmh9Po1PWvf3q/9qmUHnInI717lFLqEpE13tmqsxPaUu yUiK14Xv4x0MK8CzeTLlkTER+ZIta0oeSEKa5N80VBsNSu5rFDvjDt7iD1FUqH3Jfu4K mLQqGsINHyRCZMIFnSRI1wOsUE9fOsdTb7OzSVRNxIDiSSjq7/yQ+Ef3FRZP8hEo2sEM xVz4X9pVGUCtrd6k14a1HnBOafv1lmXGQfTz5fC+xZYSc0UcWZArHBVpe89ay8mPtxg0 oOQQA39ZpqFOVXkUhyKwu2dHbbxcKPdprv1lNf+ZJVdwOVHsOI+5mVAIYFu6H0zyzUrb MCig== X-Gm-Message-State: ALoCoQnalCPQaFsyIASka9C+PAsRnnyI7CnSMkeBO5WkUazCdKDjeS0DGEhJSB9n3s8ktdpOKA5f X-Received: by 10.43.161.202 with SMTP id mh10mr16816700icc.23.1398171887944; Tue, 22 Apr 2014 06:04:47 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.95.84 with SMTP id h78ls93953qge.54.gmail; Tue, 22 Apr 2014 06:04:47 -0700 (PDT) X-Received: by 10.220.105.130 with SMTP id t2mr95306vco.18.1398171887754; Tue, 22 Apr 2014 06:04:47 -0700 (PDT) Received: from mail-vc0-f177.google.com (mail-vc0-f177.google.com [209.85.220.177]) by mx.google.com with ESMTPS id or7si6881877vcb.61.2014.04.22.06.04.47 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 22 Apr 2014 06:04:47 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.220.177 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) client-ip=209.85.220.177; Received: by mail-vc0-f177.google.com with SMTP id if17so2483213vcb.8 for ; Tue, 22 Apr 2014 06:04:47 -0700 (PDT) X-Received: by 10.220.109.138 with SMTP id j10mr1245vcp.54.1398171887612; Tue, 22 Apr 2014 06:04:47 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.220.221.72 with SMTP id ib8csp22907vcb; Tue, 22 Apr 2014 06:04:45 -0700 (PDT) X-Received: by 10.42.50.3 with SMTP id y3mr37337183icf.12.1398171884031; Tue, 22 Apr 2014 06:04:44 -0700 (PDT) Received: from lists.xen.org (lists.xen.org. [50.57.142.19]) by mx.google.com with ESMTPS id q7si11972813igh.19.2014.04.22.06.04.43 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Tue, 22 Apr 2014 06:04:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of xen-devel-bounces@lists.xen.org designates 50.57.142.19 as permitted sender) client-ip=50.57.142.19; Received: from localhost ([127.0.0.1] helo=lists.xen.org) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WcaJf-00022E-1E; Tue, 22 Apr 2014 13:00:51 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WcaIG-0001hC-FC for xen-devel@lists.xenproject.org; Tue, 22 Apr 2014 12:59:44 +0000 Received: from [85.158.137.68:56562] by server-9.bemta-3.messagelabs.com id C8/7F-30063-BA766535; Tue, 22 Apr 2014 12:59:23 +0000 X-Env-Sender: julien.grall@linaro.org X-Msg-Ref: server-10.tower-31.messagelabs.com!1398171562!8251666!1 X-Originating-IP: [74.125.83.41] X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, SUBJECT_RANDOMQ X-StarScan-Received: X-StarScan-Version: 6.11.1; banners=-,-,- X-VirusChecked: Checked Received: (qmail 7798 invoked from network); 22 Apr 2014 12:59:22 -0000 Received: from mail-ee0-f41.google.com (HELO mail-ee0-f41.google.com) (74.125.83.41) by server-10.tower-31.messagelabs.com with RC4-SHA encrypted SMTP; 22 Apr 2014 12:59:22 -0000 Received: by mail-ee0-f41.google.com with SMTP id t10so4673273eei.28 for ; Tue, 22 Apr 2014 05:59:22 -0700 (PDT) X-Received: by 10.14.176.1 with SMTP id a1mr55916311eem.52.1398171562320; Tue, 22 Apr 2014 05:59:22 -0700 (PDT) Received: from belegaer.uk.xensource.com ([185.25.64.249]) by mx.google.com with ESMTPSA id x45sm112862825eef.15.2014.04.22.05.59.20 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Apr 2014 05:59:21 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 22 Apr 2014 13:58:49 +0100 Message-Id: <1398171530-27391-18-git-send-email-julien.grall@linaro.org> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1398171530-27391-1-git-send-email-julien.grall@linaro.org> References: <1398171530-27391-1-git-send-email-julien.grall@linaro.org> Cc: Keir Fraser , ian.campbell@citrix.com, Julien Grall , tim@xen.org, stefano.stabellini@citrix.com, Jan Beulich , Suravee Suthikulpanit , Xiantao Zhang Subject: [Xen-devel] [PATCH v4 17/18] xen/arm: IRQ: extend {request, setup}_irq to take an irqflags in parameter X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Post: , List-Help: , List-Subscribe: , MIME-Version: 1.0 Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: julien.grall@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.220.177 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Archive: The irqflags will be used later on ARM to know if we can shared the IRQ or not. On x86, the irqflags should always be 0. Signed-off-by: Julien Grall Acked-by: Jan Beulich Acked-by: Ian Campbell Cc: Keir Fraser Cc: Suravee Suthikulpanit Cc: Xiantao Zhang --- Changes in v4: - request_irq should pass irqflags to setup irq on x86 Changes in v3: - Patch added --- xen/arch/arm/gic.c | 2 +- xen/arch/arm/irq.c | 6 +++--- xen/arch/arm/time.c | 6 +++--- xen/arch/x86/hpet.c | 2 +- xen/arch/x86/i8259.c | 2 +- xen/arch/x86/irq.c | 9 ++++++--- xen/arch/x86/time.c | 2 +- xen/drivers/char/exynos4210-uart.c | 2 +- xen/drivers/char/ns16550.c | 2 +- xen/drivers/char/omap-uart.c | 2 +- xen/drivers/char/pl011.c | 2 +- xen/drivers/passthrough/amd/iommu_init.c | 2 +- xen/drivers/passthrough/vtd/iommu.c | 2 +- xen/include/xen/irq.h | 5 +++-- 14 files changed, 25 insertions(+), 21 deletions(-) diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c index cb40b0a..39f9621 100644 --- a/xen/arch/arm/gic.c +++ b/xen/arch/arm/gic.c @@ -885,7 +885,7 @@ void gic_dump_info(struct vcpu *v) void __cpuinit init_maintenance_interrupt(void) { - request_irq(gic.maintenance_irq, maintenance_interrupt, + request_irq(gic.maintenance_irq, 0, maintenance_interrupt, "irq-maintenance", NULL); } diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c index 45fbadb..1bc960d 100644 --- a/xen/arch/arm/irq.c +++ b/xen/arch/arm/irq.c @@ -117,7 +117,7 @@ static inline struct domain *irq_get_domain(struct irq_desc *desc) return desc->action->dev_id; } -int request_irq(unsigned int irq, +int request_irq(unsigned int irq, unsigned int irqflags, void (*handler)(int, void *, struct cpu_user_regs *), const char *devname, void *dev_id) { @@ -144,7 +144,7 @@ int request_irq(unsigned int irq, action->dev_id = dev_id; action->free_on_release = 1; - retval = setup_irq(irq, action); + retval = setup_irq(irq, irqflags, action); if ( retval ) xfree(action); @@ -252,7 +252,7 @@ static int __setup_irq(struct irq_desc *desc, struct irqaction *new) return 0; } -int setup_irq(unsigned int irq, struct irqaction *new) +int setup_irq(unsigned int irq, unsigned int irqflags, struct irqaction *new) { int rc; unsigned long flags; diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c index 0bff747..81452b5 100644 --- a/xen/arch/arm/time.c +++ b/xen/arch/arm/time.c @@ -237,11 +237,11 @@ void __cpuinit init_timer_interrupt(void) WRITE_SYSREG32(0, CNTHP_CTL_EL2); /* Hypervisor's timer disabled */ isb(); - request_irq(timer_irq[TIMER_HYP_PPI], timer_interrupt, + request_irq(timer_irq[TIMER_HYP_PPI], 0, timer_interrupt, "hyptimer", NULL); - request_irq(timer_irq[TIMER_VIRT_PPI], vtimer_interrupt, + request_irq(timer_irq[TIMER_VIRT_PPI], 0, vtimer_interrupt, "virtimer", NULL); - request_irq(timer_irq[TIMER_PHYS_NONSECURE_PPI], timer_interrupt, + request_irq(timer_irq[TIMER_PHYS_NONSECURE_PPI], 0, timer_interrupt, "phytimer", NULL); } diff --git a/xen/arch/x86/hpet.c b/xen/arch/x86/hpet.c index 3a4f7e8..0b13f52 100644 --- a/xen/arch/x86/hpet.c +++ b/xen/arch/x86/hpet.c @@ -355,7 +355,7 @@ static int __init hpet_setup_msi_irq(struct hpet_event_channel *ch) hpet_write32(cfg, HPET_Tn_CFG(ch->idx)); desc->handler = &hpet_msi_type; - ret = request_irq(ch->msi.irq, hpet_interrupt_handler, "HPET", ch); + ret = request_irq(ch->msi.irq, 0, hpet_interrupt_handler, "HPET", ch); if ( ret >= 0 ) ret = __hpet_setup_msi_irq(desc); if ( ret < 0 ) diff --git a/xen/arch/x86/i8259.c b/xen/arch/x86/i8259.c index 6fdcce8..a0270c9 100644 --- a/xen/arch/x86/i8259.c +++ b/xen/arch/x86/i8259.c @@ -435,6 +435,6 @@ void __init init_IRQ(void) outb_p(LATCH & 0xff, PIT_CH0); /* LSB */ outb(LATCH >> 8, PIT_CH0); /* MSB */ - setup_irq(2, &cascade); + setup_irq(2, 0, &cascade); } diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c index 727472d..dafd338 100644 --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -949,7 +949,7 @@ static int __init irq_ratelimit_init(void) } __initcall(irq_ratelimit_init); -int __init request_irq(unsigned int irq, +int __init request_irq(unsigned int irq, unsigned int irqflags, void (*handler)(int, void *, struct cpu_user_regs *), const char * devname, void *dev_id) { @@ -976,7 +976,7 @@ int __init request_irq(unsigned int irq, action->dev_id = dev_id; action->free_on_release = 1; - retval = setup_irq(irq, action); + retval = setup_irq(irq, irqflags, action); if (retval) xfree(action); @@ -1005,11 +1005,14 @@ void __init release_irq(unsigned int irq, const void *dev_id) xfree(action); } -int __init setup_irq(unsigned int irq, struct irqaction *new) +int __init setup_irq(unsigned int irq, unsigned int irqflags, + struct irqaction *new) { struct irq_desc *desc; unsigned long flags; + ASSERT(irqflags == 0); + desc = irq_to_desc(irq); spin_lock_irqsave(&desc->lock,flags); diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index 93bb5b6..c339f92 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -1473,7 +1473,7 @@ void __init early_time_init(void) printk("Detected %lu.%03lu MHz processor.\n", cpu_khz / 1000, cpu_khz % 1000); - setup_irq(0, &irq0); + setup_irq(0, 0, &irq0); } /* keep pit enabled for pit_broadcast working while cpuidle enabled */ diff --git a/xen/drivers/char/exynos4210-uart.c b/xen/drivers/char/exynos4210-uart.c index 74ee578..76c0d7e 100644 --- a/xen/drivers/char/exynos4210-uart.c +++ b/xen/drivers/char/exynos4210-uart.c @@ -197,7 +197,7 @@ static void __init exynos4210_uart_init_postirq(struct serial_port *port) uart->irqaction.name = "exynos4210_uart"; uart->irqaction.dev_id = port; - if ( (rc = setup_irq(uart->irq, &uart->irqaction)) != 0 ) + if ( (rc = setup_irq(uart->irq, 0, &uart->irqaction)) != 0 ) dprintk(XENLOG_ERR, "Failed to allocated exynos4210_uart IRQ %d\n", uart->irq); diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c index 6691806..161b251 100644 --- a/xen/drivers/char/ns16550.c +++ b/xen/drivers/char/ns16550.c @@ -609,7 +609,7 @@ static void __init ns16550_init_postirq(struct serial_port *port) uart->irqaction.handler = ns16550_interrupt; uart->irqaction.name = "ns16550"; uart->irqaction.dev_id = port; - if ( (rc = setup_irq(uart->irq, &uart->irqaction)) != 0 ) + if ( (rc = setup_irq(uart->irq, 0, &uart->irqaction)) != 0 ) printk("ERROR: Failed to allocate ns16550 IRQ %d\n", uart->irq); } diff --git a/xen/drivers/char/omap-uart.c b/xen/drivers/char/omap-uart.c index e598785..a798b8d 100644 --- a/xen/drivers/char/omap-uart.c +++ b/xen/drivers/char/omap-uart.c @@ -205,7 +205,7 @@ static void __init omap_uart_init_postirq(struct serial_port *port) uart->irqaction.name = "omap_uart"; uart->irqaction.dev_id = port; - if ( setup_irq(uart->irq, &uart->irqaction) != 0 ) + if ( setup_irq(uart->irq, 0, &uart->irqaction) != 0 ) { dprintk(XENLOG_ERR, "Failed to allocated omap_uart IRQ %d\n", uart->irq); diff --git a/xen/drivers/char/pl011.c b/xen/drivers/char/pl011.c index 89bda94..dd19ce8 100644 --- a/xen/drivers/char/pl011.c +++ b/xen/drivers/char/pl011.c @@ -137,7 +137,7 @@ static void __init pl011_init_postirq(struct serial_port *port) uart->irqaction.handler = pl011_interrupt; uart->irqaction.name = "pl011"; uart->irqaction.dev_id = port; - if ( (rc = setup_irq(uart->irq, &uart->irqaction)) != 0 ) + if ( (rc = setup_irq(uart->irq, 0, &uart->irqaction)) != 0 ) printk("ERROR: Failed to allocate pl011 IRQ %d\n", uart->irq); } diff --git a/xen/drivers/passthrough/amd/iommu_init.c b/xen/drivers/passthrough/amd/iommu_init.c index 4686813..6ae44d9 100644 --- a/xen/drivers/passthrough/amd/iommu_init.c +++ b/xen/drivers/passthrough/amd/iommu_init.c @@ -815,7 +815,7 @@ static bool_t __init set_iommu_interrupt_handler(struct amd_iommu *iommu) handler = &iommu_msi_type; ret = __setup_msi_irq(irq_to_desc(irq), &iommu->msi, handler); if ( !ret ) - ret = request_irq(irq, iommu_interrupt_handler, "amd_iommu", iommu); + ret = request_irq(irq, 0, iommu_interrupt_handler, "amd_iommu", iommu); if ( ret ) { destroy_irq(irq); diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c index abaa8c9..c94b0d1 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -1082,7 +1082,7 @@ static int __init iommu_set_interrupt(struct acpi_drhd_unit *drhd) desc = irq_to_desc(irq); desc->handler = &dma_msi_type; - ret = request_irq(irq, iommu_page_fault, "dmar", iommu); + ret = request_irq(irq, 0, iommu_page_fault, "dmar", iommu); if ( ret ) { desc->handler = &no_irq_type; diff --git a/xen/include/xen/irq.h b/xen/include/xen/irq.h index 1f8bdb3..f9a18d8 100644 --- a/xen/include/xen/irq.h +++ b/xen/include/xen/irq.h @@ -89,9 +89,10 @@ int arch_init_one_irq_desc(struct irq_desc *); #define irq_desc_initialized(desc) ((desc)->handler != NULL) -extern int setup_irq(unsigned int irq, struct irqaction *); +extern int setup_irq(unsigned int irq, unsigned int irqflags, + struct irqaction *); extern void release_irq(unsigned int irq, const void *dev_id); -extern int request_irq(unsigned int irq, +extern int request_irq(unsigned int irq, unsigned int irqflags, void (*handler)(int, void *, struct cpu_user_regs *), const char * devname, void *dev_id);