04 Jul, 2016

2 commits

  • Pull the irq affinity managing code which is in a seperate branch for block
    developers to pull.

    Thomas Gleixner
     
  • Add an extra argument to the irq(domain) allocation functions, so we can hand
    down affinity hints to the allocator. Thats necessary to implement proper
    support for multiqueue devices.

    Signed-off-by: Thomas Gleixner
    Cc: Christoph Hellwig
    Cc: linux-block@vger.kernel.org
    Cc: linux-pci@vger.kernel.org
    Cc: linux-nvme@lists.infradead.org
    Cc: axboe@fb.com
    Cc: agordeev@redhat.com
    Link: http://lkml.kernel.org/r/1467621574-8277-4-git-send-email-hch@lst.de
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     

13 Jun, 2016

1 commit

  • Some IRQ chips, such as GPIO controllers or secondary level interrupt
    controllers, may require require additional runtime power management
    control to ensure they are accessible. For such IRQ chips, it makes sense
    to enable the IRQ chip when interrupts are requested and disabled them
    again once all interrupts have been freed.

    When mapping an IRQ, the IRQ type settings are read and then programmed.
    The mapping of the IRQ happens before the IRQ is requested and so the
    programming of the type settings occurs before the IRQ is requested. This
    is a problem for IRQ chips that require additional power management
    control because they may not be accessible yet. Therefore, when mapping
    the IRQ, don't program the type settings, just save them and then program
    these saved settings when the IRQ is requested (so long as if they are not
    overridden via the call to request the IRQ).

    Add a stub function for irq_domain_free_irqs() to avoid any compilation
    errors when CONFIG_IRQ_DOMAIN_HIERARCHY is not selected.

    Signed-off-by: Jon Hunter
    Reviewed-by: Marc Zyngier
    Signed-off-by: Marc Zyngier

    Jon Hunter
     

02 May, 2016

3 commits

  • When iterating over the irq domain list, we try to match a domain
    either by calling a match() function or by comparing a number
    of fields passed as parameters.

    Both approaches are a bit restrictive:
    - match() is DT specific and only takes a device node
    - the fallback case only deals with the fwnode_handle

    It would be useful if we had a per-domain function that would
    actually perform the matching check on the whole of the
    irq_fwspec structure. This would allow for a domain to triage
    matching attempts that need to extend beyond the fwnode.

    Let's introduce irq_find_matching_fwspec(), which takes a full
    blown irq_fwspec structure, and call into a select() function
    implemented by the irqdomain. irq_find_matching_fwnode() is
    made a wrapper around irq_find_matching_fwspec in order to
    preserve compatibility.

    Signed-off-by: Marc Zyngier
    Cc: Mark Rutland
    Cc: devicetree@vger.kernel.org
    Cc: Jason Cooper
    Cc: Will Deacon
    Cc: Rob Herring
    Link: http://lkml.kernel.org/r/1460365075-7316-2-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • Make these functions return appropriate error codes when something goes
    wrong.

    Previously irq_destroy_ipi returned void making it impossible to notify
    the caller if the request could not be fulfilled. Patch 1 in the series
    added another condition in which this could fail in addition to the
    existing ones. irq_reserve_ipi returned an unsigned int meaning it could
    only return 0 on failure and give the caller no indication as to why the
    request failed.

    As time goes on there are likely to be further conditions added in which
    these functions can fail. These APIs and the IPI IRQ domain are new in
    4.6 and the number of existing call sites are low, changing the API now
    has little impact on the code, while making it easier for these
    functions to grow over time.

    Signed-off-by: Matt Redfearn
    Cc: linux-mips@linux-mips.org
    Cc: jason@lakedaemon.net
    Cc: marc.zyngier@arm.com
    Cc: ralf@linux-mips.org
    Cc: Qais Yousef
    Cc: lisa.parratt@imgtec.com
    Cc: jiang.liu@linux.intel.com
    Link: http://lkml.kernel.org/r/1461568464-31701-2-git-send-email-matt.redfearn@imgtec.com
    Signed-off-by: Thomas Gleixner

    Matt Redfearn
     
  • Previously irq_destroy_ipi() would destroy IPIs to all CPUs that were
    configured by irq_reserve_ipi(). This change makes it possible to
    destroy just a subset of the IPIs. This may be useful to remove IPIs to
    CPUs that have been hot removed so that the IRQ numbers allocated within
    the IPI domain can be re-used.

    The original behaviour is restored by passing the complete mask that the
    IPI was created with.

    There are currently no users of this function that would break from the
    API change.

    Signed-off-by: Matt Redfearn
    Cc: linux-mips@linux-mips.org
    Cc: jason@lakedaemon.net
    Cc: marc.zyngier@arm.com
    Cc: ralf@linux-mips.org
    Cc: Qais Yousef
    Cc: lisa.parratt@imgtec.com
    Cc: jiang.liu@linux.intel.com
    Link: http://lkml.kernel.org/r/1461568464-31701-1-git-send-email-matt.redfearn@imgtec.com
    Signed-off-by: Thomas Gleixner

    Matt Redfearn
     

