Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 288921 Details for
Bug 248515
vmalloc_sync_all() is broken for PAE Xen kernels
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
linux-2.6.18-xen 136:34ebf92ad28d ported to 2.6.18-53.el5
linux-2.6.18-xen-136-34ebf92ad28d (text/plain), 2.30 KB, created by
Ian Campbell
on 2007-12-14 09:29:28 UTC
(
hide
)
Description:
linux-2.6.18-xen 136:34ebf92ad28d ported to 2.6.18-53.el5
Filename:
MIME Type:
Creator:
Ian Campbell
Created:
2007-12-14 09:29:28 UTC
Size:
2.30 KB
patch
obsolete
># HG changeset patch ># User Keir Fraser <keir@xensource.com> ># Date 1184403059 -3600 ># Node ID 34ebf92ad28d53f70ca02966c9f926f7d83bafbb ># Parent 9debaf36090515b4ce54712c4641781bc263b1a6 >xen/i386: Fix vmalloc_sync_all() for PAE. >Signed-off-by: Keir Fraser <keir@xensource.com> >linux-2.6.18-xen changeset: 136:34ebf92ad28d53f70ca02966c9f926f7d83bafbb >linux-2.6.18-xen date: Sat Jul 14 09:50:59 2007 +0100 > >diff -r 9debaf360905 -r 34ebf92ad28d arch/i386/mm/fault-xen.c >--- a/arch/i386/mm/fault-xen.c Fri Jul 13 16:15:37 2007 +0100 >+++ b/arch/i386/mm/fault-xen.c Sat Jul 14 09:50:59 2007 +0100 >@@ -739,18 +739,31 @@ void vmalloc_sync_all(void) > * problematic: insync can only get set bits added, and updates to > * start are only improving performance (without affecting correctness > * if undone). >- */ >- static DECLARE_BITMAP(insync, PTRS_PER_PGD); >+ * XEN: To work on PAE, we need to iterate over PMDs rather than PGDs. >+ * This change works just fine with 2-level paging too. >+ */ >+#define sync_index(a) ((a) >> PMD_SHIFT) >+ static DECLARE_BITMAP(insync, PTRS_PER_PGD*PTRS_PER_PMD); > static unsigned long start = TASK_SIZE; > unsigned long address; > > BUILD_BUG_ON(TASK_SIZE & ~PGDIR_MASK); >- for (address = start; address >= TASK_SIZE; address += PGDIR_SIZE) { >- if (!test_bit(pgd_index(address), insync)) { >+ for (address = start; >+ address >= TASK_SIZE && address < hypervisor_virt_start; >+ address += 1UL << PMD_SHIFT) { >+ if (!test_bit(sync_index(address), insync)) { > unsigned long flags; > struct page *page; > > spin_lock_irqsave(&pgd_lock, flags); >+ /* >+ * XEN: vmalloc_sync_one() failure path logic assumes >+ * pgd_list is non-empty. >+ */ >+ if (unlikely(!pgd_list)) { >+ spin_unlock_irqrestore(&pgd_lock, flags); >+ return; >+ } > for (page = pgd_list; page; page = > (struct page *)page->index) > if (!vmalloc_sync_one(page_address(page), >@@ -760,10 +773,10 @@ void vmalloc_sync_all(void) > } > spin_unlock_irqrestore(&pgd_lock, flags); > if (!page) >- set_bit(pgd_index(address), insync); >+ set_bit(sync_index(address), insync); > } >- if (address == start && test_bit(pgd_index(address), insync)) >- start = address + PGDIR_SIZE; >- } >-} >-#endif >+ if (address == start && test_bit(sync_index(address), insync)) >+ start = address + (1UL << PMD_SHIFT); >+ } >+} >+#endif
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 248515
: 288921