|
@@ -187,6 +187,19 @@ free_address(
|
|
{
|
|
{
|
|
a_list_t *aentry;
|
|
a_list_t *aentry;
|
|
|
|
|
|
|
|
+#ifdef CONFIG_XEN
|
|
|
|
+ /*
|
|
|
|
+ * Xen needs to be able to make sure it can get an exclusive
|
|
|
|
+ * RO mapping of pages it wants to turn into a pagetable. If
|
|
|
|
+ * a newly allocated page is also still being vmap()ed by xfs,
|
|
|
|
+ * it will cause pagetable construction to fail. This is a
|
|
|
|
+ * quick workaround to always eagerly unmap pages so that Xen
|
|
|
|
+ * is happy.
|
|
|
|
+ */
|
|
|
|
+ vunmap(addr);
|
|
|
|
+ return;
|
|
|
|
+#endif
|
|
|
|
+
|
|
aentry = kmalloc(sizeof(a_list_t), GFP_NOWAIT);
|
|
aentry = kmalloc(sizeof(a_list_t), GFP_NOWAIT);
|
|
if (likely(aentry)) {
|
|
if (likely(aentry)) {
|
|
spin_lock(&as_lock);
|
|
spin_lock(&as_lock);
|