18 Mar, 2016

1 commit

  • Pull staging driver updates from Greg KH:
    "Here is the big staging driver pull request for 4.6-rc1.

    Lots of little things here, over 1600 patches or so. Notable is all
    of the good Lustre work happening, those developers have finally woken
    up and are cleaning up their code greatly. The Outreachy intern
    application process is also happening, which brought in another 400 or
    so patches. Full details are in the very long shortlog.

    All of these have been in linux-next with no reported issues"

    * tag 'staging-4.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (1673 commits)
    staging: lustre: fix aligments in lnet selftest
    staging: lustre: report minimum of two buffers for LNet selftest load test
    staging: lustre: test for proper errno code in lstcon_rpc_trans_abort
    staging: lustre: filter remaining extra spacing for lnet selftest
    staging: lustre: remove extra spacing when setting variable for lnet selftest
    staging: lustre: remove extra spacing of variable declartions for lnet selftest
    staging: lustre: fix spacing issues checkpatch reported in lnet selftest
    staging: lustre: remove returns in void function for lnet selftest
    staging: lustre: fix bogus lst errors for lnet selftest
    staging: netlogic: Replacing pr_err with dev_err after the call to devm_kzalloc
    staging: mt29f_spinand: Replacing pr_info with dev_info after the call to devm_kzalloc
    staging: android: ion: fix up file mode
    staging: ion: debugfs invalid gfp mask
    staging: rts5208: Replace pci_enable_device with pcim_enable_device
    Staging: ieee80211: Place constant on right side of the test.
    staging: speakup: Replace del_timer with del_timer_sync
    staging: lowmemorykiller: fix 2 checks that checkpatch complained
    staging: mt29f_spinand: Drop void pointer cast
    staging: rdma: hfi1: file_ops: Replace ALIGN with PAGE_ALIGN
    staging: rdma: hfi1: driver: Replace IS_ALIGNED with PAGE_ALIGNED
    ...

    Linus Torvalds
     

25 Feb, 2016

4 commits

  • Add a generic mechanism to dynamically allocate an IPI. Depending on the
    underlying implementation this creates either a single Linux irq or a
    consective range of Linux irqs. The Linux irq is used later to send IPIs to
    other CPUs.

    [ tglx: Massaged the code and removed the 'consecutive mask' restriction for
    the single IRQ case ]

    Signed-off-by: Qais Yousef
    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Cc: Qais Yousef
    Link: http://lkml.kernel.org/r/1449580830-23652-9-git-send-email-qais.yousef@imgtec.com
    Signed-off-by: Thomas Gleixner

    Qais Yousef
     
  • We will need to use this function to implement irq_reserve_ipi() later. So
    make it non static and move the prototype to irqdomain.h to allow using it
    outside irqdomain.c

    Signed-off-by: Qais Yousef
    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Cc: Qais Yousef
    Link: http://lkml.kernel.org/r/1449580830-23652-8-git-send-email-qais.yousef@imgtec.com
    Signed-off-by: Thomas Gleixner

    Qais Yousef
     
  • We need a way to search and match IPI domains.

    Using the new enum we can use irq_find_matching_host() to do that.

    Signed-off-by: Qais Yousef
    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Cc: Qais Yousef
    Link: http://lkml.kernel.org/r/1449580830-23652-3-git-send-email-qais.yousef@imgtec.com
    Signed-off-by: Thomas Gleixner

    Qais Yousef
     
  • These flags will be used to identify an IPI domain. We have two flavours of
    IPI implementations:

    IRQ_DOMAIN_FLAG_IPI_PER_CPU: Each CPU has its own virq and hwirq
    IRQ_DOMAIN_FLAG_IPI_SINGLE : A single virq and hwirq for all CPUs

    Signed-off-by: Qais Yousef
    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Cc:
    Cc: Qais Yousef
    Link: http://lkml.kernel.org/r/1449580830-23652-2-git-send-email-qais.yousef@imgtec.com
    Signed-off-by: Thomas Gleixner

    Qais Yousef
     

