Thread (20 messages) 20 messages, 4 authors, 2012-10-04

Re: [PATCH v3 -tip 1/5] x86, MSI: Support multiple MSIs in presense of IRQ remapping

From: Ingo Molnar <mingo@kernel.org>
Date: 2012-10-02 11:25:32
Also in: linux-pci, lkml

* Alexander Gordeev [off-list ref] wrote:
On Tue, Oct 02, 2012 at 06:55:18AM +0200, Ingo Molnar wrote:

Thanks for the review, Ingo.
quoted
quoted
@@ -584,8 +586,12 @@ int __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node,
 #define irq_alloc_desc_from(from, node)		\
 	irq_alloc_descs(-1, from, 1, node)
 
+#define irq_alloc_descs_from(from, cnt, node)	\
+	irq_alloc_descs(-1, from, cnt, node)
+
Please use inlines instead of macros. Might transform the one 
above it as well in the process.
You mean here do not introduce irq_alloc_descs_from, but rather use
irq_alloc_descs() directly?
My suggestion is to add irq_alloc_descs_from() as a (very 
simple) inline function and change irq_alloc_desc_from() to be 
an inline function as well.
quoted
quoted
+int irq_can_alloc_irqs(unsigned int from, unsigned int cnt)
+{
+	unsigned int start;
+	int ret = 0;
+
+	if (!cnt)
+		return -EINVAL;
+
+	mutex_lock(&sparse_irq_lock);
+	start = bitmap_find_next_zero_area(allocated_irqs, IRQ_BITMAP_BITS,
+					   from, cnt, 0);
+	mutex_unlock(&sparse_irq_lock);
+	if (start + cnt > nr_irqs)
+		ret = irq_can_expand_nr_irqs(start + cnt);
+	return ret;
How is this supposed to work wrt. races?
It is not supposed. Just a quick check if there are enough bits before an
attempt to allocate memory in __create_irqs(). Otherwise __create_irqs()
might allocate irq_cfg's, then realize there are no bits, then deallocate
and fail.

But strictly speaking, irq_can_alloc_irqs() is unnecessary.
Why complicate it if it's unnecessary? The function is inviting 
wrong logic: it *cannot* tell whether there are enough bits, 
because the check is racy.

So I'd suggest to keep this out - this will further simplify the 
patches.

Thanks,

	Ingo
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help