mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Kamal Mostafa <kamal@canonical.com>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org,
	kernel-team@lists.ubuntu.com
Cc: Bob Picco <bob.picco@oracle.com>,
	"David S. Miller" <davem@davemloft.net>,
	Kamal Mostafa <kamal@canonical.com>
Subject: [PATCH 3.13 052/162] sparc64: sparse irq
Date: Thu,  6 Nov 2014 14:35:16 -0800	[thread overview]
Message-ID: <1415313426-9622-53-git-send-email-kamal@canonical.com> (raw)
In-Reply-To: <1415313426-9622-1-git-send-email-kamal@canonical.com>

3.13.11.11 -stable review patch.  If anyone has any objections, please let me know.

------------------

From: bob picco <bpicco@meloft.net>

[ Upstream commit ee6a9333fa58e11577c1b531b8e0f5ffc0fd6f50 ]

This patch attempts to do a few things. The highlights are: 1) enable
SPARSE_IRQ unconditionally, 2) kills off !SPARSE_IRQ code 3) allocates
ivector_table at boot time and 4) default to cookie only VIRQ mechanism
for supported firmware. The first firmware with cookie only support for
me appears on T5. You can optionally force the HV firmware to not cookie
only mode which is the sysino support.

The sysino is a deprecated HV mechanism according to the most recent
SPARC Virtual Machine Specification. HV_GRP_INTR is what controls the
cookie/sysino firmware versioning.

The history of this interface is:

1) Major version 1.0 only supported sysino based interrupt interfaces.

2) Major version 2.0 added cookie based VIRQs, however due to the fact
   that OSs were using the VIRQs without negoatiating major version
   2.0 (Linux and Solaris are both guilty), the VIRQs calls were
   allowed even with major version 1.0

   To complicate things even further, the VIRQ interfaces were only
   actually hooked up in the hypervisor for LDC interrupt sources.
   VIRQ calls on other device types would result in HV_EINVAL errors.

   So effectively, major version 2.0 is unusable.

3) Major version 3.0 was created to signal use of VIRQs and the fact
   that the hypervisor has these calls hooked up for all interrupt
   sources, not just those for LDC devices.

A new boot option is provided should cookie only HV support have issues.
hvirq - this is the version for HV_GRP_INTR. This is related to HV API
versioning.  The code attempts major=3 first by default. The option can
be used to override this default.

I've tested with SPARSE_IRQ on T5-8, M7-4 and T4-X and Jalap?no.

Signed-off-by: Bob Picco <bob.picco@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
---
 arch/sparc/Kconfig              |   1 +
 arch/sparc/include/asm/irq_64.h |   9 +-
 arch/sparc/kernel/irq_64.c      | 507 ++++++++++++++++++++++++++--------------
 3 files changed, 342 insertions(+), 175 deletions(-)

diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index 94cd9c1..57cf13a 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -66,6 +66,7 @@ config SPARC64
 	select HAVE_SYSCALL_TRACEPOINTS
 	select HAVE_CONTEXT_TRACKING
 	select HAVE_DEBUG_KMEMLEAK
+	select SPARSE_IRQ
 	select RTC_DRV_CMOS
 	select RTC_DRV_BQ4802
 	select RTC_DRV_SUN4V
diff --git a/arch/sparc/include/asm/irq_64.h b/arch/sparc/include/asm/irq_64.h
index abf6afe..3deb07f 100644
--- a/arch/sparc/include/asm/irq_64.h
+++ b/arch/sparc/include/asm/irq_64.h
@@ -37,7 +37,7 @@
  *
  * ino_bucket->irq allocation is made during {sun4v_,}build_irq().
  */