08 Feb, 2016

1 commit


26 Jan, 2016

1 commit

  • Let's take the (outlandish) example of an interrupt controller
    capable of handling both wired interrupts and PCI MSIs.

    With the current code, the PCI MSI domain is going to be tagged
    with DOMAIN_BUS_PCI_MSI, and the wired domain with DOMAIN_BUS_ANY.

    Things get hairy when we start looking up the domain for a wired
    interrupt (typically when creating it based on some firmware
    information - DT or ACPI).

    In irq_create_fwspec_mapping(), we perform the lookup using
    DOMAIN_BUS_ANY, which is actually used as a wildcard. This gives
    us one chance out of two to end up with the wrong domain, and
    we try to configure a wired interrupt with the MSI domain.
    Everything grinds to a halt pretty quickly.

    What we really need to do is to start looking for a domain that
    would uniquely identify a wired interrupt domain, and only use
    DOMAIN_BUS_ANY as a fallback.

    In order to solve this, let's introduce a new DOMAIN_BUS_WIRED
    token, which is going to be used exactly as described above.
    Of course, this depends on the irqchip to setup the domain
    bus_token, and nobody had to implement this so far.

    Only so far.

    Signed-off-by: Marc Zyngier
    Cc: Greg Kroah-Hartman
    Cc: Rob Herring
    Cc: Frank Rowand
    Cc: Grant Likely
    Cc: Thomas Petazzoni
    Cc: Jiang Liu
    Link: http://lkml.kernel.org/r/1453816347-32720-2-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

29 Dec, 2015

1 commit


21 Dec, 2015

2 commits

  • Since there will be several places checking if fwnode.type
    is equal FWNODE_IRQCHIP, this patch adds a convenient function
    for this purpose.

    Acked-by: Marc Zyngier
    Signed-off-by: Suravee Suthikulpanit
    Signed-off-by: Marc Zyngier

    Suravee Suthikulpanit
     
  • This patch introduces pci_msi_register_fwnode_provider() for irqchip
    to register a callback, to provide a way to determine appropriate MSI
    domain for a pci device.

    It also introduces pci_host_bridge_acpi_msi_domain(), which returns
    the MSI domain of the specified PCI host bridge with DOMAIN_BUS_PCI_MSI
    bus token. Then, it is assigned to pci device.

    Reviewed-by: Marc Zyngier
    Acked-by: Bjorn Helgaas
    Acked-by: Rafael J. Wysocki
    Signed-off-by: Suravee Suthikulpanit
    Signed-off-by: Marc Zyngier

    Suravee Suthikulpanit
     

16 Dec, 2015

1 commit


14 Oct, 2015

