--- /dev/null
+From 3661371701e714f0cea4120f6a365340858fb4e4 Mon Sep 17 00:00:00 2001
+From: David Vrabel <david.vrabel@citrix.com>
+Date: Tue, 4 Feb 2014 18:53:56 +0000
+Subject: xen-blkfront: handle backend CLOSED without CLOSING
+
+From: David Vrabel <david.vrabel@citrix.com>
+
+commit 3661371701e714f0cea4120f6a365340858fb4e4 upstream.
+
+Backend drivers shouldn't transistion to CLOSED unless the frontend is
+CLOSED. If a backend does transition to CLOSED too soon then the
+frontend may not see the CLOSING state and will not properly shutdown.
+
+So, treat an unexpected backend CLOSED state the same as CLOSING.
+
+Signed-off-by: David Vrabel <david.vrabel@citrix.com>
+Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/block/xen-blkfront.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/block/xen-blkfront.c
++++ b/drivers/block/xen-blkfront.c
+@@ -1852,13 +1852,16 @@ static void blkback_changed(struct xenbu
+ case XenbusStateReconfiguring:
+ case XenbusStateReconfigured:
+ case XenbusStateUnknown:
+- case XenbusStateClosed:
+ break;
+
+ case XenbusStateConnected:
+ blkfront_connect(info);
+ break;
+
++ case XenbusStateClosed:
++ if (dev->state == XenbusStateClosed)
++ break;
++ /* Missed the backend's Closing state -- fallthrough */
+ case XenbusStateClosing:
+ blkfront_closing(info);
+ break;
--- /dev/null
+From a9c8e4beeeb64c22b84c803747487857fe424b68 Mon Sep 17 00:00:00 2001
+From: Mel Gorman <mgorman@suse.de>
+Date: Mon, 10 Feb 2014 14:25:40 -0800
+Subject: xen: properly account for _PAGE_NUMA during xen pte translations
+
+From: Mel Gorman <mgorman@suse.de>
+
+commit a9c8e4beeeb64c22b84c803747487857fe424b68 upstream.
+
+Steven Noonan forwarded a users report where they had a problem starting
+vsftpd on a Xen paravirtualized guest, with this in dmesg:
+
+ BUG: Bad page map in process vsftpd pte:8000000493b88165 pmd:e9cc01067
+ page:ffffea00124ee200 count:0 mapcount:-1 mapping: (null) index:0x0
+ page flags: 0x2ffc0000000014(referenced|dirty)
+ addr:00007f97eea74000 vm_flags:00100071 anon_vma:ffff880e98f80380 mapping: (null) index:7f97eea74
+ CPU: 4 PID: 587 Comm: vsftpd Not tainted 3.12.7-1-ec2 #1
+ Call Trace:
+ dump_stack+0x45/0x56
+ print_bad_pte+0x22e/0x250
+ unmap_single_vma+0x583/0x890
+ unmap_vmas+0x65/0x90
+ exit_mmap+0xc5/0x170
+ mmput+0x65/0x100
+ do_exit+0x393/0x9e0
+ do_group_exit+0xcc/0x140
+ SyS_exit_group+0x14/0x20
+ system_call_fastpath+0x1a/0x1f
+ Disabling lock debugging due to kernel taint
+ BUG: Bad rss-counter state mm:ffff880e9ca60580 idx:0 val:-1
+ BUG: Bad rss-counter state mm:ffff880e9ca60580 idx:1 val:1
+
+The issue could not be reproduced under an HVM instance with the same
+kernel, so it appears to be exclusive to paravirtual Xen guests. He
+bisected the problem to commit 1667918b6483 ("mm: numa: clear numa
+hinting information on mprotect") that was also included in 3.12-stable.
+
+The problem was related to how xen translates ptes because it was not
+accounting for the _PAGE_NUMA bit. This patch splits pte_present to add
+a pteval_present helper for use by xen so both bare metal and xen use
+the same code when checking if a PTE is present.
+
+[mgorman@suse.de: wrote changelog, proposed minor modifications]
+[akpm@linux-foundation.org: fix typo in comment]
+Reported-by: Steven Noonan <steven@uplinklabs.net>
+Tested-by: Steven Noonan <steven@uplinklabs.net>
+Signed-off-by: Elena Ufimtseva <ufimtseva@gmail.com>
+Signed-off-by: Mel Gorman <mgorman@suse.de>
+Reviewed-by: David Vrabel <david.vrabel@citrix.com>
+Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/include/asm/pgtable.h | 14 ++++++++++++--
+ arch/x86/xen/mmu.c | 4 ++--
+ 2 files changed, 14 insertions(+), 4 deletions(-)
+
+--- a/arch/x86/include/asm/pgtable.h
++++ b/arch/x86/include/asm/pgtable.h
+@@ -445,10 +445,20 @@ static inline int pte_same(pte_t a, pte_
+ return a.pte == b.pte;
+ }
+
++static inline int pteval_present(pteval_t pteval)
++{
++ /*
++ * Yes Linus, _PAGE_PROTNONE == _PAGE_NUMA. Expressing it this
++ * way clearly states that the intent is that protnone and numa
++ * hinting ptes are considered present for the purposes of
++ * pagetable operations like zapping, protection changes, gup etc.
++ */
++ return pteval & (_PAGE_PRESENT | _PAGE_PROTNONE | _PAGE_NUMA);
++}
++
+ static inline int pte_present(pte_t a)
+ {
+- return pte_flags(a) & (_PAGE_PRESENT | _PAGE_PROTNONE |
+- _PAGE_NUMA);
++ return pteval_present(pte_flags(a));
+ }
+
+ #define pte_accessible pte_accessible
+--- a/arch/x86/xen/mmu.c
++++ b/arch/x86/xen/mmu.c
+@@ -365,7 +365,7 @@ void xen_ptep_modify_prot_commit(struct
+ /* Assume pteval_t is equivalent to all the other *val_t types. */
+ static pteval_t pte_mfn_to_pfn(pteval_t val)
+ {
+- if (val & _PAGE_PRESENT) {
++ if (pteval_present(val)) {
+ unsigned long mfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
+ unsigned long pfn = mfn_to_pfn(mfn);
+
+@@ -381,7 +381,7 @@ static pteval_t pte_mfn_to_pfn(pteval_t
+
+ static pteval_t pte_pfn_to_mfn(pteval_t val)
+ {
+- if (val & _PAGE_PRESENT) {
++ if (pteval_present(val)) {
+ unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
+ pteval_t flags = val & PTE_FLAGS_MASK;
+ unsigned long mfn;