-#define NR_IRQS    255
+#define NR_IRQS		(2048)
 
 extern void irq_install_pre_handler(int irq,
 				    void (*func)(unsigned int, void *, void *),
@@ -57,11 +57,8 @@ extern unsigned int sun4u_build_msi(u32 portid, unsigned int *irq_p,
 				    unsigned long iclr_base);
 extern void sun4u_destroy_msi(unsigned int irq);
 
-extern unsigned char irq_alloc(unsigned int dev_handle,
-				    unsigned int dev_ino);
-#ifdef CONFIG_PCI_MSI
-extern void irq_free(unsigned int irq);
-#endif
+unsigned int irq_alloc(unsigned int dev_handle, unsigned int dev_ino);
+void irq_free(unsigned int irq);
 
 extern void __init init_IRQ(void);
 extern void fixup_irqs(void);
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index 666193f..4033c23 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -47,8 +47,6 @@
 #include "cpumap.h"
 #include "kstack.h"
 
-#define NUM_IVECS	(IMAP_INR + 1)
-
 struct ino_bucket *ivector_table;
 unsigned long ivector_table_pa;
 
@@ -107,55 +105,196 @@ static void bucket_set_irq(unsigned long bucket_pa, unsigned int irq)
 
 #define irq_work_pa(__cpu)	&(trap_block[(__cpu)].irq_worklist_pa)
 
-static struct {
-	unsigned int dev_handle;
-	unsigned int dev_ino;
-	unsigned int in_use;
-} irq_table[NR_IRQS];
-static DEFINE_SPINLOCK(irq_alloc_lock);
+static unsigned long hvirq_major __initdata;
+static int __init early_hvirq_major(char *p)
+{
+	int rc = kstrtoul(p, 10, &hvirq_major);
+
+	return rc;
+}
+early_param("hvirq", early_hvirq_major);
+
+static int hv_irq_version;
+
+/* Major version 2.0 of HV_GRP_INTR added support for the VIRQ cookie
+ * based interfaces, but:
+ *
+ * 1) Several OSs, Solaris and Linux included, use them even when only
+ *    negotiating version 1.0 (or failing to negotiate at all).  So the
+ *    hypervisor has a workaround that provides the VIRQ interfaces even
+ *    when only verion 1.0 of the API is in use.
+ *
+ * 2) Second, and more importantly, with major version 2.0 these VIRQ
+ *    interfaces only were actually hooked up for LDC interrupts, even
+ *    though the Hypervisor specification clearly stated:
+ *
+ *	The new interrupt API functions will be available to a guest
+ *	when it negotiates version 2.0 in the interrupt API group 0x2. When
+ *	a guest negotiates version 2.0, all interrupt sources will only
+ *	support using the cookie interface, and any attempt to use the
+ *	version 1.0 interrupt APIs numbered 0xa0 to 0xa6 will result in the
+ *	ENOTSUPPORTED error being returned.
+ *
+ *   with an emphasis on "all interrupt sources".
+ *
+ * To correct this, major version 3.0 was created which does actually
+ * support VIRQs for all interrupt sources (not just LDC devices).  So
+ * if we want to move completely over the cookie based VIRQs we must
+ * negotiate major version 3.0 or later of HV_GRP_INTR.
+ */
+static bool sun4v_cookie_only_virqs(void)
+{
+	if (hv_irq_version >= 3)
+		return true;
+	return false;
+}
 
-unsigned char irq_alloc(unsigned int dev_handle, unsigned int dev_ino)
+static void __init irq_init_hv(void)
 {
-	unsigned long flags;
-	unsigned char ent;
+	unsigned long hv_error, major, minor = 0;
+
+	if (tlb_type != hypervisor)
+		return;
 
-	BUILD_BUG_ON(NR_IRQS >= 256);
+	if (hvirq_major)
+		major = hvirq_major;
+	else
+		major = 3;
 
-	spin_lock_irqsave(&irq_alloc_lock, flags);
+	hv_error = sun4v_hvapi_register(HV_GRP_INTR, major, &minor);
+	if (!hv_error)
+		hv_irq_version = major;
+	else
+		hv_irq_version = 1;
 
-	for (ent = 1; ent < NR_IRQS; ent++) {
-		if (!irq_table[ent].in_use)
+	pr_info("SUN4V: Using IRQ API major %d, cookie only virqs %s\n",
+		hv_irq_version,
+		sun4v_cookie_only_virqs() ? "enabled" : "disabled");
+}
+
+/* This function is for the timer interrupt.*/
+int __init arch_probe_nr_irqs(void)
+{
+	return 1;
+}
+
+#define DEFAULT_NUM_IVECS	(0xfffU)
+static unsigned int nr_ivec = DEFAULT_NUM_IVECS;
+#define NUM_IVECS (nr_ivec)
+
+static unsigned int __init size_nr_ivec(void)
+{
+	if (tlb_type == hypervisor) {
+		switch (sun4v_chip_type) {
+		/* Athena's devhandle|devino is large.*/
+		case SUN4V_CHIP_SPARC64X:
+			nr_ivec = 0xffff;
 			break;
+		}
 	}
-	if (ent >= NR_IRQS) {
-		printk(KERN_ERR "IRQ: Out of virtual IRQs.\n");
-		ent = 0;
-	} else {
-		irq_table[ent].dev_handle = dev_handle;
-		irq_table[ent].dev_ino = dev_ino;
-		irq_table[ent].in_use = 1;
-	}
+	return nr_ivec;
+}
+
+struct irq_handler_data {
+	union {
+		struct {
+			unsigned int dev_handle;
+			unsigned int dev_ino;
+		};
+		unsigned long sysino;
+	};
+	struct ino_bucket bucket;
+	unsigned long	iclr;
+	unsigned long	imap;
+};
+
+static inline unsigned int irq_data_to_handle(struct irq_data *data)
+{
+	struct irq_handler_data *ihd = data->handler_data;
+
+	return ihd->dev_handle;
+}
+
+static inline unsigned int irq_data_to_ino(struct irq_data *data)
+{
+	struct irq_handler_data *ihd = data->handler_data;
 
-	spin_unlock_irqrestore(&irq_alloc_lock, flags);
+	return ihd->dev_ino;
+}
+
+static inline unsigned long irq_data_to_sysino(struct irq_data *data)
+{
+	struct irq_handler_data *ihd = data->handler_data;
 
-	return ent;
+	return ihd->sysino;
 }
 
-#ifdef CONFIG_PCI_MSI
 void irq_free(unsigned int irq)
 {
-	unsigned long flags;
+	void *data = irq_get_handler_data(irq);
 
-	if (irq >= NR_IRQS)
-		return;
+	kfree(data);
+	irq_set_handler_data(irq, NULL);
+	irq_free_descs(irq, 1);
+}
 
-	spin_lock_irqsave(&irq_alloc_lock, flags);
+unsigned int irq_alloc(unsigned int dev_handle, unsigned int dev_ino)
+{
+	int irq;
 
-	irq_table[irq].in_use = 0;
+	irq = __irq_alloc_descs(-1, 1, 1, numa_node_id(), NULL);
+	if (irq <= 0)
+		goto out;
 
-	spin_unlock_irqrestore(&irq_alloc_lock, flags);
+	return irq;
+out:
+	return 0;
+}
+
+static unsigned int cookie_exists(u32 devhandle, unsigned int devino)
+{
+	unsigned long hv_err, cookie;
+	struct ino_bucket *bucket;
+	unsigned int irq = 0U;
+
+	hv_err = sun4v_vintr_get_cookie(devhandle, devino, &cookie);
+	if (hv_err) {
+		pr_err("HV get cookie failed hv_err = %ld\n", hv_err);
+		goto out;
+	}
+
+	if (cookie & ((1UL << 63UL))) {
+		cookie = ~cookie;
+		bucket = (struct ino_bucket *) __va(cookie);
+		irq = bucket->__irq;
+	}
+out:
+	return irq;
+}
+
+static unsigned int sysino_exists(u32 devhandle, unsigned int devino)
+{
+	unsigned long sysino = sun4v_devino_to_sysino(devhandle, devino);
+	struct ino_bucket *bucket;
+	unsigned int irq;
+
+	bucket = &ivector_table[sysino];
+	irq = bucket_get_irq(__pa(bucket));
+
+	return irq;
+}
+
+void ack_bad_irq(unsigned int irq)
+{
+	pr_crit("BAD IRQ ack %d\n", irq);
+}
+
+void irq_install_pre_handler(int irq,
+			     void (*func)(unsigned int, void *, void *),
+			     void *arg1, void *arg2)
+{
+	pr_warn("IRQ pre handler NOT supported.\n");
 }
-#endif
 
 /*
  * /proc/interrupts printing:
@@ -206,15 +345,6 @@ static unsigned int sun4u_compute_tid(unsigned long imap, unsigned long cpuid)
 	return tid;
 }
 
-struct irq_handler_data {
-	unsigned long	iclr;
-	unsigned long	imap;
-
-	void		(*pre_handler)(unsigned int, void *, void *);
-	void		*arg1;
-	void		*arg2;
-};
-
 #ifdef CONFIG_SMP
 static int irq_choose_cpu(unsigned int irq, const struct cpumask *affinity)
 {
@@ -316,8 +446,8 @@ static void sun4u_irq_eoi(struct irq_data *data)
 
 static void sun4v_irq_enable(struct irq_data *data)
 {
-	unsigned int ino = irq_table[data->irq].dev_ino;
 	unsigned long cpuid = irq_choose_cpu(data->irq, data->affinity);
+	unsigned int ino = irq_data_to_sysino(data);
 	int err;
 
 	err = sun4v_intr_settarget(ino, cpuid);
@@ -337,8 +467,8 @@ static void sun4v_irq_enable(struct irq_data *data)
 static int sun4v_set_affinity(struct irq_data *data,
 			       const struct cpumask *mask, bool force)
 {
-	unsigned int ino = irq_table[data->irq].dev_ino;
 	unsigned long cpuid = irq_choose_cpu(data->irq, mask);
+	unsigned int ino = irq_data_to_sysino(data);
 	int err;
 
 	err = sun4v_intr_settarget(ino, cpuid);
@@ -351,7 +481,7 @@ static int sun4v_set_affinity(struct irq_data *data,
 
 static void sun4v_irq_disable(struct irq_data *data)
 {
-	unsigned int ino = irq_table[data->irq].dev_ino;
+	unsigned int ino = irq_data_to_sysino(data);
 	int err;
 
 	err = sun4v_intr_setenabled(ino, HV_INTR_DISABLED);
@@ -362,7 +492,7 @@ static void sun4v_irq_disable(struct irq_data *data)
 
 static void sun4v_irq_eoi(struct irq_data *data)
 {
-	unsigned int ino = irq_table[data->irq].dev_ino;
+	unsigned int ino = irq_data_to_sysino(data);
 	int err;
 
 	err = sun4v_intr_setstate(ino, HV_INTR_STATE_IDLE);
@@ -373,14 +503,13 @@ static void sun4v_irq_eoi(struct irq_data *data)
 
 static void sun4v_virq_enable(struct irq_data *data)
 {
-	unsigned long cpuid, dev_handle, dev_ino;
+	unsigned long dev_handle = irq_data_to_handle(data);
+	unsigned long dev_ino = irq_data_to_ino(data);
+	unsigned long cpuid;
 	int err;
 
 	cpuid = irq_choose_cpu(data->irq, data->affinity);
 
-	dev_handle = irq_table[data->irq].dev_handle;
-	dev_ino = irq_table[data->irq].dev_ino;
-
 	err = sun4v_vintr_set_target(dev_handle, dev_ino, cpuid);
 	if (err != HV_EOK)
 		printk(KERN_ERR "sun4v_vintr_set_target(%lx,%lx,%lu): "
@@ -403,14 +532,13 @@ static void sun4v_virq_enable(struct irq_data *data)
 static int sun4v_virt_set_affinity(struct irq_data *data,
 				    const struct cpumask *mask, bool force)
 {
-	unsigned long cpuid, dev_handle, dev_ino;
+	unsigned long dev_handle = irq_data_to_handle(data);
+	unsigned long dev_ino = irq_data_to_ino(data);
+	unsigned long cpuid;
 	int err;
 
 	cpuid = irq_choose_cpu(data->irq, mask);
 
-	dev_handle = irq_table[data->irq].dev_handle;
-	dev_ino = irq_table[data->irq].dev_ino;
-
 	err = sun4v_vintr_set_target(dev_handle, dev_ino, cpuid);
 	if (err != HV_EOK)
 		printk(KERN_ERR "sun4v_vintr_set_target(%lx,%lx,%lu): "
@@ -422,11 +550,10 @@ static int sun4v_virt_set_affinity(struct irq_data *data,
 
 static void sun4v_virq_disable(struct irq_data *data)
 {
-	unsigned long dev_handle, dev_ino;
+	unsigned long dev_handle = irq_data_to_handle(data);
+	unsigned long dev_ino = irq_data_to_ino(data);
 	int err;
 
-	dev_handle = irq_table[data->irq].dev_handle;
-	dev_ino = irq_table[data->irq].dev_ino;
 
 	err = sun4v_vintr_set_valid(dev_handle, dev_ino,
 				    HV_INTR_DISABLED);
@@ -438,12 +565,10 @@ static void sun4v_virq_disable(struct irq_data *data)
 
 static void sun4v_virq_eoi(struct irq_data *data)
 {
-	unsigned long dev_handle, dev_ino;
+	unsigned long dev_handle = irq_data_to_handle(data);
+	unsigned long dev_ino = irq_data_to_ino(data);
 	int err;
 
-	dev_handle = irq_table[data->irq].dev_handle;
-	dev_ino = irq_table[data->irq].dev_ino;
-
 	err = sun4v_vintr_set_state(dev_handle, dev_ino,
 				    HV_INTR_STATE_IDLE);
 	if (err != HV_EOK)
@@ -479,31 +604,10 @@ static struct irq_chip sun4v_virq = {
 	.flags			= IRQCHIP_EOI_IF_HANDLED,
 };
 
-static void pre_flow_handler(struct irq_data *d)
-{
-	struct irq_handler_data *handler_data = irq_data_get_irq_handler_data(d);
-	unsigned int ino = irq_table[d->irq].dev_ino;
-
-	handler_data->pre_handler(ino, handler_data->arg1, handler_data->arg2);
-}
-
-void irq_install_pre_handler(int irq,
-			     void (*func)(unsigned int, void *, void *),
-			     void *arg1, void *arg2)
-{
-	struct irq_handler_data *handler_data = irq_get_handler_data(irq);
-
-	handler_data->pre_handler = func;
-	handler_data->arg1 = arg1;
-	handler_data->arg2 = arg2;
-
-	__irq_set_preflow_handler(irq, pre_flow_handler);
-}
-
 unsigned int build_irq(int inofixup, unsigned long iclr, unsigned long imap)
 {
-	struct ino_bucket *bucket;
 	struct irq_handler_data *handler_data;
+	struct ino_bucket *bucket;
 	unsigned int irq;
 	int ino;
 
@@ -537,119 +641,166 @@ out:
 	return irq;
 }
 
-static unsigned int sun4v_build_common(unsigned long sysino,
-				       struct irq_chip *chip)
+static unsigned int sun4v_build_common(u32 devhandle, unsigned int devino,
+		void (*handler_data_init)(struct irq_handler_data *data,
+		u32 devhandle, unsigned int devino),
+		struct irq_chip *chip)
 {
-	struct ino_bucket *bucket;
-	struct irq_handler_data *handler_data;
+	struct irq_handler_data *data;
 	unsigned int irq;
 
-	BUG_ON(tlb_type != hypervisor);
+	irq = irq_alloc(devhandle, devino);
+	if (!irq)
+		goto out;
 
-	bucket = &ivector_table[sysino];
-	irq = bucket_get_irq(__pa(bucket));
-	if (!irq) {
-		irq = irq_alloc(0, sysino);
-		bucket_set_irq(__pa(bucket), irq);
-		irq_set_chip_and_handler_name(irq, chip, handle_fasteoi_irq,
-					      "IVEC");
+	data = kzalloc(sizeof(struct irq_handler_data), GFP_ATOMIC);
+	if (unlikely(!data)) {
+		pr_err("IRQ handler data allocation failed.\n");
+		irq_free(irq);
+		irq = 0;
+		goto out;
 	}
 
-	handler_data = irq_get_handler_data(irq);
-	if (unlikely(handler_data))
-		goto out;
+	irq_set_handler_data(irq, data);
+	handler_data_init(data, devhandle, devino);
+	irq_set_chip_and_handler_name(irq, chip, handle_fasteoi_irq, "IVEC");
+	data->imap = ~0UL;
+	data->iclr = ~0UL;
+out:
+	return irq;
+}
 
-	handler_data = kzalloc(sizeof(struct irq_handler_data), GFP_ATOMIC);
-	if (unlikely(!handler_data)) {
-		prom_printf("IRQ: kzalloc(irq_handler_data) failed.\n");
-		prom_halt();
-	}
-	irq_set_handler_data(irq, handler_data);
+static unsigned long cookie_assign(unsigned int irq, u32 devhandle,
+		unsigned int devino)
+{
+	struct irq_handler_data *ihd = irq_get_handler_data(irq);
+	unsigned long hv_error, cookie;
 
-	/* Catch accidental accesses to these things.  IMAP/ICLR handling
-	 * is done by hypervisor calls on sun4v platforms, not by direct
-	 * register accesses.
+	/* handler_irq needs to find the irq. cookie is seen signed in
+	 * sun4v_dev_mondo and treated as a non ivector_table delivery.
 	 */
-	handler_data->imap = ~0UL;
-	handler_data->iclr = ~0UL;
+	ihd->bucket.__irq = irq;
+	cookie = ~__pa(&ihd->bucket);
 
-out:
-	return irq;
+	hv_error = sun4v_vintr_set_cookie(devhandle, devino, cookie);
+	if (hv_error)
+		pr_err("HV vintr set cookie failed = %ld\n", hv_error);
+
+	return hv_error;
 }
 
-unsigned int sun4v_build_irq(u32 devhandle, unsigned int devino)
+static void cookie_handler_data(struct irq_handler_data *data,
+				u32 devhandle, unsigned int devino)
 {
-	unsigned long sysino = sun4v_devino_to_sysino(devhandle, devino);
+	data->dev_handle = devhandle;
+	data->dev_ino = devino;
+}
 
-	return sun4v_build_common(sysino, &sun4v_irq);
+static unsigned int cookie_build_irq(u32 devhandle, unsigned int devino,
+				     struct irq_chip *chip)
+{
+	unsigned long hv_error;
+	unsigned int irq;
+
+	irq = sun4v_build_common(devhandle, devino, cookie_handler_data, chip);
+
+	hv_error = cookie_assign(irq, devhandle, devino);
+	if (hv_error) {
+		irq_free(irq);
+		irq = 0;
+	}
+
+	return irq;
 }
 
-unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino)
+static unsigned int sun4v_build_cookie(u32 devhandle, unsigned int devino)
 {
-	struct irq_handler_data *handler_data;
-	unsigned long hv_err, cookie;
-	struct ino_bucket *bucket;
 	unsigned int irq;
 
-	bucket = kzalloc(sizeof(struct ino_bucket), GFP_ATOMIC);
-	if (unlikely(!bucket))
-		return 0;
+	irq = cookie_exists(devhandle, devino);
+	if (irq)
+		goto out;
 
-	/* The only reference we store to the IRQ bucket is
-	 * by physical address which kmemleak can't see, tell
-	 * it that this object explicitly is not a leak and
-	 * should be scanned.
-	 */
-	kmemleak_not_leak(bucket);
+	irq = cookie_build_irq(devhandle, devino, &sun4v_virq);
 
-	__flush_dcache_range((unsigned long) bucket,
-			     ((unsigned long) bucket +
-			      sizeof(struct ino_bucket)));
+out:
+	return irq;
+}
 
