linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
To: paulus@samba.org, oleg@redhat.com, rusty@rustcorp.com.au,
	peterz@infradead.org, tglx@linutronix.de,
	akpm@linux-foundation.org
Cc: paulmck@linux.vnet.ibm.com, tj@kernel.org, walken@google.com,
	ego@linux.vnet.ibm.com, linux@arm.linux.org.uk,
	rjw@rjwysocki.net, linux-kernel@vger.kernel.org,
	linux-arch@vger.kernel.org, srivatsa.bhat@linux.vnet.ibm.com,
	Ursula Braun <ursula.braun@de.ibm.com>,
	Ingo Molnar <mingo@kernel.org>,
	linux-s390@vger.kernel.org, netdev@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>"Srivatsa S. Bhat"
	<srivatsa.bhat@linux.vnet.ibm.com>
Subject: [PATCH v2 52/52] net/iucv/iucv.c: Fix CPU hotplug callback registration
Date: Fri, 14 Feb 2014 13:30:58 +0530	[thread overview]
Message-ID: <20140214080057.22701.94737.stgit@srivatsabhat.in.ibm.com> (raw)
In-Reply-To: <20140214074750.22701.47330.stgit@srivatsabhat.in.ibm.com>

Subsystems that want to register CPU hotplug callbacks, as well as perform
initialization for the CPUs that are already online, often do it as shown
below:

	get_online_cpus();

	for_each_online_cpu(cpu)
		init_cpu(cpu);

	register_cpu_notifier(&foobar_cpu_notifier);

	put_online_cpus();

This is wrong, since it is prone to ABBA deadlocks involving the
cpu_add_remove_lock and the cpu_hotplug.lock (when running concurrently
with CPU hotplug operations).

Instead, the correct and race-free way of performing the callback
registration is:

	cpu_notifier_register_begin();

	for_each_online_cpu(cpu)
		init_cpu(cpu);

	/* Note the use of the double underscored version of the API */
	__register_cpu_notifier(&foobar_cpu_notifier);

	cpu_notifier_register_done();


Fix the code in net/iucv/iucv.c by using this latter form of callback
registration. Also, provide helper functions to perform the common memory
allocations and frees, to condense repetitive code.

Cc: Ursula Braun <ursula.braun@de.ibm.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: linux-s390@vger.kernel.org
Cc: netdev@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
---

 net/iucv/iucv.c |  121 ++++++++++++++++++++++++++-----------------------------
 1 file changed, 57 insertions(+), 64 deletions(-)

diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c
index cd5b8ec..79a0ce9 100644
--- a/net/iucv/iucv.c
+++ b/net/iucv/iucv.c
@@ -621,6 +621,42 @@ static void iucv_disable(void)
 	put_online_cpus();
 }
 
+static void free_iucv_data(int cpu)
+{
+	kfree(iucv_param_irq[cpu]);
+	iucv_param_irq[cpu] = NULL;
+	kfree(iucv_param[cpu]);
+	iucv_param[cpu] = NULL;
+	kfree(iucv_irq_data[cpu]);
+	iucv_irq_data[cpu] = NULL;
+}
+
+static int alloc_iucv_data(int cpu)
+{
+	/* Note: GFP_DMA used to get memory below 2G */
+	iucv_irq_data[cpu] = kmalloc_node(sizeof(struct iucv_irq_data),
+			     GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
+	if (!iucv_irq_data[cpu])
+		goto out_free;
+
+	/* Allocate parameter blocks. */
+	iucv_param[cpu] = kmalloc_node(sizeof(union iucv_param),
+			  GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
+	if (!iucv_param[cpu])
+		goto out_free;
+
+	iucv_param_irq[cpu] = kmalloc_node(sizeof(union iucv_param),
+			  GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
+	if (!iucv_param_irq[cpu])
+		goto out_free;
+
+	return 0;
+
+out_free:
+	free_iucv_data(cpu);
+	return -ENOMEM;
+}
+
 static int iucv_cpu_notify(struct notifier_block *self,
 				     unsigned long action, void *hcpu)
 {
@@ -630,38 +666,14 @@ static int iucv_cpu_notify(struct notifier_block *self,
 	switch (action) {
 	case CPU_UP_PREPARE:
 	case CPU_UP_PREPARE_FROZEN:
-		iucv_irq_data[cpu] = kmalloc_node(sizeof(struct iucv_irq_data),
-					GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_irq_data[cpu])
-			return notifier_from_errno(-ENOMEM);
-
-		iucv_param[cpu] = kmalloc_node(sizeof(union iucv_param),
-				     GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_param[cpu]) {
-			kfree(iucv_irq_data[cpu]);
-			iucv_irq_data[cpu] = NULL;
+		if (alloc_iucv_data(cpu))
 			return notifier_from_errno(-ENOMEM);
-		}
-		iucv_param_irq[cpu] = kmalloc_node(sizeof(union iucv_param),
-					GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_param_irq[cpu]) {
-			kfree(iucv_param[cpu]);
-			iucv_param[cpu] = NULL;
-			kfree(iucv_irq_data[cpu]);
-			iucv_irq_data[cpu] = NULL;
-			return notifier_from_errno(-ENOMEM);
-		}
 		break;
 	case CPU_UP_CANCELED:
 	case CPU_UP_CANCELED_FROZEN:
 	case CPU_DEAD:
 	case CPU_DEAD_FROZEN:
-		kfree(iucv_param_irq[cpu]);
-		iucv_param_irq[cpu] = NULL;
-		kfree(iucv_param[cpu]);
-		iucv_param[cpu] = NULL;
-		kfree(iucv_irq_data[cpu]);
-		iucv_irq_data[cpu] = NULL;
+		free_iucv_data(cpu);
 		break;
 	case CPU_ONLINE:
 	case CPU_ONLINE_FROZEN:
@@ -2025,33 +2037,20 @@ static int __init iucv_init(void)
 		goto out_int;
 	}
 
-	for_each_online_cpu(cpu) {
-		/* Note: GFP_DMA used to get memory below 2G */
-		iucv_irq_data[cpu] = kmalloc_node(sizeof(struct iucv_irq_data),
-				     GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_irq_data[cpu]) {
-			rc = -ENOMEM;
-			goto out_free;
-		}
+	cpu_notifier_register_begin();
 
-		/* Allocate parameter blocks. */
-		iucv_param[cpu] = kmalloc_node(sizeof(union iucv_param),
-				  GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_param[cpu]) {
-			rc = -ENOMEM;
-			goto out_free;
-		}
-		iucv_param_irq[cpu] = kmalloc_node(sizeof(union iucv_param),
-				  GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_param_irq[cpu]) {
+	for_each_online_cpu(cpu) {
+		if (alloc_iucv_data(cpu)) {
 			rc = -ENOMEM;
 			goto out_free;
 		}
-
 	}
-	rc = register_hotcpu_notifier(&iucv_cpu_notifier);
+	rc = __register_hotcpu_notifier(&iucv_cpu_notifier);
 	if (rc)
 		goto out_free;
+
+	cpu_notifier_register_done();
+
 	rc = register_reboot_notifier(&iucv_reboot_notifier);
 	if (rc)
 		goto out_cpu;
@@ -2069,16 +2068,14 @@ static int __init iucv_init(void)
 out_reboot:
 	unregister_reboot_notifier(&iucv_reboot_notifier);
 out_cpu:
-	unregister_hotcpu_notifier(&iucv_cpu_notifier);
+	cpu_notifier_register_begin();
+	__unregister_hotcpu_notifier(&iucv_cpu_notifier);
 out_free:
-	for_each_possible_cpu(cpu) {
-		kfree(iucv_param_irq[cpu]);
-		iucv_param_irq[cpu] = NULL;
-		kfree(iucv_param[cpu]);
-		iucv_param[cpu] = NULL;
-		kfree(iucv_irq_data[cpu]);
-		iucv_irq_data[cpu] = NULL;
-	}
+	for_each_possible_cpu(cpu)
+		free_iucv_data(cpu);
+
+	cpu_notifier_register_done();
+
 	root_device_unregister(iucv_root);
 out_int:
 	unregister_external_interrupt(0x4000, iucv_external_interrupt);
@@ -2105,15 +2102,11 @@ static void __exit iucv_exit(void)
 		kfree(p);
 	spin_unlock_irq(&iucv_queue_lock);
 	unregister_reboot_notifier(&iucv_reboot_notifier);
-	unregister_hotcpu_notifier(&iucv_cpu_notifier);
-	for_each_possible_cpu(cpu) {
-		kfree(iucv_param_irq[cpu]);
-		iucv_param_irq[cpu] = NULL;
-		kfree(iucv_param[cpu]);
-		iucv_param[cpu] = NULL;
-		kfree(iucv_irq_data[cpu]);
-		iucv_irq_data[cpu] = NULL;
-	}
+	cpu_notifier_register_begin();
+	__unregister_hotcpu_notifier(&iucv_cpu_notifier);
+	for_each_possible_cpu(cpu)
+		free_iucv_data(cpu);
+	cpu_notifier_register_done();
 	root_device_unregister(iucv_root);
 	bus_unregister(&iucv_bus);
 	unregister_external_interrupt(0x4000, iucv_external_interrupt);

WARNING: multiple messages have this Message-ID (diff)
From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
To: paulus@samba.org, oleg@redhat.com, mingo@kernel.org,
	rusty@rustcorp.com.au, peterz@infradead.org, tglx@linutronix.de,
	akpm@linux-foundation.org
Cc: paulmck@linux.vnet.ibm.com, tj@kernel.org, walken@google.com,
	ego@linux.vnet.ibm.com, linux@arm.linux.org.uk,
	rjw@rjwysocki.net, linux-kernel@vger.kernel.org,
	linux-arch@vger.kernel.org, srivatsa.bhat@linux.vnet.ibm.com,
	Ursula Braun <ursula.braun@de.ibm.com>,
	linux-s390@vger.kernel.org, netdev@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>"Srivatsa S. Bhat"
	<srivatsa.bhat@linux.vnet.ibm.com>
Subject: [PATCH v2 52/52] net/iucv/iucv.c: Fix CPU hotplug callback registration
Date: Fri, 14 Feb 2014 13:30:58 +0530	[thread overview]
Message-ID: <20140214080057.22701.94737.stgit@srivatsabhat.in.ibm.com> (raw)
Message-ID: <20140214080058.UJACZuAVCWQVE5r0VlDjTgMqf_lVVU3p82ZpHiTs124@z> (raw)
In-Reply-To: <20140214074750.22701.47330.stgit@srivatsabhat.in.ibm.com>

Subsystems that want to register CPU hotplug callbacks, as well as perform
initialization for the CPUs that are already online, often do it as shown
below:

	get_online_cpus();

	for_each_online_cpu(cpu)
		init_cpu(cpu);

	register_cpu_notifier(&foobar_cpu_notifier);

	put_online_cpus();

This is wrong, since it is prone to ABBA deadlocks involving the
cpu_add_remove_lock and the cpu_hotplug.lock (when running concurrently
with CPU hotplug operations).

Instead, the correct and race-free way of performing the callback
registration is:

	cpu_notifier_register_begin();

	for_each_online_cpu(cpu)
		init_cpu(cpu);

	/* Note the use of the double underscored version of the API */
	__register_cpu_notifier(&foobar_cpu_notifier);

	cpu_notifier_register_done();


Fix the code in net/iucv/iucv.c by using this latter form of callback
registration. Also, provide helper functions to perform the common memory
allocations and frees, to condense repetitive code.

Cc: Ursula Braun <ursula.braun@de.ibm.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: linux-s390@vger.kernel.org
Cc: netdev@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
---

 net/iucv/iucv.c |  121 ++++++++++++++++++++++++++-----------------------------
 1 file changed, 57 insertions(+), 64 deletions(-)

diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c
index cd5b8ec..79a0ce9 100644
--- a/net/iucv/iucv.c
+++ b/net/iucv/iucv.c
@@ -621,6 +621,42 @@ static void iucv_disable(void)
 	put_online_cpus();
 }
 
+static void free_iucv_data(int cpu)
+{
+	kfree(iucv_param_irq[cpu]);
+	iucv_param_irq[cpu] = NULL;
+	kfree(iucv_param[cpu]);
+	iucv_param[cpu] = NULL;
+	kfree(iucv_irq_data[cpu]);
+	iucv_irq_data[cpu] = NULL;
+}
+
+static int alloc_iucv_data(int cpu)
+{
+	/* Note: GFP_DMA used to get memory below 2G */
+	iucv_irq_data[cpu] = kmalloc_node(sizeof(struct iucv_irq_data),
+			     GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
+	if (!iucv_irq_data[cpu])
+		goto out_free;
+
+	/* Allocate parameter blocks. */
+	iucv_param[cpu] = kmalloc_node(sizeof(union iucv_param),
+			  GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
+	if (!iucv_param[cpu])
+		goto out_free;
+
+	iucv_param_irq[cpu] = kmalloc_node(sizeof(union iucv_param),
+			  GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
+	if (!iucv_param_irq[cpu])
+		goto out_free;
+
+	return 0;
+
+out_free:
+	free_iucv_data(cpu);
+	return -ENOMEM;
+}
+
 static int iucv_cpu_notify(struct notifier_block *self,
 				     unsigned long action, void *hcpu)
 {
@@ -630,38 +666,14 @@ static int iucv_cpu_notify(struct notifier_block *self,
 	switch (action) {
 	case CPU_UP_PREPARE:
 	case CPU_UP_PREPARE_FROZEN:
-		iucv_irq_data[cpu] = kmalloc_node(sizeof(struct iucv_irq_data),
-					GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_irq_data[cpu])
-			return notifier_from_errno(-ENOMEM);
-
-		iucv_param[cpu] = kmalloc_node(sizeof(union iucv_param),
-				     GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_param[cpu]) {
-			kfree(iucv_irq_data[cpu]);
-			iucv_irq_data[cpu] = NULL;
+		if (alloc_iucv_data(cpu))
 			return notifier_from_errno(-ENOMEM);
-		}
-		iucv_param_irq[cpu] = kmalloc_node(sizeof(union iucv_param),
-					GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_param_irq[cpu]) {
-			kfree(iucv_param[cpu]);
-			iucv_param[cpu] = NULL;
-			kfree(iucv_irq_data[cpu]);
-			iucv_irq_data[cpu] = NULL;
-			return notifier_from_errno(-ENOMEM);
-		}
 		break;
 	case CPU_UP_CANCELED:
 	case CPU_UP_CANCELED_FROZEN:
 	case CPU_DEAD:
 	case CPU_DEAD_FROZEN:
-		kfree(iucv_param_irq[cpu]);
-		iucv_param_irq[cpu] = NULL;
-		kfree(iucv_param[cpu]);
-		iucv_param[cpu] = NULL;
-		kfree(iucv_irq_data[cpu]);
-		iucv_irq_data[cpu] = NULL;
+		free_iucv_data(cpu);
 		break;
 	case CPU_ONLINE:
 	case CPU_ONLINE_FROZEN:
@@ -2025,33 +2037,20 @@ static int __init iucv_init(void)
 		goto out_int;
 	}
 
-	for_each_online_cpu(cpu) {
-		/* Note: GFP_DMA used to get memory below 2G */
-		iucv_irq_data[cpu] = kmalloc_node(sizeof(struct iucv_irq_data),
-				     GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_irq_data[cpu]) {
-			rc = -ENOMEM;
-			goto out_free;
-		}
+	cpu_notifier_register_begin();
 
-		/* Allocate parameter blocks. */
-		iucv_param[cpu] = kmalloc_node(sizeof(union iucv_param),
-				  GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_param[cpu]) {
-			rc = -ENOMEM;
-			goto out_free;
-		}
-		iucv_param_irq[cpu] = kmalloc_node(sizeof(union iucv_param),
-				  GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
-		if (!iucv_param_irq[cpu]) {
+	for_each_online_cpu(cpu) {
+		if (alloc_iucv_data(cpu)) {
 			rc = -ENOMEM;
 			goto out_free;
 		}
-
 	}
-	rc = register_hotcpu_notifier(&iucv_cpu_notifier);
+	rc = __register_hotcpu_notifier(&iucv_cpu_notifier);
 	if (rc)
 		goto out_free;
+
+	cpu_notifier_register_done();
+
 	rc = register_reboot_notifier(&iucv_reboot_notifier);
 	if (rc)
 		goto out_cpu;
@@ -2069,16 +2068,14 @@ static int __init iucv_init(void)
 out_reboot:
 	unregister_reboot_notifier(&iucv_reboot_notifier);
 out_cpu:
-	unregister_hotcpu_notifier(&iucv_cpu_notifier);
+	cpu_notifier_register_begin();
+	__unregister_hotcpu_notifier(&iucv_cpu_notifier);
 out_free:
-	for_each_possible_cpu(cpu) {
-		kfree(iucv_param_irq[cpu]);
-		iucv_param_irq[cpu] = NULL;
-		kfree(iucv_param[cpu]);
-		iucv_param[cpu] = NULL;
-		kfree(iucv_irq_data[cpu]);
-		iucv_irq_data[cpu] = NULL;
-	}
+	for_each_possible_cpu(cpu)
+		free_iucv_data(cpu);
+
+	cpu_notifier_register_done();
+
 	root_device_unregister(iucv_root);
 out_int:
 	unregister_external_interrupt(0x4000, iucv_external_interrupt);
@@ -2105,15 +2102,11 @@ static void __exit iucv_exit(void)
 		kfree(p);
 	spin_unlock_irq(&iucv_queue_lock);
 	unregister_reboot_notifier(&iucv_reboot_notifier);
-	unregister_hotcpu_notifier(&iucv_cpu_notifier);
-	for_each_possible_cpu(cpu) {
-		kfree(iucv_param_irq[cpu]);
-		iucv_param_irq[cpu] = NULL;
-		kfree(iucv_param[cpu]);
-		iucv_param[cpu] = NULL;
-		kfree(iucv_irq_data[cpu]);
-		iucv_irq_data[cpu] = NULL;
-	}
+	cpu_notifier_register_begin();
+	__unregister_hotcpu_notifier(&iucv_cpu_notifier);
+	for_each_possible_cpu(cpu)
+		free_iucv_data(cpu);
+	cpu_notifier_register_done();
 	root_device_unregister(iucv_root);
 	bus_unregister(&iucv_bus);
 	unregister_external_interrupt(0x4000, iucv_external_interrupt);


  parent reply	other threads:[~2014-02-14  8:00 UTC|newest]

Thread overview: 129+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-14  7:49 [PATCH v2 00/52] CPU hotplug: Fix issues with callback registration Srivatsa S. Bhat
2014-02-14  7:49 ` [PATCH v2 01/52] CPU hotplug: Add lockdep annotations to get/put_online_cpus() Srivatsa S. Bhat
2014-02-14  7:49   ` Srivatsa S. Bhat
2014-02-14  7:49 ` [PATCH v2 02/52] CPU hotplug: Provide lockless versions of callback registration functions Srivatsa S. Bhat
2014-02-14  7:49   ` Srivatsa S. Bhat
2014-02-17 13:26   ` Gautham R Shenoy
2014-02-19 21:34   ` Toshi Kani
2014-02-14  7:49 ` [PATCH v2 03/52] Doc/cpu-hotplug: Specify race-free way to register CPU hotplug callbacks Srivatsa S. Bhat
2014-02-14  7:49   ` Srivatsa S. Bhat
2014-02-14  7:49 ` [PATCH v2 04/52] CPU hotplug, perf: Fix CPU hotplug callback registration Srivatsa S. Bhat
2014-02-14  7:49   ` Srivatsa S. Bhat
2014-02-14  7:50 ` [PATCH v2 05/52] ia64, salinfo: Fix " Srivatsa S. Bhat
2014-02-14  7:50   ` Srivatsa S. Bhat
2014-02-14  7:50 ` [PATCH v2 06/52] ia64, palinfo: Fix CPU " Srivatsa S. Bhat
2014-02-14  7:50   ` Srivatsa S. Bhat
2014-02-14  7:50 ` [PATCH v2 07/52] ia64, topology: " Srivatsa S. Bhat
2014-02-14  7:50   ` Srivatsa S. Bhat
2014-02-14  7:50 ` [PATCH v2 08/52] ia64, err-inject: " Srivatsa S. Bhat
2014-02-14  7:50   ` Srivatsa S. Bhat
2014-02-14  7:51 ` [PATCH v2 09/52] arm, hw-breakpoint: " Srivatsa S. Bhat
2014-02-14  7:51   ` Srivatsa S. Bhat
2014-02-14  7:51 ` [PATCH v2 10/52] arm, kvm: " Srivatsa S. Bhat
2014-02-14  7:51   ` Srivatsa S. Bhat
2014-02-14 10:29   ` Paolo Bonzini
2014-02-14 10:29     ` Paolo Bonzini
2014-02-14  7:51 ` [PATCH v2 11/52] s390, cacheinfo: " Srivatsa S. Bhat
2014-02-14  7:51   ` Srivatsa S. Bhat
2014-02-14  7:51 ` [PATCH v2 12/52] s390, smp: " Srivatsa S. Bhat
2014-02-14  7:51   ` Srivatsa S. Bhat
2014-02-14  7:52 ` [PATCH v2 13/52] sparc, sysfs: " Srivatsa S. Bhat
2014-02-14  7:52   ` Srivatsa S. Bhat
2014-02-14 18:30   ` David Miller
2014-02-14  7:52 ` [PATCH v2 14/52] powerpc, " Srivatsa S. Bhat
2014-02-14  7:52   ` Srivatsa S. Bhat
2014-03-07  2:57   ` Benjamin Herrenschmidt
2014-03-07  2:57     ` Benjamin Herrenschmidt
2014-03-07  6:21     ` Gautham R Shenoy
2014-02-14  7:52 ` [PATCH v2 15/52] x86, msr: " Srivatsa S. Bhat
2014-02-14  7:52   ` Srivatsa S. Bhat
2014-02-14  7:52 ` [PATCH v2 16/52] x86, cpuid: " Srivatsa S. Bhat
2014-02-14  7:52   ` Srivatsa S. Bhat
2014-02-14  7:52 ` [PATCH v2 17/52] x86, vsyscall: " Srivatsa S. Bhat
2014-02-14  7:52   ` Srivatsa S. Bhat
2014-02-14  7:53 ` [PATCH v2 18/52] x86, intel, uncore: " Srivatsa S. Bhat
2014-02-14  7:53   ` Srivatsa S. Bhat
2014-02-14  7:53 ` [PATCH v2 19/52] x86, mce: " Srivatsa S. Bhat
2014-02-14  7:53   ` Srivatsa S. Bhat
2014-02-14  7:53 ` [PATCH v2 20/52] x86, therm_throt.c: " Srivatsa S. Bhat
2014-02-14  7:53   ` Srivatsa S. Bhat
2014-02-14  7:53 ` [PATCH v2 21/52] x86, therm_throt.c: Remove unused therm_cpu_lock Srivatsa S. Bhat
2014-02-14  7:53   ` Srivatsa S. Bhat
2014-02-14  7:54 ` [PATCH v2 22/52] x86, amd, ibs: Fix CPU hotplug callback registration Srivatsa S. Bhat
2014-02-14  7:54   ` Srivatsa S. Bhat
2014-02-14  7:54 ` [PATCH v2 23/52] x86, intel, cacheinfo: " Srivatsa S. Bhat
2014-02-14  7:54   ` Srivatsa S. Bhat
2014-02-14  7:54 ` [PATCH v2 24/52] x86, intel, rapl: " Srivatsa S. Bhat
2014-02-14  7:54   ` Srivatsa S. Bhat
2014-02-14  7:54 ` [PATCH v2 25/52] x86, amd, uncore: " Srivatsa S. Bhat
2014-02-14  7:54   ` Srivatsa S. Bhat
2014-02-14  7:55 ` [PATCH v2 26/52] x86, hpet: " Srivatsa S. Bhat
2014-02-14  7:55   ` Srivatsa S. Bhat
2014-02-14  7:55 ` [PATCH v2 27/52] x86, pci, amd-bus: " Srivatsa S. Bhat
2014-02-14  7:55   ` Srivatsa S. Bhat
2014-02-14 17:35   ` Bjorn Helgaas
2014-02-14 18:03     ` Srivatsa S. Bhat
2014-02-14 18:03       ` Srivatsa S. Bhat
2014-02-14  7:55 ` [PATCH v2 28/52] x86, oprofile, nmi: " Srivatsa S. Bhat
2014-02-14  7:55   ` Srivatsa S. Bhat
2014-02-14  7:55 ` [PATCH v2 29/52] x86, kvm: " Srivatsa S. Bhat
2014-02-14  7:55   ` Srivatsa S. Bhat
2014-02-14 10:29   ` Paolo Bonzini
2014-02-14  7:55 ` [PATCH v2 30/52] arm64, hw_breakpoint.c: " Srivatsa S. Bhat
2014-02-14  7:55   ` Srivatsa S. Bhat
2014-02-14  7:56 ` [PATCH v2 31/52] arm64, debug-monitors: " Srivatsa S. Bhat
2014-02-14  7:56   ` Srivatsa S. Bhat
2014-02-14  7:56 ` [PATCH v2 32/52] powercap, intel-rapl: " Srivatsa S. Bhat
2014-02-14  7:56   ` Srivatsa S. Bhat
2014-02-14  7:56 ` [PATCH v2 33/52] scsi, bnx2i: " Srivatsa S. Bhat
2014-02-14  7:56   ` Srivatsa S. Bhat
2014-02-14  7:56 ` [PATCH v2 34/52] scsi, bnx2fc: " Srivatsa S. Bhat
2014-02-14  7:56   ` Srivatsa S. Bhat
2014-02-14  7:57 ` [PATCH v2 35/52] scsi, fcoe: " Srivatsa S. Bhat
2014-02-14  7:57   ` Srivatsa S. Bhat
2014-02-14  7:57 ` [PATCH v2 36/52] zsmalloc: " Srivatsa S. Bhat
2014-02-14  7:57   ` Srivatsa S. Bhat
2014-02-14  7:57 ` [PATCH v2 37/52] acpi-cpufreq: " Srivatsa S. Bhat
2014-02-14  7:57   ` Srivatsa S. Bhat
2014-02-14  7:57 ` [PATCH v2 38/52] drivers/base/topology.c: " Srivatsa S. Bhat
2014-02-14  7:57   ` Srivatsa S. Bhat
2014-02-15 19:38   ` Greg Kroah-Hartman
2014-02-14  7:58 ` [PATCH v2 39/52] clocksource, dummy-timer: " Srivatsa S. Bhat
2014-02-14  7:58   ` Srivatsa S. Bhat
2014-02-14  7:58 ` [PATCH v2 40/52] intel-idle: " Srivatsa S. Bhat
2014-02-14  7:58   ` Srivatsa S. Bhat
2014-02-14  7:58 ` [PATCH v2 41/52] oprofile, nmi-timer: " Srivatsa S. Bhat
2014-02-14  7:58   ` Srivatsa S. Bhat
2014-02-14  7:58 ` [PATCH v2 42/52] octeon, watchdog: " Srivatsa S. Bhat
2014-02-14  7:58   ` Srivatsa S. Bhat
2014-02-14  7:58 ` [PATCH v2 43/52] thermal, x86-pkg-temp: " Srivatsa S. Bhat
2014-02-14  7:58   ` Srivatsa S. Bhat
2014-02-14  7:59 ` [PATCH v2 44/52] hwmon, coretemp: " Srivatsa S. Bhat
2014-02-14  7:59   ` Srivatsa S. Bhat
2014-02-14  7:59 ` [PATCH v2 45/52] hwmon, via-cputemp: " Srivatsa S. Bhat
2014-02-14  7:59   ` Srivatsa S. Bhat
2014-02-14  7:59 ` [PATCH v2 46/52] xen, balloon: " Srivatsa S. Bhat
2014-02-14  7:59   ` Srivatsa S. Bhat
2014-02-14 16:49   ` Boris Ostrovsky
2014-02-14 16:49     ` Boris Ostrovsky
2014-02-14 16:50     ` Srivatsa S. Bhat
2014-02-15 16:51       ` [UPDATED][PATCH " Srivatsa S. Bhat
2014-02-17 14:50         ` Boris Ostrovsky
2014-02-14  7:59 ` [PATCH v2 47/52] trace, ring-buffer: " Srivatsa S. Bhat
2014-02-14  7:59   ` Srivatsa S. Bhat
2014-02-14  8:00 ` [PATCH v2 48/52] profile: " Srivatsa S. Bhat
2014-02-14  8:00   ` Srivatsa S. Bhat
2014-02-14  8:00 ` [PATCH v2 49/52] mm, vmstat: " Srivatsa S. Bhat
2014-02-14  8:00   ` Srivatsa S. Bhat
2014-02-14 14:26   ` Rik van Riel
2014-02-14 14:26     ` Rik van Riel
2014-02-14  8:00 ` [PATCH v2 50/52] mm, zswap: " Srivatsa S. Bhat
2014-02-14  8:00   ` Srivatsa S. Bhat
2014-02-14  8:00 ` [PATCH v2 51/52] net/core/flow.c: " Srivatsa S. Bhat
2014-02-14  8:00   ` Srivatsa S. Bhat
2014-02-14 18:31   ` David Miller
2014-02-14  8:00 ` Srivatsa S. Bhat [this message]
2014-02-14  8:00   ` [PATCH v2 52/52] net/iucv/iucv.c: " Srivatsa S. Bhat
2014-02-14 18:31   ` David Miller
2014-02-18  8:56 ` [PATCH v2 00/52] CPU hotplug: Fix issues with " Srivatsa S. Bhat
2014-02-18  8:56   ` Srivatsa S. Bhat

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=20140214080057.22701.94737.stgit@srivatsabhat.in.ibm.com \
    --to=srivatsa.bhat@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=ego@linux.vnet.ibm.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=mingo@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=oleg@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=paulus@samba.org \
    --cc=peterz@infradead.org \
    --cc=rjw@rjwysocki.net \
    --cc=rusty@rustcorp.com.au \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=ursula.braun@de.ibm.com \
    --cc=walken@google.com \
    /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;
as well as URLs for NNTP newsgroup(s).