[PATCH 1/6] irqchip: add the Alpine MSIX interrupt controller
From: Thomas Gleixner <hidden>
Date: 2016-02-08 10:33:04
Also in:
lkml
Antoine, On Mon, 8 Feb 2016, Antoine Tenart wrote:
+static int alpine_msix_set_affinity(struct irq_data *irq_data,
+ const struct cpumask *mask, bool force)
+{
+ int ret;
+
+ ret = irq_chip_set_affinity_parent(irq_data, mask, force);
+ return ret == IRQ_SET_MASK_OK ? IRQ_SET_MASK_OK_DONE : ret;What's the point of this exercise? Why can't you just set the affinity callback to irq_chip_set_affinity_parent() ?
+static struct irq_chip alpine_msix_irq_chip = {
+ .name = "MSIx",
+ .irq_mask = alpine_msix_mask_msi_irq,
+ .irq_unmask = alpine_msix_unmask_msi_irq,
+ .irq_eoi = irq_chip_eoi_parent,
+ .irq_set_affinity = alpine_msix_set_affinity,
+};
+
+static int alpine_msix_allocate_sgi(struct alpine_msix_data *priv, int num_req)
+{
+ int first, i;
+
+ spin_lock(&priv->msi_map_lock);
+
+ first = bitmap_find_next_zero_area(priv->msi_map, priv->num_spis, 0,
+ num_req, 0);
+ if (first >= priv->num_spis) {
+ spin_unlock(&priv->msi_map_lock);
+ return -ENOSPC;
+ }
+
+ for (i = 0; i < num_req; i++)
+ set_bit(first + i, priv->msi_map);bitmap_set() ??
+
+ spin_unlock(&priv->msi_map_lock);
+
+ return priv->spi_first + first;
+}
+
+static void alpine_msix_free_sgi(struct alpine_msix_data *priv, unsigned sgi,
+ int num_req)
+{
+ int i, first;
+
+ first = sgi - priv->spi_first;
+
+ spin_lock(&priv->msi_map_lock);
+
+ for (i = 0; i < num_req; i++)
+ clear_bit(first + i, priv->msi_map);bitmap_clear() ??
+ spin_unlock(&priv->msi_map_lock); +}
Thanks, tglx