-	irq = irq_alloc(devhandle, devino);
+static void sysino_set_bucket(unsigned int irq)
+{
+	struct irq_handler_data *ihd = irq_get_handler_data(irq);
+	struct ino_bucket *bucket;
+	unsigned long sysino;
+
+	sysino = sun4v_devino_to_sysino(ihd->dev_handle, ihd->dev_ino);
+	BUG_ON(sysino >= nr_ivec);
+	bucket = &ivector_table[sysino];
 	bucket_set_irq(__pa(bucket), irq);
+}
 
-	irq_set_chip_and_handler_name(irq, &sun4v_virq, handle_fasteoi_irq,
-				      "IVEC");
+static void sysino_handler_data(struct irq_handler_data *data,
+				u32 devhandle, unsigned int devino)
+{
+	unsigned long sysino;
 
-	handler_data = kzalloc(sizeof(struct irq_handler_data), GFP_ATOMIC);
-	if (unlikely(!handler_data))
-		return 0;
+	sysino = sun4v_devino_to_sysino(devhandle, devino);
+	data->sysino = sysino;
+}
 
-	/* In order to make the LDC channel startup sequence easier,
-	 * especially wrt. locking, we do not let request_irq() enable
-	 * the interrupt.
-	 */
-	irq_set_status_flags(irq, IRQ_NOAUTOEN);
-	irq_set_handler_data(irq, handler_data);
+static unsigned int sysino_build_irq(u32 devhandle, unsigned int devino,
+				     struct irq_chip *chip)
+{
+	unsigned int irq;
 
-	/* Catch accidental accesses to these things.  IMAP/ICLR handling
-	 * is done by hypervisor calls on sun4v platforms, not by direct
-	 * register accesses.
-	 */
-	handler_data->imap = ~0UL;
-	handler_data->iclr = ~0UL;
+	irq = sun4v_build_common(devhandle, devino, sysino_handler_data, chip);
+	if (!irq)
+		goto out;
 
-	cookie = ~__pa(bucket);
-	hv_err = sun4v_vintr_set_cookie(devhandle, devino, cookie);
-	if (hv_err) {
-		prom_printf("IRQ: Fatal, cannot set cookie for [%x:%x] "
-			    "err=%lu\n", devhandle, devino, hv_err);
-		prom_halt();
-	}
+	sysino_set_bucket(irq);
+out:
+	return irq;
+}
 
