Skip to content

Commit

Permalink
Merge tag 'for-linus-5.10b-rc1-tag' of git://git.kernel.org/pub/scm/l…
Browse files Browse the repository at this point in the history
…inux/kernel/git/xen/tip

Pull xen updates from Juergen Gross:

 - two small cleanup patches

 - avoid error messages when initializing MCA banks in a Xen dom0

 - a small series for converting the Xen gntdev driver to use
   pin_user_pages*() instead of get_user_pages*()

 - intermediate fix for running as a Xen guest on Arm with KPTI enabled
   (the final solution will need new Xen functionality)

* tag 'for-linus-5.10b-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
  x86/xen: Fix typo in xen_pagetable_p2m_free()
  x86/xen: disable Firmware First mode for correctable memory errors
  xen/arm: do not setup the runstate info page if kpti is enabled
  xen: remove redundant initialization of variable ret
  xen/gntdev.c: Convert get_user_pages*() to pin_user_pages*()
  xen/gntdev.c: Mark pages as dirty
  • Loading branch information
torvalds committed Oct 14, 2020
2 parents 4907a43 + 32118f9 commit a09b1d7
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 12 deletions.
5 changes: 5 additions & 0 deletions arch/arm/include/asm/xen/page.h
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
#include <xen/arm/page.h>

static inline bool xen_kernel_unmapped_at_usr(void)
{
return false;
}
6 changes: 4 additions & 2 deletions arch/arm/xen/enlighten.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,8 @@ static int xen_starting_cpu(unsigned int cpu)
BUG_ON(err);
per_cpu(xen_vcpu, cpu) = vcpup;

xen_setup_runstate_info(cpu);
if (!xen_kernel_unmapped_at_usr())
xen_setup_runstate_info(cpu);

after_register_vcpu_info:
enable_percpu_irq(xen_events_irq, 0);
Expand Down Expand Up @@ -387,7 +388,8 @@ static int __init xen_guest_init(void)
return -EINVAL;
}

xen_time_setup_guest();
if (!xen_kernel_unmapped_at_usr())
xen_time_setup_guest();

if (xen_initial_domain())
pvclock_gtod_register_notifier(&xen_pvclock_gtod_notifier);
Expand Down
6 changes: 6 additions & 0 deletions arch/arm64/include/asm/xen/page.h
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
#include <xen/arm/page.h>
#include <asm/mmu.h>

static inline bool xen_kernel_unmapped_at_usr(void)
{
return arm64_kernel_unmapped_at_el0();
}
9 changes: 9 additions & 0 deletions arch/x86/xen/enlighten_pv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1370,6 +1370,15 @@ asmlinkage __visible void __init xen_start_kernel(void)
x86_init.mpparse.get_smp_config = x86_init_uint_noop;

xen_boot_params_init_edd();

#ifdef CONFIG_ACPI
/*
* Disable selecting "Firmware First mode" for correctable
* memory errors, as this is the duty of the hypervisor to
* decide.
*/
acpi_disable_cmcff = 1;
#endif
}

if (!boot_params.screen_info.orig_video_isVGA)
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/xen/mmu_pv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1142,7 +1142,7 @@ static void __init xen_pagetable_p2m_free(void)
* We could be in __ka space.
* We roundup to the PMD, which means that if anybody at this stage is
* using the __ka address of xen_start_info or
* xen_start_info->shared_info they are in going to crash. Fortunatly
* xen_start_info->shared_info they are in going to crash. Fortunately
* we have already revectored in xen_setup_kernel_pagetable.
*/
size = roundup(size, PMD_SIZE);
Expand Down
17 changes: 9 additions & 8 deletions drivers/xen/gntdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -720,17 +720,18 @@ struct gntdev_copy_batch {
s16 __user *status[GNTDEV_COPY_BATCH];
unsigned int nr_ops;
unsigned int nr_pages;
bool writeable;
};

static int gntdev_get_page(struct gntdev_copy_batch *batch, void __user *virt,
bool writeable, unsigned long *gfn)
unsigned long *gfn)
{
unsigned long addr = (unsigned long)virt;
struct page *page;
unsigned long xen_pfn;
int ret;

ret = get_user_pages_fast(addr, 1, writeable ? FOLL_WRITE : 0, &page);
ret = pin_user_pages_fast(addr, 1, batch->writeable ? FOLL_WRITE : 0, &page);
if (ret < 0)
return ret;

Expand All @@ -744,11 +745,9 @@ static int gntdev_get_page(struct gntdev_copy_batch *batch, void __user *virt,

static void gntdev_put_pages(struct gntdev_copy_batch *batch)
{
unsigned int i;

for (i = 0; i < batch->nr_pages; i++)
put_page(batch->pages[i]);
unpin_user_pages_dirty_lock(batch->pages, batch->nr_pages, batch->writeable);
batch->nr_pages = 0;
batch->writeable = false;
}

static int gntdev_copy(struct gntdev_copy_batch *batch)
Expand Down Expand Up @@ -837,8 +836,9 @@ static int gntdev_grant_copy_seg(struct gntdev_copy_batch *batch,
virt = seg->source.virt + copied;
off = (unsigned long)virt & ~XEN_PAGE_MASK;
len = min(len, (size_t)XEN_PAGE_SIZE - off);
batch->writeable = false;

ret = gntdev_get_page(batch, virt, false, &gfn);
ret = gntdev_get_page(batch, virt, &gfn);
if (ret < 0)
return ret;

Expand All @@ -856,8 +856,9 @@ static int gntdev_grant_copy_seg(struct gntdev_copy_batch *batch,
virt = seg->dest.virt + copied;
off = (unsigned long)virt & ~XEN_PAGE_MASK;
len = min(len, (size_t)XEN_PAGE_SIZE - off);
batch->writeable = true;

ret = gntdev_get_page(batch, virt, true, &gfn);
ret = gntdev_get_page(batch, virt, &gfn);
if (ret < 0)
return ret;

Expand Down
2 changes: 1 addition & 1 deletion drivers/xen/pvcalls-front.c
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ static int alloc_active_ring(struct sock_mapping *map)
static int create_active(struct sock_mapping *map, evtchn_port_t *evtchn)
{
void *bytes;
int ret = -ENOMEM, irq = -1, i;
int ret, irq = -1, i;

*evtchn = 0;
init_waitqueue_head(&map->active.inflight_conn_req);
Expand Down

0 comments on commit a09b1d7

Please sign in to comment.