From: Konrad Rzeszutek Wilk <konrad@kernel.org>
To: Joerg Roedel <joerg.roedel@amd.com>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org, joro@8bytes.org,
Suresh Siddha <suresh.b.siddha@intel.com>,
Yinghai Lu <yinghai@kernel.org>
Subject: Re: [PATCH 17/19] x86, msi: Introduce x86_msi.compose_msi_msg call-back
Date: Mon, 20 Aug 2012 10:08:44 -0400 [thread overview]
Message-ID: <20120820140843.GA7732@phenom.dumpdata.com> (raw)
In-Reply-To: <1345470965-24410-18-git-send-email-joerg.roedel@amd.com>
On Mon, Aug 20, 2012 at 03:56:03PM +0200, Joerg Roedel wrote:
> This call-back points to the right function for initializing
> the msi_msg structure.
What is the 'hpet_id' purpose in this?
>
> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
> ---
> arch/x86/include/asm/io_apic.h | 4 +++
> arch/x86/include/asm/x86_init.h | 4 +++
> arch/x86/kernel/apic/io_apic.c | 59 ++++++++++++++++++++-------------------
> arch/x86/kernel/x86_init.c | 1 +
> drivers/iommu/irq_remapping.c | 9 ++++--
> 5 files changed, 46 insertions(+), 31 deletions(-)
>
> diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
> index 0db4429..59a3f4e 100644
> --- a/arch/x86/include/asm/io_apic.h
> +++ b/arch/x86/include/asm/io_apic.h
> @@ -160,6 +160,9 @@ extern void __init native_setup_timer_pin(unsigned int ioapic_idx,
> unsigned int pin, int vector);
> extern void eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg);
>
> +extern void native_compose_msi_msg(struct pci_dev *pdev,
> + unsigned int irq, unsigned int dest,
> + struct msi_msg *msg, u8 hpet_id);
> int io_apic_setup_irq_pin_once(unsigned int irq, int node, struct io_apic_irq_attr *attr);
>
> extern int save_ioapic_entries(void);
> @@ -245,6 +248,7 @@ static inline void disable_ioapic_support(void) { }
> #define native_ioapic_set_affinity NULL
> #define native_setup_ioapic_entry NULL
> #define native_setup_timer_pin NULL
> +#define native_compose_msi_msg NULL
> #endif
>
> #endif /* _ASM_X86_IO_APIC_H */
> diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
> index ffe5860..1430af0 100644
> --- a/arch/x86/include/asm/x86_init.h
> +++ b/arch/x86/include/asm/x86_init.h
> @@ -180,9 +180,13 @@ struct x86_platform_ops {
> };
>
> struct pci_dev;
> +struct msi_msg;
>
> struct x86_msi_ops {
> int (*setup_msi_irqs)(struct pci_dev *dev, int nvec, int type);
> + void (*compose_msi_msg)(struct pci_dev *dev, unsigned int irq,
> + unsigned int dest, struct msi_msg *msg,
> + u8 hpet_id);
> void (*teardown_msi_irq)(unsigned int irq);
> void (*teardown_msi_irqs)(struct pci_dev *dev);
> void (*restore_msi_irqs)(struct pci_dev *dev, int irq);
> diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
> index c2f2d2d..aac3f62 100644
> --- a/arch/x86/kernel/apic/io_apic.c
> +++ b/arch/x86/kernel/apic/io_apic.c
> @@ -2989,37 +2989,16 @@ void destroy_irq(unsigned int irq)
> /*
> * MSI message composition
> */
> -#ifdef CONFIG_PCI_MSI
> -static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq,
> - struct msi_msg *msg, u8 hpet_id)
> +void native_compose_msi_msg(struct pci_dev *pdev,
> + unsigned int irq, unsigned int dest,
> + struct msi_msg *msg, u8 hpet_id)
> {
> - struct irq_cfg *cfg;
> - int err;
> - unsigned dest;
> -
> - if (disable_apic)
> - return -ENXIO;
> -
> - cfg = irq_cfg(irq);
> - err = assign_irq_vector(irq, cfg, apic->target_cpus());
> - if (err)
> - return err;
> -
> - err = apic->cpu_mask_to_apicid_and(cfg->domain,
> - apic->target_cpus(), &dest);
> - if (err)
> - return err;
> + struct irq_cfg *cfg = irq_cfg(irq);
>
> - if (irq_remapped(cfg)) {
> - compose_remapped_msi_msg(pdev, irq, dest, msg, hpet_id);
> - return err;
> - }
> + msg->address_hi = MSI_ADDR_BASE_HI;
>
> if (x2apic_enabled())
> - msg->address_hi = MSI_ADDR_BASE_HI |
> - MSI_ADDR_EXT_DEST_ID(dest);
> - else
> - msg->address_hi = MSI_ADDR_BASE_HI;
> + msg->address_hi |= MSI_ADDR_EXT_DEST_ID(dest);
>
> msg->address_lo =
> MSI_ADDR_BASE_LO |
> @@ -3038,8 +3017,32 @@ static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq,
> MSI_DATA_DELIVERY_FIXED:
> MSI_DATA_DELIVERY_LOWPRI) |
> MSI_DATA_VECTOR(cfg->vector);
> +}
>
> - return err;
> +#ifdef CONFIG_PCI_MSI
> +static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq,
> + struct msi_msg *msg, u8 hpet_id)
> +{
> + struct irq_cfg *cfg;
> + int err;
> + unsigned dest;
> +
> + if (disable_apic)
> + return -ENXIO;
> +
> + cfg = irq_cfg(irq);
> + err = assign_irq_vector(irq, cfg, apic->target_cpus());
> + if (err)
> + return err;
> +
> + err = apic->cpu_mask_to_apicid_and(cfg->domain,
> + apic->target_cpus(), &dest);
> + if (err)
> + return err;
> +
> + x86_msi.compose_msi_msg(pdev, irq, dest, msg, hpet_id);
> +
> + return 0;
> }
>
> static int
> diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
> index eba02e5..af5874e 100644
> --- a/arch/x86/kernel/x86_init.c
> +++ b/arch/x86/kernel/x86_init.c
> @@ -115,6 +115,7 @@ struct x86_platform_ops x86_platform = {
> EXPORT_SYMBOL_GPL(x86_platform);
> struct x86_msi_ops x86_msi = {
> .setup_msi_irqs = native_setup_msi_irqs,
> + .compose_msi_msg = native_compose_msi_msg,
> .teardown_msi_irq = native_teardown_msi_irq,
> .teardown_msi_irqs = default_teardown_msi_irqs,
> .restore_msi_irqs = default_restore_msi_irqs,
> diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c
> index d9cd920f..e61a174 100644
> --- a/drivers/iommu/irq_remapping.c
> +++ b/drivers/iommu/irq_remapping.c
> @@ -102,6 +102,7 @@ static void __init irq_remapping_modify_x86_ops(void)
> x86_io_apic_ops.setup_timer_pin = irq_remapping_setup_timer_pin;
> x86_msi.setup_msi_irqs = irq_remapping_setup_msi_irqs;
> x86_msi.setup_hpet_msi = setup_hpet_msi_remapped;
> + x86_msi.compose_msi_msg = compose_remapped_msi_msg;
> }
>
> static __init int setup_nointremap(char *str)
> @@ -242,10 +243,12 @@ void compose_remapped_msi_msg(struct pci_dev *pdev,
> unsigned int irq, unsigned int dest,
> struct msi_msg *msg, u8 hpet_id)
> {
> - if (!remap_ops || !remap_ops->compose_msi_msg)
> - return;
> + struct irq_cfg *cfg = irq_get_chip_data(irq);
>
> - remap_ops->compose_msi_msg(pdev, irq, dest, msg, hpet_id);
> + if (cfg && !irq_remapped(cfg))
> + native_compose_msi_msg(pdev, irq, dest, msg, hpet_id);
> + else if (remap_ops && remap_ops->compose_msi_msg)
> + remap_ops->compose_msi_msg(pdev, irq, dest, msg, hpet_id);
> }
>
> static int msi_alloc_remapped_irq(struct pci_dev *pdev, int irq, int nvec)
> --
> 1.7.9.5
>
>
> --
> 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/
>
next prev parent reply other threads:[~2012-08-20 14:18 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-20 13:55 [PATCH 00/19 v2] Improve IRQ remapping abstraction in x86 core code Joerg Roedel
2012-08-20 13:55 ` [PATCH 01/19] x86, apic: Move irq_remapping_enabled checks into IRQ-remapping code Joerg Roedel
2012-08-20 13:55 ` [PATCH 02/19] [RFC] x86, apic: Mask IO-APIC and PIC unconditionally on LAPIC resume Joerg Roedel
2012-08-23 20:58 ` Sebastian Andrzej Siewior
2012-08-20 13:55 ` [PATCH 03/19] x86, io_apic: Introduce x86_io_apic_ops.disable() Joerg Roedel
2012-08-23 21:11 ` Sebastian Andrzej Siewior
2012-08-24 12:22 ` Joerg Roedel
2012-08-25 17:17 ` Sebastian Andrzej Siewior
2012-08-26 9:56 ` Joerg Roedel
2012-08-20 13:55 ` [PATCH 04/19] x86, io_apic: Introduce x86_io_apic_ops.print_entries for debugging Joerg Roedel
2012-08-26 18:03 ` Sebastian Andrzej Siewior
2012-08-20 13:55 ` [PATCH 05/19] x86, hpet: Introduce x86_msi_ops.setup_hpet_msi Joerg Roedel
2012-08-20 13:55 ` [PATCH 06/19] x86, msi: Use IRQ remapping specific setup_msi_irqs routine Joerg Roedel
2012-08-26 18:10 ` Sebastian Andrzej Siewior
2012-08-20 13:55 ` [PATCH 07/19] x86, io_apic: Introduce set_affinity function pointer Joerg Roedel
2012-08-20 13:55 ` [PATCH 08/19] x86, io_apic: Convert setup_ioapic_entry to " Joerg Roedel
2012-08-20 13:55 ` [PATCH 09/19] x86, io_apic: Move irq_remapping_enabled checks out of check_timer() Joerg Roedel
2012-08-20 13:55 ` [PATCH 10/19] x86, io_apic: Introduce function pointer for setup_timer_IRQ0_pin Joerg Roedel
2012-08-26 18:16 ` Sebastian Andrzej Siewior
2012-09-25 12:57 ` Joerg Roedel
2012-08-20 13:55 ` [PATCH 11/19] x86, irq: Move irq_remapping_enabled declaration to iommu code Joerg Roedel
2012-08-20 13:55 ` [PATCH 12/19] x86, irq: Add data structure to keep AMD specific irq remapping information Joerg Roedel
2012-08-26 18:21 ` Sebastian Andrzej Siewior
2012-09-25 13:04 ` Joerg Roedel
2012-08-20 13:55 ` [PATCH 13/19] x86, io-apic: Move CONFIG_IRQ_REMAP code out of x86 core Joerg Roedel
2012-08-26 18:23 ` Sebastian Andrzej Siewior
2012-08-20 13:56 ` [PATCH 14/19] x86, io-apic: Remove !irq_remapped() check from __target_IO_APIC_irq() Joerg Roedel
2012-08-26 18:26 ` Sebastian Andrzej Siewior
2012-08-20 13:56 ` [PATCH 15/19] x86, irq: Move irq_remapped() check into free_remapped_irq Joerg Roedel
2012-08-26 18:27 ` Sebastian Andrzej Siewior
2012-09-25 13:29 ` Joerg Roedel
2012-08-20 13:56 ` [PATCH 16/19] x86, irq: Introduce setup_remapped_irq() Joerg Roedel
2012-08-26 18:30 ` Sebastian Andrzej Siewior
2012-09-25 13:43 ` Joerg Roedel
2012-08-20 13:56 ` [PATCH 17/19] x86, msi: Introduce x86_msi.compose_msi_msg call-back Joerg Roedel
2012-08-20 14:08 ` Konrad Rzeszutek Wilk [this message]
2012-08-21 8:40 ` Joerg Roedel
2012-08-21 14:42 ` Konrad Rzeszutek Wilk
2012-08-21 15:29 ` Joerg Roedel
2012-08-21 15:41 ` Joerg Roedel
2012-08-22 14:41 ` Joerg Roedel
2012-08-26 18:41 ` Sebastian Andrzej Siewior
2012-09-25 13:59 ` Joerg Roedel
2012-08-20 13:56 ` [PATCH 18/19] x86, io_apic: Introduce eoi_ioapic_pin call-back Joerg Roedel
2012-08-26 18:52 ` Sebastian Andrzej Siewior
2012-09-25 15:09 ` Joerg Roedel
2012-08-20 13:56 ` [PATCH 19/19] x86, irq: Move irq_remapped out of x86 core code Joerg Roedel
2012-08-26 19:17 ` [PATCH 00/19 v2] Improve IRQ remapping abstraction in " Sebastian Andrzej Siewior
2012-09-19 14:52 ` Joerg Roedel
2012-11-01 18:49 ` Sebastian Andrzej Siewior
-- strict thread matches above, loose matches on Subject: below --
2012-11-20 13:12 [PATCH 00/19 v4] " Joerg Roedel
[not found] ` <1353417176-18945-1-git-send-email-joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2012-11-20 13:12 ` [PATCH 17/19] x86, msi: Introduce x86_msi.compose_msi_msg call-back Joerg Roedel
2012-11-20 13:12 ` Joerg Roedel
2012-09-26 10:44 [PATCH 00/19 v3] Improve IRQ remapping abstraction in x86 core code Joerg Roedel
2012-09-26 10:44 ` [PATCH 17/19] x86, msi: Introduce x86_msi.compose_msi_msg call-back Joerg Roedel
2012-08-07 15:43 [PATCH 0/19] Improve IRQ remapping abstraction in x86 core code Joerg Roedel
2012-08-07 15:43 ` [PATCH 17/19] x86, msi: Introduce x86_msi.compose_msi_msg call-back Joerg Roedel
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=20120820140843.GA7732@phenom.dumpdata.com \
--to=konrad@kernel.org \
--cc=joerg.roedel@amd.com \
--cc=joro@8bytes.org \
--cc=linux-kernel@vger.kernel.org \
--cc=suresh.b.siddha@intel.com \
--cc=x86@kernel.org \
--cc=yinghai@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.