8 commits

  • Update the IRQ domain documentation to reflect the changes made
    while divorcing the domain infrastructure from Device Tree.

    Signed-off-by: Marc Zyngier
    Tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-18-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • As we're about to start converting the various MSI layers to
    use fwnode_handle instead of device_node, add irq_domain_create_hierarchy
    as a directly equivalent of irq_domain_add_hierarchy (which still
    exists as a compatibility interface).

    Signed-off-by: Marc Zyngier
    Tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-16-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • In order to be able to reference an irqdomain from ACPI, we need
    to be able to create an identifier, which is usually a struct
    device_node.

    This device node does't really fit the ACPI infrastructure, so
    we cunningly allocate a new structure containing a fwnode_handle,
    and return that.

    This structure doesn't really point to a device (interrupt
    controllers are not "real" devices in Linux), but as we cannot
    really deny that they exist, we create them with a new fwnode_type
    (FWNODE_IRQCHIP).

    Signed-off-by: Marc Zyngier
    Acked-by: Rafael J. Wysocki
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-9-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • Just like we have irq_domain_add_{linear,tree} to create a irq domain
    identified by an of_node, introduce irq_domain_create_{linear,tree}
    that do the same thing, except that they take a struct fwnode_handle.

    Existing functions get rewritten in terms of the new ones so that
    everything keeps working as before (and __irq_domain_add is now
    fwnode_handle based as well).

    Signed-off-by: Marc Zyngier
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-8-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • Just like we have irq_create_of_mapping, irq_create_fwspec_mapping
    creates a IRQ domain mapping for an interrupt described in a
    struct irq_fwspec.

    irq_create_of_mapping gets rewritten in terms of the new function,
    and the hack we introduced before gets removed (now that no stacked
    irqchip uses of_phandle_args anymore).

    Signed-off-by: Marc Zyngier
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-7-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • So far the closest thing to a generic IRQ specifier structure is
    of_phandle_args, which happens to be pretty OF specific (the of_node
    pointer in there is quite annoying).

    Let's introduce 'struct irq_fwspec' that can be used in place of
    of_phandle_args for OF, but also for other firmware implementations
    (that'd be ACPI). This is used together with a new 'translate' method
    that is the pendent of 'xlate'.

    We convert irq_create_of_mapping to use this new structure (with a
    small hack that will be removed later).

    Signed-off-by: Marc Zyngier
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-5-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • So far, our irq domains are still looked up by device node.
    Let's change this and allow a domain to be looked up using
    a fwnode_handle pointer.

    The existing interfaces are preserved with a couple of helpers.

    Signed-off-by: Marc Zyngier
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-4-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • Now that we have everyone accessing the of_node field via the
    irq_domain_get_of_node accessor, it is pretty easy to swap it
    for a pointer to a fwnode_handle.

    This translates into a few limited changes in __irq_domain_add,
    and an updated irq_domain_get_of_node.

    Signed-off-by: Marc Zyngier
    Reviewed-and-tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-3-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

09 Oct, 2015

1 commit

  • As we're about to remove the of_node field from the irqdomain
    structure, introduce an accessor for it. Subsequent patches
    will take care of the actual repainting.

    Signed-off-by: Marc Zyngier
    Cc: Jiang Liu
    Cc: Jason Cooper
    Link: http://lkml.kernel.org/r/1444402211-1141-1-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

30 Jul, 2015

4 commits

  • Some IRQ domains are not designed to directly provide interrupts
    to devices, but strictly to be used by other domains. An example
    of this is the GICv3 ITS, which is completely bus agnostic, and
    on which it is possible to implement a PCI/MSI domain.

    Just introduce the irq_domain_bus_token property for now.

    Signed-off-by: Marc Zyngier
    Cc:
    Cc: Yijing Wang
    Cc: Ma Jun
    Cc: Lorenzo Pieralisi
    Cc: Duc Dang
    Cc: Hanjun Guo
    Cc: Bjorn Helgaas
    Cc: Jiang Liu
    Cc: Jason Cooper
    Link: http://lkml.kernel.org/r/1438091186-10244-11-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • As for PCI, we're able to populate the msi_domain field at probe time,
    provided that the device tree has an "msi-parent" property.

    Signed-off-by: Marc Zyngier
    Cc:
    Cc: Yijing Wang
    Cc: Ma Jun
    Cc: Lorenzo Pieralisi
    Cc: Duc Dang
    Cc: Hanjun Guo
    Cc: Bjorn Helgaas
    Cc: Jiang Liu
    Cc: Jason Cooper
    Link: http://lkml.kernel.org/r/1438091186-10244-9-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • When creating a PCI/MSI domain, tag it with DOMAIN_BUS_PCI_MSI so
    that it can be looked-up using irq_find_matching_host().

    Acked-by: Bjorn Helgaas
    Reviewed-by: Hanjun Guo
    Signed-off-by: Marc Zyngier
    Cc:
    Cc: Yijing Wang
    Cc: Ma Jun
    Cc: Lorenzo Pieralisi
    Cc: Duc Dang
    Cc: Jiang Liu
    Cc: Jason Cooper
    Link: http://lkml.kernel.org/r/1438091186-10244-3-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • It is not uncommon (at least with the ARM stuff) to have a piece
    of hardware that implements different flavours of "interrupts".
    A typical example of this is the GICv3 ITS, which implements
    standard PCI/MSI support, but also some form of "generic MSI".

    So far, the PCI/MSI domain is registered using the ITS device_node,
    so that irq_find_host can return it. On the contrary, the raw MSI
    domain is not registered with an device_node, making it impossible
    to be looked up by another subsystem (obviously, using the same
    device_node twice would only result in confusion, as it is not
    defined which one irq_find_host would return).

    A solution to this is to "type" domains that may be aliasing, and
    to be able to lookup an device_node that matches a given type.
    For this, we introduce irq_find_matching_host() as a superset
    of irq_find_host:

    struct irq_domain *irq_find_matching_host(struct device_node *node,
    enum irq_domain_bus_token bus_token);

    where bus_token is the "type" we want to match the domain against
    (so far, only DOMAIN_BUS_ANY is defined). This result in some
    moderately invasive changes on the PPC side (which is the only
    user of the .match method).

    This has otherwise no functionnal change.

    Reviewed-by: Hanjun Guo
    Signed-off-by: Marc Zyngier
    Cc:
    Cc: Yijing Wang
    Cc: Ma Jun
    Cc: Lorenzo Pieralisi
    Cc: Duc Dang
    Cc: Bjorn Helgaas
    Cc: Jiang Liu
    Cc: Jason Cooper
    Link: http://lkml.kernel.org/r/1438091186-10244-2-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

18 May, 2015

1 commit

  • This adds the helper irq_domain_set_info() in a non-domain hierarchy
    variant. This allows to use the helper for generic chip since not
    all chips using generic chip support domain hierarchy.

    Signed-off-by: Stefan Agner
    Cc: marc.zyngier@arm.com
    Cc: linux@arm.linux.org.uk
    Cc: u.kleine-koenig@pengutronix.de
    Cc: olof@lixom.net
    Cc: arnd@arndb.de
    Cc: daniel.lezcano@linaro.org
    Cc: mark.rutland@arm.com
    Cc: pawel.moll@arm.com
    Cc: robh+dt@kernel.org
    Cc: ijc+devicetree@hellion.org.uk
    Cc: galak@codeaurora.org
    Cc: mcoquelin.stm32@gmail.com
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: shawn.guo@linaro.org
    Cc: kernel@pengutronix.de
    Cc: jason@lakedaemon.net
    Link: http://lkml.kernel.org/r/1431769465-26867-2-git-send-email-stefan@agner.ch
    Signed-off-by: Thomas Gleixner

    Stefan Agner
     

23 Nov, 2014

4 commits

  • Introduce helper function irq_domain_add_hierarchy(), which creates
    a linear irqdomain if parameter 'size' is not zero, otherwise creates
    a tree irqdomain.

    Signed-off-by: Jiang Liu
    Cc: Tony Luck
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yijing Wang
    Cc: Yingjoe Chen
    Cc: Borislav Petkov
    Cc: Benjamin Herrenschmidt
    Cc: Matthias Brugger
    Link: http://lkml.kernel.org/r/1416061447-9472-5-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Add a flags to irq_domain.flags to control whether the irqdomain core
    should automatically call parent irqdomain's alloc/free callbacks. It
    help to reduce hierarchy irqdomains users' code size.

    Signed-off-by: Jiang Liu
    Cc: Tony Luck
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yijing Wang
    Cc: Yingjoe Chen
    Cc: Borislav Petkov
    Cc: Benjamin Herrenschmidt
    Cc: Matthias Brugger
    Link: http://lkml.kernel.org/r/1416061447-9472-4-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Signed-off-by: Jiang Liu
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Yijing Wang
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • We plan to use hierarchy irqdomain to suppport CPU vector assignment,
    interrupt remapping controller, IO-APIC controller, MSI interrupt
    and hypertransport interrupt etc on x86 platforms. So extend irqdomain
    interfaces to support hierarchy irqdomain.

    There are already many clients of current irqdomain interfaces.
    To minimize the changes, we choose to introduce new version 2 interfaces
    to support hierarchy instead of extending existing irqdomain interfaces.

    According to Thomas's suggestion, the most important design decision is
    to build hierarchy struct irq_data to support hierarchy irqdomain, so
    hierarchy irqdomain related data could be saved in struct irq_data.
    With support of hierarchy irq_data, we could also support stacked
    irq_chips. This is most useful in case of set_affinity().

    The new hierarchy irqdomain introduces following interfaces:
    1) irq_domain_alloc_irqs()/irq_domain_free_irqs(): allocate/release IRQ
    and related resources.
    2) __irq_domain_alloc_irqs(): a special version to support legacy IRQs.
    3) irq_domain_activate_irq()/irq_domain_deactivate_irq(): program
    interrupt controllers to activate/deactivate interrupt.

    There are also several help functions to ease irqdomain implemenations:
    1) irq_domain_get_irq_data(): get irq_data associated with a specific
    irqdomain.
    2) irq_domain_set_hwirq_and_chip(): save irqdomain specific data into
    irq_data.
    3) irq_domain_alloc_irqs_parent()/irq_domain_free_irqs_parent(): invoke
    parent irqdomain's alloc/free callbacks.

    We also changed irq_startup()/irq_shutdown() to invoke
    irq_domain_activate_irq()/irq_domain_deactivate_irq() to program
    interrupt controller when start/stop interrupts.

    [ tglx: Folded parts of the later patch series in ]

    Signed-off-by: Jiang Liu
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Yijing Wang
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     

