public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Andrew Morton <akpm@osdl.org>,
	linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org,
	linux-pci@atrey.karlin.mff.cuni.cz, discuss@x86-64.org,
	Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
	Andi Kleen <ak@suse.de>,
	Natalie Protasevich <Natalie.Protasevich@UNISYS.com>,
	Len Brown <len.brown@intel.com>,
	Kimball Murray <kimball.murray@gmail.com>,
	Brice Goglin <brice@myri.com>,
	Greg Lindahl <greg.lindahl@qlogic.com>,
	Dave Olson <olson@unixfolk.com>, Jeff Garzik <jeff@garzik.org>,
	Greg KH <gregkh@suse.de>, Grant Grundler <iod00d@hp.com>,
	"bibo,mao" <bibo.mao@intel.com>,
	Rajesh Shah <rajesh.shah@intel.com>, Mark Maule <maule@sgi.com>,
	Jesper Juhl <jesper.juhl@gmail.com>,
	Shaohua Li <shaohua.li@intel.com>,
	Matthew Wilcox <matthew@wil.cx>,
	"Michael S. Tsirkin" <mst@mellanox.co.il>,
	Ashok Raj <ashok.raj@intel.com>,
	Randy Dunlap <rdunlap@xenotime.net>
Subject: Re: [PATCH 9/25] irq: Add a dynamic irq creation API
Date: Wed, 21 Jun 2006 09:56:04 +1000	[thread overview]
Message-ID: <1150847764.1901.64.camel@localhost.localdomain> (raw)
In-Reply-To: <115084252131-git-send-email-ebiederm@xmission.com>

On Tue, 2006-06-20 at 16:28 -0600, Eric W. Biederman wrote:
> With the msi support comes a new concept in irq handling,
> irqs that are created dynamically at run time.
> 
> Currently the msi code allocates irqs backwards.  First it
> allocates a platform dependent routing value for an
> interrupt the ``vector'' and then it figures out from the
> vector which irq you are on.

You may want to look at the work I'm currently doing for powerpc where
we need a fully dynamic linux irq number allocation, completely separate
spaces for hw numbers (vectors) and linux irq numbers for arbitrary PICs
(and more than one in a given system) etc...

I'll post a patch that shows the stuff I'm adding later today so you can
have a look. There is some overlap with your dynamic irq stuff.

I haven't completely ported all of powerpc to my new core yet which is
why I haven't posted patches yet, but I'll have something out today.

Ben.
 
