]> Git Repo - linux.git/blobdiff - mm/zsmalloc.c
KVM: x86: fix overlap between SPTE_MMIO_MASK and generation
[linux.git] / mm / zsmalloc.c
index e98bb6ab4f7e76c8b3f6d29c165b43fd6a6da964..22d17ecfe7df464412426e2dc4079c541f28ae4d 100644 (file)
@@ -443,15 +443,16 @@ static u64 zs_zpool_total_size(void *pool)
 }
 
 static struct zpool_driver zs_zpool_driver = {
-       .type =         "zsmalloc",
-       .owner =        THIS_MODULE,
-       .create =       zs_zpool_create,
-       .destroy =      zs_zpool_destroy,
-       .malloc =       zs_zpool_malloc,
-       .free =         zs_zpool_free,
-       .map =          zs_zpool_map,
-       .unmap =        zs_zpool_unmap,
-       .total_size =   zs_zpool_total_size,
+       .type =                   "zsmalloc",
+       .owner =                  THIS_MODULE,
+       .create =                 zs_zpool_create,
+       .destroy =                zs_zpool_destroy,
+       .malloc_support_movable = true,
+       .malloc =                 zs_zpool_malloc,
+       .free =                   zs_zpool_free,
+       .map =                    zs_zpool_map,
+       .unmap =                  zs_zpool_unmap,
+       .total_size =             zs_zpool_total_size,
 };
 
 MODULE_ALIAS("zpool-zsmalloc");
@@ -476,10 +477,6 @@ static inline int get_zspage_inuse(struct zspage *zspage)
        return zspage->inuse;
 }
 
-static inline void set_zspage_inuse(struct zspage *zspage, int val)
-{
-       zspage->inuse = val;
-}
 
 static inline void mod_zspage_inuse(struct zspage *zspage, int val)
 {
@@ -2072,6 +2069,11 @@ static int zs_page_migrate(struct address_space *mapping, struct page *newpage,
                zs_pool_dec_isolated(pool);
        }
 
+       if (page_zone(newpage) != page_zone(page)) {
+               dec_zone_page_state(page, NR_ZSPAGES);
+               inc_zone_page_state(newpage, NR_ZSPAGES);
+       }
+
        reset_page(page);
        put_page(page);
        page = newpage;
This page took 0.029325 seconds and 4 git commands to generate.