From: Yinghai Lu <yinghai@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
"H. Peter Anvin" <hpa@zytor.com>, Tony Luck <tony.luck@intel.com>,
Bjorn Helgaas <bhelgaas@google.com>,
"Rafael J. Wysocki" <rjw@sisk.pl>
Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-acpi@vger.kernel.org, Yinghai Lu <yinghai@kernel.org>,
Joerg Roedel <joro@8bytes.org>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
Subject: [PATCH 02/28] genirq: Add irq_alloc_reserved_desc()
Date: Sat, 10 Aug 2013 19:45:12 -0700 [thread overview]
Message-ID: <1376189139-31856-3-git-send-email-yinghai@kernel.org> (raw)
In-Reply-To: <1376189139-31856-1-git-send-email-yinghai@kernel.org>
For ioapic hot-add support, it would be easy if we have continuous
irq numbers for hot added ioapic controller.
We can reserve irq range at first, and later allocate desc for those
pre-reserved irqs when they are needed.
The reasons for not allocating them during reserving:
1. only several pins of one ioapic are used, allocate for all pins, will
waste memory for not used pins.
2. allocate later when is needed could make sure irq_desc is allocated
on local node ram, as dev->node is set at that point.
-v2: update changelog by adding reasons, requested by Konrad.
-v3: according to tglx:
separate core code change with arch code change.
change function name to irq_alloc_reserved_desc.
kill __irq_is_reserved().
remove not need exports.
according to Sebastian:
spare one comments by put two functions together.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
---
include/linux/irq.h | 3 +++
kernel/irq/irqdesc.c | 23 +++++++++++++++++++++++
2 files changed, 26 insertions(+)
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 8c46cb2..b998ea7 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -592,10 +592,13 @@ static inline u32 irq_get_trigger_type(unsigned int irq)
int __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node,
struct module *owner);
+int __irq_alloc_reserved_desc(int at, int node, struct module *owner);
/* use macros to avoid needing export.h for THIS_MODULE */
#define irq_alloc_descs(irq, from, cnt, node) \
__irq_alloc_descs(irq, from, cnt, node, THIS_MODULE)
+#define irq_alloc_reserved_desc_at(at, node) \
+ __irq_alloc_reserved_desc(at, node, THIS_MODULE)
#define irq_alloc_desc(node) \
irq_alloc_descs(-1, 0, 1, node)
diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
index a151db6..1166545 100644
--- a/kernel/irq/irqdesc.c
+++ b/kernel/irq/irqdesc.c
@@ -410,6 +410,29 @@ __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node,
EXPORT_SYMBOL_GPL(__irq_alloc_descs);
/**
+ * __irq_alloc_reserved_desc - allocate irq descriptor for irq that is already reserved
+ * @irq: Allocate for specific irq number if irq >= 0
+ * @node: Preferred node on which the irq descriptor should be allocated
+ * @owner: Owning module (can be NULL)
+ *
+ * Returns the irq number or error code
+ */
+int __ref __irq_alloc_reserved_desc(int irq, int node, struct module *owner)
+{
+ mutex_lock(&sparse_irq_lock);
+ if (!test_bit(irq, allocated_irqs)) {
+ mutex_unlock(&sparse_irq_lock);
+ return -EINVAL;
+ }
+ mutex_unlock(&sparse_irq_lock);
+
+ if (irq_to_desc(irq))
+ return irq;
+
+ return alloc_descs(irq, 1, node, owner);
+}
+
+/**
* irq_reserve_irqs - mark irqs allocated
* @from: mark from irq number
* @cnt: number of irqs to mark
--
1.8.1.4
next prev parent reply other threads:[~2013-08-11 2:45 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-11 2:45 [PATCH 00/28] x86, irq: Support ioapic controller hotplug Yinghai Lu
2013-08-11 2:45 ` [PATCH 01/28] genirq: Split __irq_reserve_irqs from irq_alloc_descs Yinghai Lu
2013-08-11 2:45 ` Yinghai Lu [this message]
2013-08-11 2:45 ` [PATCH 03/28] genirq: Do not free unallocated irq descriptors Yinghai Lu
2013-08-11 2:45 ` [PATCH 04/28] x86, irq: Change irq_remap_modify_chip_defaults() to static Yinghai Lu
2013-08-11 2:45 ` [PATCH 04/28] x86, irqi: " Yinghai Lu
2013-08-11 2:45 ` [PATCH 05/28] x86, irq: Modify irq chip once for irq remapping Yinghai Lu
2013-08-11 2:45 ` [PATCH 06/28] x86, irq: Show MSI-X clearly in debug message Yinghai Lu
2013-08-11 2:45 ` [PATCH 07/28] x86, irq: Show MSI-X in /proc/interrupt Yinghai Lu
2013-08-11 2:45 ` [PATCH 08/28] x86, irq: Make dmar_msi/hpet_msi irq_chip name consistent Yinghai Lu
2013-08-11 2:45 ` [PATCH 09/28] ia64, irq: Add dummy create_irq_nr() Yinghai Lu
2013-08-11 2:45 ` [PATCH 10/28] iommu, irq: Allocate irq_desc for dmar_msi with local node Yinghai Lu
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=1376189139-31856-3-git-send-email-yinghai@kernel.org \
--to=yinghai@kernel.org \
--cc=bhelgaas@google.com \
--cc=hpa@zytor.com \
--cc=joro@8bytes.org \
--cc=konrad.wilk@oracle.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rjw@sisk.pl \
--cc=sebastian@breakpoint.cc \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).