> This msi backwards allocator suffers from two basic
> problems.  The allocator suffers because it is trying
> to do something that is architecture specific in a generic
> way making it brittle, inflexible, and tied to tightly
> to the architecture implementation.  The alloctor also
> suffers from it's very backwards nature as it has tied
> things together that should have no dependencies.
> 
> To solve the basic dynamic irq allocation problem two
> new architecture specific functions are added:
> create_irq and destroy_irq.
> 
> create_irq takes no input and returns an unused irq number,
> that won't be reused until it is returned to the free
> poll with destroy_irq.  The irq then can be used for
> any purpose although the only initial consumer is
> the msi code.
> 
> destroy_irq takes an irq number allocated with create_irq
> and returns it to the free pool.
> 
> Making this functionality per architecture increases
> the simplicity of the irq allocation code and increases
> it's flexibility.
> 
> dynamic_irq_init() and dynamic_irq_cleanup() are added
> to automate the irq_desc initializtion that should happen
> for dynamic irqs.
> 
> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
> ---
>  include/linux/irq.h |    9 +++++++-
>  kernel/irq/chip.c   |   56 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 64 insertions(+), 1 deletions(-)
> 
> diff --git a/include/linux/irq.h b/include/linux/irq.h
> index b79d178..6d1ad88 100644
> --- a/include/linux/irq.h
> +++ b/include/linux/irq.h
> @@ -392,8 +392,15 @@ set_irq_chained_handler(unsigned int irq
>  	__set_irq_handler(irq, handle, 1);
>  }
>  
> -/* Set/get chip/data for an IRQ: */
> +/* Handle dynamic irq creation and destruction */
> +extern int create_irq(void);
> +extern void destroy_irq(unsigned int irq);
> +
> +/* Dynamic irq helper functions */
> +extern void dynamic_irq_init(unsigned int irq);
> +extern void dynamic_irq_cleanup(unsigned int irq);
>  
> +/* Set/get chip/data for an IRQ: */
>  extern int set_irq_chip(unsigned int irq, struct irq_chip *chip);
>  extern int set_irq_data(unsigned int irq, void *data);
>  extern int set_irq_chip_data(unsigned int irq, void *data);
> diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
> index 431e9d5..9c01e48 100644
> --- a/kernel/irq/chip.c
> +++ b/kernel/irq/chip.c
> @@ -18,6 +18,62 @@ #include <linux/kernel_stat.h>
>  #include "internals.h"
>  
>  /**
> + *	dynamic_irq_init - initialize a dynamically allocated irq
> + *	@irq:	irq number to initialize
> + */
> +void dynamic_irq_init(unsigned int irq)
> +{
> +	struct irq_desc *desc;
> +	unsigned long flags;
> +
> +	if (irq >= NR_IRQS) {
> +		printk(KERN_ERR "Trying to initialize invalid IRQ%d\n", irq);
> +		WARN_ON(1);
> +		return;
> +	}
> +
> +	/* Ensure we don't have left over values from a previous use of this irq */
> +	desc = irq_desc + irq;
> +	spin_lock_irqsave(&desc->lock, flags);
> +	desc->status = IRQ_DISABLED;
> +	desc->chip = &no_irq_chip;
> +	desc->handle_irq = handle_bad_irq;
> +	desc->depth = 1;
> +	desc->handler_data = NULL;
> +	desc->chip_data = NULL;
> +	desc->action = NULL;
> +	desc->irq_count = 0;
> +	desc->irqs_unhandled = 0;
> +#ifdef CONFIG_SMP
> +	desc->affinity = CPU_MASK_ALL;
> +#endif
> +	spin_unlock_irqrestore(&desc->lock, flags);
> +}
> +
> +/**
> + *	dynamic_irq_cleanup - cleanup a dynamically allocated irq
> + *	@irq:	irq number to initialize
> + */
> +void dynamic_irq_cleanup(unsigned int irq)
> +{
> +	struct irq_desc *desc;
> +	unsigned long flags;
> +
> +	if (irq >= NR_IRQS) {
> +		printk(KERN_ERR "Trying to cleanup invalid IRQ%d\n", irq);
> +		WARN_ON(1);
> +		return;
> +	}
> +	
> +	desc = irq_desc + irq;
> +	spin_lock_irqsave(&desc->lock, flags);
> +	desc->handle_irq = handle_bad_irq;
> +	desc->chip = &no_irq_chip;
> +	spin_unlock_irqrestore(&desc->lock, flags);
> +}
> +
> +
> +/**
>   *	set_irq_chip - set the irq chip for an irq
>   *	@irq:	irq number
>   *	@chip:	pointer to irq chip description structure
> -- 
> 1.4.0.gc07e
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/


  parent reply	other threads:[~2006-06-20 23:57 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-20 22:24 [PATCH 0/25] Decouple IRQ issues (MSI, i386, x86_64, ia64) Eric W. Biederman
2006-06-20 22:28 ` [PATCH 1/25] irq: Convert the move_irq flag from a 32bit word to a single bit Eric W. Biederman
2006-06-20 22:28   ` [PATCH 2/25] irq: Add moved_masked_irq Eric W. Biederman
2006-06-20 22:28     ` [PATCH 3/25] x86_64 irq: Reenable migrating irqs to other cpus Eric W. Biederman
2006-06-20 22:28       ` [PATCH 4/25] msi: Simplify msi enable and disable Eric W. Biederman
2006-06-20 22:28         ` [PATCH 5/25] msi: Make the msi boolean tests return either 0 or 1 Eric W. Biederman
2006-06-20 22:28           ` [PATCH 6/25] msi: Implement helper functions read_msi_msg and write_msi_msg Eric W. Biederman
2006-06-20 22:28             ` [PATCH 7/25] msi: Refactor the msi_ops Eric W. Biederman
2006-06-20 22:28               ` [PATCH 8/25] msi: Simplify the msi irq limit policy Eric W. Biederman
2006-06-20 22:28                 ` [PATCH 9/25] irq: Add a dynamic irq creation API Eric W. Biederman
2006-06-20 22:28                   ` [PATCH 10/25] ia64 irq: Dynamic irq support Eric W. Biederman
2006-06-20 22:28                     ` [PATCH 11/25] i386 " Eric W. Biederman
2006-06-20 22:28                       ` [PATCH 12/25] x86_64 " Eric W. Biederman
2006-06-20 22:28                         ` [PATCH 13/25] msi: Make the msi code irq based and not vector based Eric W. Biederman
2006-06-20 22:28                           ` [PATCH 14/25] x86_64 irq: Move msi message composition into io_apic.c Eric W. Biederman
2006-06-20 22:28                             ` [PATCH 15/25] i386 " Eric W. Biederman
2006-06-20 22:28                               ` [PATCH 16/25] msi: Only build msi-apic.c on ia64 Eric W. Biederman
2006-06-20 22:28                                 ` [PATCH 17/25] x86_64 irq: Remove the msi assumption that irq == vector Eric W. Biederman
2006-06-20 22:28                                   ` [PATCH 18/25] i386 " Eric W. Biederman
2006-06-20 22:28                                     ` [PATCH 19/25] irq: Remove msi hacks Eric W. Biederman
2006-06-20 22:28                                       ` [PATCH 20/25] irq: Generalize the check for HARDIRQ_BITS Eric W. Biederman
2006-06-20 22:28                                         ` [PATCH 21/25] x86_64 irq: Make the external irq handlers report their vector, not the irq number Eric W. Biederman
2006-06-20 22:28                                           ` [PATCH 22/25] x86_64 irq: make vector_irq per cpu Eric W. Biederman
2006-06-20 22:28                                             ` [PATCH 23/25] x86_64 irq: Kill gsi_irq_sharing Eric W. Biederman
2006-06-20 22:28                                               ` [PATCH 24/25] x86_64 irq: Kill irq compression Eric W. Biederman
2006-06-20 22:28                                                 ` [PATCH 25/25] irq: Document what an IRQ is Eric W. Biederman
2006-06-21  1:50                       ` [PATCH 11/25] i386 irq: Dynamic irq support Rajesh Shah
2006-06-21  2:21                         ` Eric W. Biederman
2006-06-21  2:27                           ` Rajesh Shah
2006-06-21 14:07                             ` Eric W. Biederman
2006-06-20 23:56                   ` Benjamin Herrenschmidt [this message]
2006-06-21  1:01                     ` [PATCH 9/25] irq: Add a dynamic irq creation API Eric W. Biederman
2006-06-21  1:33                       ` Benjamin Herrenschmidt
2006-06-21  1:41                         ` Jeff Garzik
2006-06-21  1:36                       ` Matthew Wilcox
2006-06-21  1:28                 ` [PATCH 8/25] msi: Simplify the msi irq limit policy Rajesh Shah
2006-06-21  2:46                 ` Roland Dreier
2006-06-21  3:48                   ` Eric W. Biederman
2006-06-21  1:18               ` [PATCH 7/25] msi: Refactor the msi_ops Rajesh Shah
2006-06-21  1:04             ` [PATCH 6/25] msi: Implement helper functions read_msi_msg and write_msi_msg Rajesh Shah
2006-06-21  1:43               ` Eric W. Biederman
2006-06-20 22:45           ` [PATCH 5/25] msi: Make the msi boolean tests return either 0 or 1 Jeff Garzik
2006-06-21  0:44         ` [PATCH 4/25] msi: Simplify msi enable and disable Rajesh Shah
2006-06-21  1:19           ` Eric W. Biederman
2006-06-21  0:30 ` [PATCH 0/25] Decouple IRQ issues (MSI, i386, x86_64, ia64) Rajesh Shah
2006-06-21  1:07   ` Eric W. Biederman
2006-06-21 14:10   ` [PATCH] Decouple IRQ issues (fix i386 compile issues) Eric W. Biederman
2006-06-21 10:24 ` [PATCH 0/25] Decouple IRQ issues (MSI, i386, x86_64, ia64) Ingo Molnar
2006-06-21 16:25   ` Greg KH
2006-06-22  3:55     ` Eric W. Biederman

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=1150847764.1901.64.camel@localhost.localdomain \
    --to=benh@kernel.crashing.org \
    --cc=Natalie.Protasevich@UNISYS.com \
    --cc=ak@suse.de \
    --cc=akpm@osdl.org \
    --cc=ashok.raj@intel.com \
    --cc=bibo.mao@intel.com \
    --cc=brice@myri.com \
    --cc=discuss@x86-64.org \
    --cc=ebiederm@xmission.com \
    --cc=greg.lindahl@qlogic.com \
    --cc=gregkh@suse.de \
    --cc=iod00d@hp.com \
    --cc=jeff@garzik.org \
    --cc=jesper.juhl@gmail.com \
    --cc=kimball.murray@gmail.com \
    --cc=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@atrey.karlin.mff.cuni.cz \
    --cc=matthew@wil.cx \
    --cc=maule@sgi.com \
    --cc=mingo@elte.hu \
    --cc=mst@mellanox.co.il \
    --cc=olson@unixfolk.com \
    --cc=rajesh.shah@intel.com \
    --cc=rdunlap@xenotime.net \
    --cc=shaohua.li@intel.com \
    --cc=tglx@linutronix.de \
    /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