+static int sun4v_build_sysino(u32 devhandle, unsigned int devino)
+{
+	int irq;
+
+	irq = sysino_exists(devhandle, devino);
+	if (irq)
+		goto out;
+
+	irq = sysino_build_irq(devhandle, devino, &sun4v_irq);
+out:
 	return irq;
 }
 
-void ack_bad_irq(unsigned int irq)
+unsigned int sun4v_build_irq(u32 devhandle, unsigned int devino)
 {
-	unsigned int ino = irq_table[irq].dev_ino;
+	unsigned int irq;
 
-	if (!ino)
-		ino = 0xdeadbeef;
+	if (sun4v_cookie_only_virqs())
+		irq = sun4v_build_cookie(devhandle, devino);
+	else
+		irq = sun4v_build_sysino(devhandle, devino);
 
-	printk(KERN_CRIT "Unexpected IRQ from ino[%x] irq[%u]\n",
-	       ino, irq);
+	return irq;
+}
+
+unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino)
+{
+	int irq;
+
+	irq = cookie_build_irq(devhandle, devino, &sun4v_virq);
+	if (!irq)
+		goto out;
+
+	/* This is borrowed from the original function.
+	 */
+	irq_set_status_flags(irq, IRQ_NOAUTOEN);
+
+out:
+	return irq;
 }
 
 void *hardirq_stack[NR_CPUS];
