OSDN Git Service

Merge tag 'for-linus-5.7-rc1b-tag' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 11 Apr 2020 00:20:06 +0000 (17:20 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 11 Apr 2020 00:20:06 +0000 (17:20 -0700)
Pull more xen updates from Juergen Gross:

 - two cleanups

 - fix a boot regression introduced in this merge window

 - fix wrong use of memory allocation flags

* tag 'for-linus-5.7-rc1b-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
  x86/xen: fix booting 32-bit pv guest
  x86/xen: make xen_pvmmu_arch_setup() static
  xen/blkfront: fix memory allocation flags in blkfront_setup_indirect()
  xen: Use evtchn_type_t as a type for event channels

1  2 
drivers/block/xen-blkfront.c

@@@ -47,6 -47,7 +47,7 @@@
  #include <linux/bitmap.h>
  #include <linux/list.h>
  #include <linux/workqueue.h>
+ #include <linux/sched/mm.h>
  
  #include <xen/xen.h>
  #include <xen/xenbus.h>
@@@ -2189,10 -2190,12 +2190,12 @@@ static void blkfront_setup_discard(stru
  
  static int blkfront_setup_indirect(struct blkfront_ring_info *rinfo)
  {
-       unsigned int psegs, grants;
+       unsigned int psegs, grants, memflags;
        int err, i;
        struct blkfront_info *info = rinfo->dev_info;
  
+       memflags = memalloc_noio_save();
        if (info->max_indirect_segments == 0) {
                if (!HAS_EXTRA_REQ)
                        grants = BLKIF_MAX_SEGMENTS_PER_REQUEST;
  
                BUG_ON(!list_empty(&rinfo->indirect_pages));
                for (i = 0; i < num; i++) {
-                       struct page *indirect_page = alloc_page(GFP_NOIO);
+                       struct page *indirect_page = alloc_page(GFP_KERNEL);
                        if (!indirect_page)
                                goto out_of_memory;
                        list_add(&indirect_page->lru, &rinfo->indirect_pages);
                rinfo->shadow[i].grants_used =
                        kvcalloc(grants,
                                 sizeof(rinfo->shadow[i].grants_used[0]),
-                                GFP_NOIO);
+                                GFP_KERNEL);
                rinfo->shadow[i].sg = kvcalloc(psegs,
                                               sizeof(rinfo->shadow[i].sg[0]),
-                                              GFP_NOIO);
+                                              GFP_KERNEL);
                if (info->max_indirect_segments)
                        rinfo->shadow[i].indirect_grants =
                                kvcalloc(INDIRECT_GREFS(grants),
                                         sizeof(rinfo->shadow[i].indirect_grants[0]),
-                                        GFP_NOIO);
+                                        GFP_KERNEL);
                if ((rinfo->shadow[i].grants_used == NULL) ||
                        (rinfo->shadow[i].sg == NULL) ||
                     (info->max_indirect_segments &&
                sg_init_table(rinfo->shadow[i].sg, psegs);
        }
  
+       memalloc_noio_restore(memflags);
  
        return 0;
  
@@@ -2271,6 -2275,9 +2275,9 @@@ out_of_memory
                        __free_page(indirect_page);
                }
        }
+       memalloc_noio_restore(memflags);
        return -ENOMEM;
  }
  
@@@ -2338,6 -2345,7 +2345,6 @@@ static void blkfront_connect(struct blk
        unsigned long sector_size;
        unsigned int physical_sector_size;
        unsigned int binfo;
 -      char *envp[] = { "RESIZE=1", NULL };
        int err, i;
        struct blkfront_ring_info *rinfo;
  
                        return;
                printk(KERN_INFO "Setting capacity to %Lu\n",
                       sectors);
 -              set_capacity(info->gd, sectors);
 -              revalidate_disk(info->gd);
 -              kobject_uevent_env(&disk_to_dev(info->gd)->kobj,
 -                                 KOBJ_CHANGE, envp);
 +              set_capacity_revalidate_and_notify(info->gd, sectors, true);
  
                return;
        case BLKIF_STATE_SUSPENDED: