aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-12-10 17:20:10 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-12-10 17:20:10 -0500
commitc9f861c77269bc9950c16c6404a9476062241671 (patch)
tree5f1fd6cf839eab1fa11b4fd03b5db1e65e2a0cd5 /drivers
parenta023748d53c10850650fe86b1c4a7d421d576451 (diff)
parentc7c9b3929b6a57ad47ab4021c77e46f7ff21c007 (diff)
Merge branch 'x86-ras-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 RAS update from Ingo Molnar: "The biggest change in this cycle is better support for UCNA (UnCorrected No Action) events: "Handle all uncorrected error reports in the same way (soft offline the page). We used to only do that for SRAO (software recoverable action optional) machine checks, but it makes sense to also do it for UCNA (UnCorrected No Action) logs found by CMCI or polling." plus various x86 MCE handling updates and fixes" * 'x86-ras-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/mce: Spell "panicked" correctly x86, mce: Support memory error recovery for both UCNA and Deferred error in machine_check_poll x86, mce, severity: Extend the the mce_severity mechanism to handle UCNA/DEFERRED error x86, MCE, AMD: Assign interrupt handler only when bank supports it x86, MCE, AMD: Drop software-defined bank in error thresholding x86, MCE, AMD: Move invariant code out from loop body x86, MCE, AMD: Correct thresholding error logging x86, MCE, AMD: Use macros to compute bank MSRs RAS, HWPOISON: Fix wrong error recovery status GHES: Make ghes_estatus_caches static APEI, GHES: Cleanup unnecessary function for lockless list
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/apei/ghes.c20
-rw-r--r--drivers/edac/mce_amd.h3
2 files changed, 3 insertions, 20 deletions
diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
index fc5f780bb61d..1b6aa514848f 100644
--- a/drivers/acpi/apei/ghes.c
+++ b/drivers/acpi/apei/ghes.c
@@ -128,7 +128,7 @@ static DEFINE_SPINLOCK(ghes_ioremap_lock_irq);
128static struct gen_pool *ghes_estatus_pool; 128static struct gen_pool *ghes_estatus_pool;
129static unsigned long ghes_estatus_pool_size_request; 129static unsigned long ghes_estatus_pool_size_request;
130 130
131struct ghes_estatus_cache *ghes_estatus_caches[GHES_ESTATUS_CACHES_SIZE]; 131static struct ghes_estatus_cache *ghes_estatus_caches[GHES_ESTATUS_CACHES_SIZE];
132static atomic_t ghes_estatus_cache_alloced; 132static atomic_t ghes_estatus_cache_alloced;
133 133
134static int ghes_ioremap_init(void) 134static int ghes_ioremap_init(void)
@@ -738,20 +738,6 @@ static LIST_HEAD(ghes_nmi);
738 738
739static int ghes_panic_timeout __read_mostly = 30; 739static int ghes_panic_timeout __read_mostly = 30;
740 740
741static struct llist_node *llist_nodes_reverse(struct llist_node *llnode)
742{
743 struct llist_node *next, *tail = NULL;
744
745 while (llnode) {
746 next = llnode->next;
747 llnode->next = tail;
748 tail = llnode;
749 llnode = next;
750 }
751
752 return tail;
753}
754
755static void ghes_proc_in_irq(struct irq_work *irq_work) 741static void ghes_proc_in_irq(struct irq_work *irq_work)
756{ 742{
757 struct llist_node *llnode, *next; 743 struct llist_node *llnode, *next;
@@ -765,7 +751,7 @@ static void ghes_proc_in_irq(struct irq_work *irq_work)
765 * Because the time order of estatus in list is reversed, 751 * Because the time order of estatus in list is reversed,
766 * revert it back to proper order. 752 * revert it back to proper order.
767 */ 753 */
768 llnode = llist_nodes_reverse(llnode); 754 llnode = llist_reverse_order(llnode);
769 while (llnode) { 755 while (llnode) {
770 next = llnode->next; 756 next = llnode->next;
771 estatus_node = llist_entry(llnode, struct ghes_estatus_node, 757 estatus_node = llist_entry(llnode, struct ghes_estatus_node,
@@ -798,7 +784,7 @@ static void ghes_print_queued_estatus(void)
798 * Because the time order of estatus in list is reversed, 784 * Because the time order of estatus in list is reversed,
799 * revert it back to proper order. 785 * revert it back to proper order.
800 */ 786 */
801 llnode = llist_nodes_reverse(llnode); 787 llnode = llist_reverse_order(llnode);
802 while (llnode) { 788 while (llnode) {
803 estatus_node = llist_entry(llnode, struct ghes_estatus_node, 789 estatus_node = llist_entry(llnode, struct ghes_estatus_node,
804 llnode); 790 llnode);
diff --git a/drivers/edac/mce_amd.h b/drivers/edac/mce_amd.h
index 51b7e3a36e37..c2359a1ea6b3 100644
--- a/drivers/edac/mce_amd.h
+++ b/drivers/edac/mce_amd.h
@@ -32,9 +32,6 @@
32#define R4(x) (((x) >> 4) & 0xf) 32#define R4(x) (((x) >> 4) & 0xf)
33#define R4_MSG(x) ((R4(x) < 9) ? rrrr_msgs[R4(x)] : "Wrong R4!") 33#define R4_MSG(x) ((R4(x) < 9) ? rrrr_msgs[R4(x)] : "Wrong R4!")
34 34
35#define MCI_STATUS_DEFERRED BIT_64(44)
36#define MCI_STATUS_POISON BIT_64(43)
37
38extern const char * const pp_msgs[]; 35extern const char * const pp_msgs[];
39 36
40enum tt_ids { 37enum tt_ids {