@@ -720,9 +871,12 @@ void fixup_irqs(void)
 
 	for (irq = 0; irq < NR_IRQS; irq++) {
 		struct irq_desc *desc = irq_to_desc(irq);
-		struct irq_data *data = irq_desc_get_irq_data(desc);
+		struct irq_data *data;
 		unsigned long flags;
 
+		if (!desc)
+			continue;
+		data = irq_desc_get_irq_data(desc);
 		raw_spin_lock_irqsave(&desc->lock, flags);
 		if (desc->action && !irqd_is_per_cpu(data)) {
 			if (data->chip->irq_set_affinity)
@@ -922,16 +1076,22 @@ static struct irqaction timer_irq_action = {
 	.name = "timer",
 };
 
-/* Only invoked on boot processor. */
-void __init init_IRQ(void)
+static void __init irq_ivector_init(void)
 {
-	unsigned long size;
+	unsigned long size, order;
+	unsigned int ivecs;
 
-	map_prom_timers();
-	kill_prom_timer();
+	/* If we are doing cookie only VIRQs then we do not need the ivector
+	 * table to process interrupts.
+	 */
+	if (sun4v_cookie_only_virqs())
+		return;
 
-	size = sizeof(struct ino_bucket) * NUM_IVECS;
-	ivector_table = kzalloc(size, GFP_KERNEL);
+	ivecs = size_nr_ivec();
+	size = sizeof(struct ino_bucket) * ivecs;
+	order = get_order(size);
+	ivector_table = (struct ino_bucket *)
+		__get_free_pages(GFP_KERNEL | __GFP_ZERO, order);
 	if (!ivector_table) {
 		prom_printf("Fatal error, cannot allocate ivector_table\n");
 		prom_halt();
@@ -940,6 +1100,15 @@ void __init init_IRQ(void)
 			     ((unsigned long) ivector_table) + size);
 
 	ivector_table_pa = __pa(ivector_table);
+}
+
+/* Only invoked on boot processor.*/
+void __init init_IRQ(void)
+{
+	irq_init_hv();
+	irq_ivector_init();
+	map_prom_timers();
+	kill_prom_timer();
 
 	if (tlb_type == hypervisor)
 		sun4v_init_mondo_queues();
-- 
1.9.1


  parent reply	other threads:[~2014-11-06 23:08 UTC|newest]

Thread overview: 170+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-06 22:34 [3.13.y.z extended stable] Linux 3.13.11.11 stable review Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 001/162] netlink: reset network header before passing to taps Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 002/162] rtnetlink: fix VF info size Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 003/162] myri10ge: check for DMA mapping errors Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 004/162] tcp: don't use timestamp from repaired skb-s to calculate RTT (v2) Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 005/162] sit: Fix ipip6_tunnel_lookup device matching criteria Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 006/162] tcp: fix tcp_release_cb() to dispatch via address family for mtu_reduced() Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 007/162] tcp: fix ssthresh and undo for consecutive short FRTO episodes Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 008/162] packet: handle too big packets for PACKET_V3 Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 009/162] openvswitch: fix panic with multiple vlan headers Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 010/162] vxlan: fix incorrect initializer in union vxlan_addr Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 011/162] l2tp: fix race while getting PMTU on PPP pseudo-wire Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 012/162] bonding: fix div by zero while enslaving and transmitting Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 013/162] bridge: Check if vlan filtering is enabled only once Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 014/162] bridge: Fix br_should_learn to check vlan_enabled Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 015/162] net: allow macvlans to move to net namespace Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 016/162] tg3: Work around HW/FW limitations with vlan encapsulated frames Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 017/162] tg3: Allow for recieve of full-size 8021AD frames Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 018/162] xfrm: Generate blackhole routes only from route lookup functions Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 019/162] xfrm: Generate queueing " Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 020/162] macvtap: Fix race between device delete and open Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 021/162] Revert "net/macb: add pinctrl consumer support" Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 022/162] gro: fix aggregation for skb using frag_list Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 023/162] hyperv: Fix a bug in netvsc_start_xmit() Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 024/162] ip6_gre: fix flowi6_proto value in xmit path Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 025/162] team: avoid race condition in scheduling delayed work Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 026/162] sctp: handle association restarts when the socket is closed Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 027/162] tcp: fixing TLP's FIN recovery Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 028/162] sparc64: Do not disable interrupts in nmi_cpu_busy() Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 029/162] sparc64: Fix pcr_ops initialization and usage bugs Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 030/162] sparc32: dma_alloc_coherent must honour gfp flags Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 031/162] sparc64: sun4v TLB error power off events Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 032/162] sparc64: Fix corrupted thread fault code Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 033/162] sparc64: find_node adjustment Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 034/162] sparc64: Move request_irq() from ldc_bind() to ldc_alloc() Kamal Mostafa
2014-11-06 22:34 ` [PATCH 3.13 035/162] sparc: Let memset return the address argument Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 036/162] sparc64: Fix reversed start/end in flush_tlb_kernel_range() Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 037/162] sparc64: Fix lockdep warnings on reboot on Ultra-5 Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 038/162] sparc64: Fix FPU register corruption with AES crypto offload Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 039/162] sparc64: Do not define thread fpregs save area as zero-length array Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 040/162] sparc64: Fix hibernation code refrence to PAGE_OFFSET Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 041/162] sparc64: correctly recognise M6 and M7 cpu type Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 042/162] sparc64: support M6 and M7 for building CPU distribution map Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 043/162] sparc64: cpu hardware caps support for sparc M6 and M7 Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 044/162] sparc64: T5 PMU Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 045/162] sparc64: Switch to 4-level page tables Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 046/162] sparc64: Define VA hole at run time, rather than at compile time Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 047/162] sparc64: Adjust KTSB assembler to support larger physical addresses Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 048/162] sparc64: Fix physical memory management regressions with large max_phys_bits Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 049/162] sparc64: Use kernel page tables for vmemmap Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 050/162] sparc64: Increase MAX_PHYS_ADDRESS_BITS to 53 Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 051/162] sparc64: Adjust vmalloc region size based upon available virtual address bits Kamal Mostafa
2014-11-06 22:35 ` Kamal Mostafa [this message]
2014-11-06 22:35 ` [PATCH 3.13 053/162] sparc64: Kill unnecessary tables and increase MAX_BANKS Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 054/162] sparc64: Increase size of boot string to 1024 bytes Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 055/162] sparc64: Fix register corruption in top-most kernel stack frame during boot Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 056/162] sparc64: Implement __get_user_pages_fast() Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 057/162] ext4: check EA value offset when loading Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 058/162] jbd2: free bh when descriptor block checksum fails Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 059/162] ext4: don't check quota format when there are no quota files Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 060/162] target: Fix queue full status NULL pointer for SCF_TRANSPORT_TASK_SENSE Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 061/162] vfs: fix data corruption when blocksize < pagesize for mmaped data Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 062/162] ext4: fix mmap data corruption when blocksize < pagesize Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 063/162] ext4: grab missed write_count for EXT4_IOC_SWAP_BOOT Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 064/162] qla_target: don't delete changed nacls Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 065/162] target: Fix APTPL metadata handling for dynamic MappedLUNs Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 066/162] iser-target: Disable TX completion interrupt coalescing Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 067/162] ext4: don't orphan or truncate the boot loader inode Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 068/162] ext4: add ext4_iget_normal() which is to be used for dir tree lookups Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 069/162] ext4: fix reservation overflow in ext4_da_write_begin Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 070/162] ext4: Replace open coded mdata csum feature to helper function Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 071/162] ext4: move error report out of atomic context in ext4_init_block_bitmap() Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 072/162] ARC: [nsimosci] Allow "headless" models to boot Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 073/162] ARC: Update order of registers in KGDB to match GDB 7.5 Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 074/162] ext4: check s_chksum_driver when looking for bg csum presence Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 075/162] drm/radeon: fix speaker allocation setup Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 076/162] drm/radeon: use gart memory for DMA ring tests Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 077/162] compiler: define OPTIMIZER_HIDE_VAR() macro Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 078/162] random: add and use memzero_explicit() for clearing data Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 079/162] ALSA: pcm: use the same dma mmap codepath both for arm and arm64 Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 080/162] ALSA: ALC283 codec - Avoid pop noise on headphones during suspend/resume Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 081/162] ALSA: usb-audio: Add support for Steinberg UR22 USB interface Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 082/162] ALSA: hda - hdmi: Fix missing ELD change event on plug/unplug Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 083/162] arm64: compat: fix compat types affecting struct compat_elf_prpsinfo Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 084/162] freezer: Do not freeze tasks killed by OOM killer Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 085/162] OOM, PM: OOM killed task shouldn't escape PM suspend Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 086/162] qxl: don't create too large primary surface Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 087/162] MIPS: tlbex: Properly fix HUGE TLB Refill exception handler Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 088/162] drm/cirrus: bind also to qemu-xen-traditional Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 089/162] cpufreq: intel_pstate: Fix setting max_perf_pct in performance policy Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 090/162] cpufreq: expose scaling_cur_freq sysfs file for set_policy() drivers Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 091/162] cpufreq: intel_pstate: Reflect current no_turbo state correctly Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 092/162] intel_pstate: Don't lose sysfs settings during cpu offline Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 093/162] intel_pstate: Fix BYT frequency reporting Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 094/162] intel_pstate: Correct BYT VID values Kamal Mostafa
2014-11-06 22:35 ` [PATCH 3.13 095/162] MIPS: ftrace: Fix a microMIPS build problem Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 096/162] KVM: x86: Check non-canonical addresses upon WRMSR Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 097/162] KVM: x86: Prevent host from panicking on shared MSR writes Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 098/162] KVM: x86: Improve thread safety in pit Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 099/162] KVM: x86: Fix wrong masking on relative jump/call Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 100/162] KVM: x86: Emulator fixes for eip canonical checks on near branches Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 101/162] kvm: vmx: handle invvpid vm exit gracefully Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 102/162] kvm: x86: don't kill guest on unknown exit reason Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 103/162] kvm: fix excessive pages un-pinning in kvm_iommu_map error path Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 104/162] KVM: x86: use new CS.RPL as CPL during task switch Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 105/162] KVM: x86: Handle errors when RIP is set during far jumps Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 106/162] KVM: x86: Fix far-jump to non-canonical check Kamal Mostafa
2014-12-29 23:58   ` Vinson Lee
2014-12-30 22:27     ` Nadav Amit
2015-01-13 18:38       ` Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 107/162] staging:iio:ad5933: Fix NULL pointer deref when enabling buffer Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 108/162] staging:iio:ad5933: Drop "raw" from channel names Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 109/162] iio: st_sensors: Fix buffer copy Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 110/162] iio: mxs-lradc: Propagate the real error code on platform_get_irq() failure Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 111/162] iio: adc: mxs-lradc: Disable the clock on probe failure Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 112/162] spi: pl022: Fix incorrect dma_unmap_sg Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 113/162] mac80211: fix typo in starting baserate for rts_cts_rate_idx Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 114/162] usb: dwc3: gadget: fix set_halt() bug with pending transfers Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 115/162] usb: gadget: function: acm: make f_acm pass USB20CV Chapter9 Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 116/162] ext3: Don't check quota format when there are no quota files Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 117/162] quota: Properly return errors from dquot_writeback_dquots() Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 118/162] USB: serial: cp210x: add Silicon Labs 358x VID and PID Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 119/162] usb: serial: ftdi_sio: add Awinda Station and Dongle products Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 120/162] usb: option: add support for Telit LE910 Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 121/162] USB: option: add Haier CE81B CDMA modem Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 122/162] x86, apic: Handle a bad TSC more gracefully Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 123/162] i3200_edac: Report CE events properly Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 124/162] i82860_edac: " Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 125/162] cpc925_edac: Report UE " Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 126/162] e7xxx_edac: Report CE " Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 127/162] scsi: Fix error handling in SCSI_IOCTL_SEND_COMMAND Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 128/162] usb: serial: ftdi_sio: add "bricked" FTDI device PID Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 129/162] usb: musb: cppi41: restart hrtimer only if not yet done Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 130/162] usb: gadget: udc: core: fix kernel oops with soft-connect Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 131/162] nfsd4: fix crash on unknown operation number Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 132/162] iwlwifi: configure the LTR Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 133/162] mac80211: add vif to flush call Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 134/162] iwlwifi: dvm: drop non VO frames when flushing Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 135/162] Revert "iwlwifi: mvm: treat EAPOLs like mgmt frames wrt rate" Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 136/162] usb: dwc3: gadget: Properly initialize LINK TRB Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 137/162] Input: i8042 - quirks for Fujitsu Lifebook A544 and Lifebook AH544 Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 138/162] posix-timers: Fix stack info leak in timer_create() Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 139/162] futex: Fix a race condition between REQUEUE_PI and task death Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 140/162] PM / Sleep: fix recovery during resuming from hibernation Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 141/162] ALSA: pcm: Zero-clear reserved fields of PCM status ioctl in compat mode Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 142/162] ima: check xattr value length and type in the ima_inode_setxattr() Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 143/162] evm: check xattr value length and type in evm_inode_setxattr() Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 144/162] drm/radeon/dpm: disable ulv support on SI Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 145/162] drm/radeon: dpm fixes for asrock systems Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 146/162] drm/radeon: remove invalid pci id Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 147/162] x86, pageattr: Prevent overflow in slow_virt_to_phys() for X86_PAE Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 148/162] cgroup/kmemleak: add kmemleak_free() for cgroup deallocations Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 149/162] mm: free compound page with correct order Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 150/162] mm, thp: fix collapsing of hugepages on madvise Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 151/162] lib/bitmap.c: fix undefined shift in __bitmap_shift_{left|right}() Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 152/162] ext4: fix overflow when updating superblock backups after resize Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 153/162] ext4: fix oops when loading block bitmap failed Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 154/162] ext4: enable journal checksum when metadata checksum feature enabled Kamal Mostafa
2014-11-06 22:36 ` [PATCH 3.13 155/162] ext4: bail out from make_indexed_dir() on first error Kamal Mostafa
2014-11-06 22:37 ` [PATCH 3.13 156/162] PCI: Rename sysfs 'enabled' file back to 'enable' Kamal Mostafa
2014-11-06 22:37 ` [PATCH 3.13 157/162] wireless: rt2x00: add new rt2800usb device Kamal Mostafa
2014-11-06 22:37 ` [PATCH 3.13 158/162] fs: allow open(dir, O_TMPFILE|..., 0) with mode 0 Kamal Mostafa
2014-11-06 22:37 ` [PATCH 3.13 159/162] tracing/syscalls: Ignore numbers outside NR_syscalls' range Kamal Mostafa
2014-11-06 22:37 ` [PATCH 3.13 160/162] x86_64, entry: Fix out of bounds read on sysenter Kamal Mostafa
2014-11-06 22:37 ` [PATCH 3.13 161/162] ACPI / EC: Add support to disallow QR_EC to be issued when SCI_EVT isn't set Kamal Mostafa
2014-11-06 22:37 ` [PATCH 3.13 162/162] ACPI / EC: Fix regression due to conflicting firmware behavior between Samsung and Acer Kamal Mostafa
2014-11-07 17:29 ` [PATCH 3.13 115/165 corrected] usb: gadget: function: acm: make f_acm pass USB20CV Chapter9 Kamal Mostafa
2014-11-07 17:29 ` [PATCH 3.13 163/165] net: sctp: fix skb_over_panic when receiving malformed ASCONF chunks Kamal Mostafa
2014-11-07 17:29 ` [PATCH 3.13 164/165] net: sctp: fix panic on duplicate " Kamal Mostafa
2014-11-07 17:29 ` [PATCH 3.13 165/165] net: sctp: fix remote memory pressure from excessive queueing Kamal Mostafa

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=1415313426-9622-53-git-send-email-kamal@canonical.com \
    --to=kamal@canonical.com \
    --cc=bob.picco@oracle.com \
    --cc=davem@davemloft.net \
    --cc=kernel-team@lists.ubuntu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®