22 Jun, 2014

1 commit

  • Export irq_domain_disassociate() to architecture interrupt drivers,
    so it could be used to handle legacy IRQ descriptors on x86.

    Signed-off-by: Jiang Liu
    Cc: Konrad Rzeszutek Wilk
    Cc: Tony Luck
    Cc: Joerg Roedel
    Cc: Paul Gortmaker
    Cc: Greg Kroah-Hartman
    Cc: Benjamin Herrenschmidt
    Cc: Grant Likely
    Cc: Rafael J. Wysocki
    Cc: Bjorn Helgaas
    Cc: Randy Dunlap
    Cc: Yinghai Lu
    Link: http://lkml.kernel.org/r/1402302011-23642-37-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     

24 Jun, 2013

3 commits

  • Over the years, irq_linear_revmap() gained tests and checks to make sure
    callers were using it safely, which while important, also make it less
    of a fast path. After the irqdomain refactoring done recently, it is now
    possible to make irq_linear_revmap() a fast path again. This patch moves
    irq_linear_revmap() to the header file and makes it a static inline so
    that interrupt controller drivers using a linear mapping can decode the
    virq from a hwirq in just a couple of instructions.

    Signed-off-by: Grant Likely

    Grant Likely
     
  • Nobody calls it; remove the function

    Signed-off-by: Grant Likely

    Grant Likely
     
  • Originally, irq_domain_associate_many() was designed to unwind the
    mapped irqs on a failure of any individual association. However, that
    proved to be a problem with certain IRQ controllers. Some of them only
    support a subset of irqs, and will fail when attempting to map a
    reserved IRQ. In those cases we want to map as many IRQs as possible, so
    instead it is better for irq_domain_associate_many() to make a
    best-effort attempt to map irqs, but not fail if any or all of them
    don't succeed. If a caller really cares about how many irqs got
    associated, then it should instead go back and check that all of the
    irqs is cares about were mapped.

    The original design open-coded the individual association code into the
    body of irq_domain_associate_many(), but with no longer needing to
    unwind associations, the code becomes simpler to split out
    irq_domain_associate() to contain the bulk of the logic, and
    irq_domain_associate_many() to be a simple loop wrapper.

    This patch also adds a new error check to the associate path to make
    sure it isn't called for an irq larger than the controller can handle,
    and adds locking so that the irq_domain_mutex is held while setting up a
    new association.

    v3: Fixup missing change to irq_domain_add_tree()
    v2: Fixup x86 warning. irq_domain_associate_many() no longer returns an
    error code, but reports errors to the printk log directly. In the
    majority of cases we don't actually want to fail if there is a
    problem, but rather log it and still try to boot the system.

    Signed-off-by: Grant Likely

    irqdomain: Fix flubbed irq_domain_associate_many refactoring

    commit d39046ec72, "irqdomain: Refactor irq_domain_associate_many()" was
    missing the following hunk which causes a boot failure on anything using
    irq_domain_add_tree() to allocate an irq domain.

    Signed-off-by: Grant Likely
    Cc: Michael Neuling
    Cc: Benjamin Herrenschmidt ,
    Cc: Thomas Gleixner ,
    Cc: Stephen Rothwell

    Grant Likely
     

10 Jun, 2013

1 commit