Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755091AbdCBSRc (ORCPT ); Thu, 2 Mar 2017 13:17:32 -0500 Received: from mx1.redhat.com ([209.132.183.28]:54336 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754910AbdCBSRS (ORCPT ); Thu, 2 Mar 2017 13:17:18 -0500 From: Vitaly Kuznetsov To: xen-devel@lists.xenproject.org Cc: x86@kernel.org, linux-kernel@vger.kernel.org, Boris Ostrovsky , Juergen Gross , Andrew Jones Subject: [PATCH v2 00/21] x86/xen: untangle PV and PVHVM guest support code Date: Thu, 2 Mar 2017 18:53:36 +0100 Message-Id: <20170302175357.8222-1-vkuznets@redhat.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 02 Mar 2017 17:54:00 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4438 Lines: 101 Changes since v1: - Patches 1,2 and 3 were split and reordered to avoid adding temporary #ifdefs [Juergen Gross] - Juergen's R-b added to what is now patches 14 and 15 (patches 4 and 5 in v1). Due to re-ordering there are some tiny diffrences but I opted for keeping the tag. Some patches are known to produce checkpatch.pl WARNINGS and a couple of ERRORs, I fixed a few (mostly in _hvm* code I split) and I refrained from fixing the rest to make it easier to review. I think that we may leave PV code as it is as sooner or later it will go away. Original description: I have a long-standing idea to separate PV and PVHVM code in kernel and introduce Kconfig options to make it possible to enable the required parts only breaking the current 'all or nothing' approach. Motivation: - Xen related x86 code in kernel is rather big and it is unclear which parts of it are required for PV, for HVM or for both. With PVH coming into picture is becomes even more tangled. It makes it hard to understand/audit the code. - In some case we may want to avoid bloating kernel by supporting Xen guests we don't need. In particular, 90% of the code in arch/x86/xen/ is required to support PV guests and one may require PVHVM support only. - PV guests are supposed to go away one day and such code separation would help us to get ready. This series adds XEN_PV Kconfig option and makes it possible to build PV-only and PVHVM-only kernels. It also makes it possible to disable Dom0 support. Some patches are rather big but this is mostly just moving code around, no functional changes intended. I smoke tested it with PV-only and PVHVM-only builds, booted and did save/restore test. I also tried the newly introduced PVHv2 guest, it even worked! Vitaly Kuznetsov (21): x86/xen: separate PV and HVM hypervisors x86/xen: globalize have_vcpu_info_placement x86/xen: add CONFIG_XEN_PV to Kconfig x86/xen: split off enlighten_pvh.c x86/xen: split off enlighten_hvm.c x86/xen: split off enlighten_pv.c x86/xen: split xen_smp_intr_init()/xen_smp_intr_free() x86/xen: split xen_smp_prepare_boot_cpu() x86/xen: split xen_cpu_die() x86/xen: split off smp_hvm.c x86/xen: split off smp_pv.c x86/xen: split off mmu_hvm.c x86/xen: split off mmu_pv.c x86/xen: split suspend.c for PV and PVHVM guests x86/xen: put setup.c, pmu.c and apic.c under CONFIG_XEN_PV x86/xen: define startup_xen for XEN PV only x86/xen: create stubs for HVM-only builds in page.h xen/balloon: decorate PV-only parts with #ifdef CONFIG_XEN_PV xen: create xen_create/destroy_contiguous_region() stubs for PVHVM only builds x86/xen: enable PVHVM-only builds x86/xen: rename some PV-only functions in smp_pv.c arch/x86/include/asm/hypervisor.h | 3 +- arch/x86/include/asm/xen/page.h | 25 + arch/x86/kernel/cpu/hypervisor.c | 7 +- arch/x86/kernel/process_64.c | 2 +- arch/x86/xen/Kconfig | 33 +- arch/x86/xen/Makefile | 16 +- arch/x86/xen/enlighten.c | 1904 +------------------------ arch/x86/xen/enlighten_hvm.c | 210 +++ arch/x86/xen/enlighten_pv.c | 1561 +++++++++++++++++++++ arch/x86/xen/enlighten_pvh.c | 114 ++ arch/x86/xen/mmu.c | 2776 +------------------------------------ arch/x86/xen/mmu_hvm.c | 79 ++ arch/x86/xen/mmu_pv.c | 2635 +++++++++++++++++++++++++++++++++++ arch/x86/xen/pmu.h | 5 + arch/x86/xen/smp.c | 516 +------ arch/x86/xen/smp.h | 16 + arch/x86/xen/smp_hvm.c | 58 + arch/x86/xen/smp_pv.c | 499 +++++++ arch/x86/xen/suspend.c | 54 - arch/x86/xen/suspend_hvm.c | 22 + arch/x86/xen/suspend_pv.c | 44 + arch/x86/xen/xen-head.S | 4 + arch/x86/xen/xen-ops.h | 21 + drivers/xen/balloon.c | 30 +- include/xen/xen-ops.h | 14 + 25 files changed, 5461 insertions(+), 5187 deletions(-) create mode 100644 arch/x86/xen/enlighten_hvm.c create mode 100644 arch/x86/xen/enlighten_pv.c create mode 100644 arch/x86/xen/enlighten_pvh.c create mode 100644 arch/x86/xen/mmu_hvm.c create mode 100644 arch/x86/xen/mmu_pv.c create mode 100644 arch/x86/xen/smp_hvm.c create mode 100644 arch/x86/xen/smp_pv.c create mode 100644 arch/x86/xen/suspend_hvm.c create mode 100644 arch/x86/xen/suspend_pv.c -- 2.9.3