From patchwork Fri Aug 1 16:01:13 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefano Stabellini X-Patchwork-Id: 34721 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ig0-f197.google.com (mail-ig0-f197.google.com [209.85.213.197]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id D195C202A1 for ; Fri, 1 Aug 2014 16:03:22 +0000 (UTC) Received: by mail-ig0-f197.google.com with SMTP id r2sf3861522igi.0 for ; Fri, 01 Aug 2014 09:03:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:mime-version:cc:subject:precedence:list-id :list-unsubscribe:list-archive:list-post:list-help:list-subscribe :errors-to:sender:x-original-sender :x-original-authentication-results:mailing-list:content-type; bh=MYjSddn+X9NVUJF3SJoRpIunj3WOYhnp5tMN35BDOLc=; b=KgW5maz/mLfASQyoQIkwikz5q92Gs8aGjBYURI9YHb+1Yea6uBpEIY6sAh65YFq3dp 63LFGWQr8FRjG3YUr2xfyzr4NLWKrXghreDG023ueLDj196yNGF8RPAYIT+7k3laHVmk awaCgw4utWKzwyxdeRkNvZXYTY+/tymd4wRvtjbpnQ2yNHNC/Y+ByfOXdT7EU7ZOcitq acGm9lmaZublGvxYQi+WhFn0+yhWcZaekqEpR4tE7huV1b691wHjFMfBPXSHEcws1OXW j1hd/eJ+khO4cHZy9H6Lib+387oxwKdOiynNqlpEJqmLWtGZbRBGcvP8AXVeBmAMnKrX 2GDg== X-Gm-Message-State: ALoCoQkf3lag9amobcJ1bvzi+L8SE1/OUm3YVeAzO0pVRF3qANWvgV4r79YK4yZicUwgENjwxsCI X-Received: by 10.50.73.168 with SMTP id m8mr2390886igv.7.1406909002407; Fri, 01 Aug 2014 09:03:22 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.35.232 with SMTP id n95ls1381508qgn.23.gmail; Fri, 01 Aug 2014 09:03:22 -0700 (PDT) X-Received: by 10.53.10.65 with SMTP id dy1mr2627086vdd.92.1406909002220; Fri, 01 Aug 2014 09:03:22 -0700 (PDT) Received: from mail-vc0-f173.google.com (mail-vc0-f173.google.com [209.85.220.173]) by mx.google.com with ESMTPS id sd9si7377172vdb.25.2014.08.01.09.03.22 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 01 Aug 2014 09:03:22 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.173 as permitted sender) client-ip=209.85.220.173; Received: by mail-vc0-f173.google.com with SMTP id hy10so6981798vcb.32 for ; Fri, 01 Aug 2014 09:03:22 -0700 (PDT) X-Received: by 10.52.248.146 with SMTP id ym18mr6368931vdc.8.1406909002115; Fri, 01 Aug 2014 09:03:22 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.221.37.5 with SMTP id tc5csp121982vcb; Fri, 1 Aug 2014 09:03:21 -0700 (PDT) X-Received: by 10.229.19.8 with SMTP id y8mr10568658qca.16.1406909001298; Fri, 01 Aug 2014 09:03:21 -0700 (PDT) Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id f8si16190502qar.120.2014.08.01.09.03.20 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Fri, 01 Aug 2014 09:03:21 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Received: from localhost ([::1]:40305 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XDFIe-00005G-DO for patch@linaro.org; Fri, 01 Aug 2014 12:03:20 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54821) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XDFHo-0007i7-5L for qemu-devel@nongnu.org; Fri, 01 Aug 2014 12:02:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XDFHj-0002Al-PQ for qemu-devel@nongnu.org; Fri, 01 Aug 2014 12:02:28 -0400 Received: from smtp02.citrix.com ([66.165.176.63]:53570) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XDFHj-0002AH-Ad for qemu-devel@nongnu.org; Fri, 01 Aug 2014 12:02:23 -0400 X-IronPort-AV: E=Sophos;i="5.01,780,1400025600"; d="scan'208";a="158517012" Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com (10.13.107.78) with Microsoft SMTP Server id 14.3.181.6; Fri, 1 Aug 2014 12:02:22 -0400 Received: from kaball.uk.xensource.com ([10.80.2.59]) by ukmail1.uk.xensource.com with esmtp (Exim 4.69) (envelope-from ) id 1XDFHi-0006OT-1J; Fri, 01 Aug 2014 17:02:22 +0100 From: Stefano Stabellini To: Date: Fri, 1 Aug 2014 17:01:13 +0100 Message-ID: <1406908873-17256-3-git-send-email-stefano.stabellini@eu.citrix.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: References: MIME-Version: 1.0 X-DLP: MIA2 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 66.165.176.63 Cc: xen-devel@lists.xensource.com, Chunyan Liu , qemu-devel@nongnu.org, Stefano.Stabellini@eu.citrix.com Subject: [Qemu-devel] [PULL 3/3] qemu: support xen hvm direct kernel boot X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: stefano.stabellini@eu.citrix.com X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.220.173 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 From: Chunyan Liu qemu side patch to support xen HVM direct kernel boot: if -kernel exists, calls xen_load_linux(), which will read kernel/initrd and add a linuxboot.bin or multiboot.bin option rom. The linuxboot.bin/multiboot.bin will load kernel/initrd and jump to execute kernel directly. It's working when xen uses seabios. During this work, found the 'kvmvapic' is in option_rom list, it should not be there in xen case. Set s->vapic_control = 0 in xen_apic_realize() to handle that. Signed-off-by: Chunyan Liu Acked-by: Stefano Stabellini Acked-by: Michael S. Tsirkin --- hw/i386/pc.c | 25 +++++++++++++++++++++++++ hw/i386/pc_piix.c | 7 +++++++ hw/i386/xen/xen_apic.c | 1 + include/hw/i386/pc.h | 5 +++++ 4 files changed, 38 insertions(+) diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 2cf22b1..9e58982 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -1190,6 +1190,31 @@ void pc_acpi_init(const char *default_dsdt) } } +FWCfgState *xen_load_linux(const char *kernel_filename, + const char *kernel_cmdline, + const char *initrd_filename, + ram_addr_t below_4g_mem_size, + PcGuestInfo *guest_info) +{ + int i; + FWCfgState *fw_cfg; + + assert(kernel_filename != NULL); + + fw_cfg = fw_cfg_init(BIOS_CFG_IOPORT, BIOS_CFG_IOPORT + 1, 0, 0); + rom_set_fw(fw_cfg); + + load_linux(fw_cfg, kernel_filename, initrd_filename, + kernel_cmdline, below_4g_mem_size); + for (i = 0; i < nb_option_roms; i++) { + assert(!strcmp(option_rom[i].name, "linuxboot.bin") || + !strcmp(option_rom[i].name, "multiboot.bin")); + rom_add_option(option_rom[i].name, option_rom[i].bootindex); + } + guest_info->fw_cfg = fw_cfg; + return fw_cfg; +} + FWCfgState *pc_memory_init(MachineState *machine, MemoryRegion *system_memory, ram_addr_t below_4g_mem_size, diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 9694f88..4f22be8 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -182,6 +182,13 @@ static void pc_init1(MachineState *machine, fw_cfg = pc_memory_init(machine, system_memory, below_4g_mem_size, above_4g_mem_size, rom_memory, &ram_memory, guest_info); + } else if (machine->kernel_filename != NULL) { + /* For xen HVM direct kernel boot, load linux here */ + fw_cfg = xen_load_linux(machine->kernel_filename, + machine->kernel_cmdline, + machine->initrd_filename, + below_4g_mem_size, + guest_info); } gsi_state = g_malloc0(sizeof(*gsi_state)); diff --git a/hw/i386/xen/xen_apic.c b/hw/i386/xen/xen_apic.c index 63bb7f7..f5acd6a 100644 --- a/hw/i386/xen/xen_apic.c +++ b/hw/i386/xen/xen_apic.c @@ -40,6 +40,7 @@ static void xen_apic_realize(DeviceState *dev, Error **errp) { APICCommonState *s = APIC_COMMON(dev); + s->vapic_control = 0; memory_region_init_io(&s->io_memory, OBJECT(s), &xen_apic_io_ops, s, "xen-apic-msi", APIC_SPACE_SIZE); diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index f4b9b2b..863eefb 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -188,6 +188,11 @@ PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size, void pc_pci_as_mapping_init(Object *owner, MemoryRegion *system_memory, MemoryRegion *pci_address_space); +FWCfgState *xen_load_linux(const char *kernel_filename, + const char *kernel_cmdline, + const char *initrd_filename, + ram_addr_t below_4g_mem_size, + PcGuestInfo *guest_info); FWCfgState *pc_memory_init(MachineState *machine, MemoryRegion *system_memory, ram_addr_t below_4g_mem_size,