From patchwork Tue Jun 19 01:41:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Roth X-Patchwork-Id: 10472883 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B3A1F601D7 for ; Tue, 19 Jun 2018 02:19:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A64F328D6B for ; Tue, 19 Jun 2018 02:19:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 97A2D28D75; Tue, 19 Jun 2018 02:19:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DFA2B28D6B for ; Tue, 19 Jun 2018 02:19:09 +0000 (UTC) Received: from localhost ([::1]:38571 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fV6Ef-00026Q-2R for patchwork-qemu-devel@patchwork.kernel.org; Mon, 18 Jun 2018 22:19:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45255) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fV5hT-00012X-2f for qemu-devel@nongnu.org; Mon, 18 Jun 2018 21:44:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fV5hR-00084i-US for qemu-devel@nongnu.org; Mon, 18 Jun 2018 21:44:51 -0400 Received: from mail-ot0-x244.google.com ([2607:f8b0:4003:c0f::244]:32773) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fV5hR-00084Z-OO; Mon, 18 Jun 2018 21:44:49 -0400 Received: by mail-ot0-x244.google.com with SMTP id h6-v6so20789624otj.0; Mon, 18 Jun 2018 18:44:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=qM7TMfZHVkWFdrMEC1+1ffvTVguQ/3VrwQVoT10JH14=; b=mFc38u/p8aK3a1Ov+0ElQ5MG4rB37efgAJiUAuQZQ4i208Kp5V85cSaDw3e4gNSzkU K0OR39EfR1CT22trjt/QWpoH3YiPLzyZeIwEtmcmt+ZOAXKqWl+xLJWVQLt1SLBsVnOJ NnBgReAxH06ZJB9QAekWAfKpfKCuXehMZOJzfnOUO+51SQoT4j4NUTAu06ONjgutOn6d bsNFNClI+bgqjh8sFf0us8Di0Xlqt8V8BYqKazsK6WiPZS+n/62r59vAW6vw6YwHToQ4 +J0qx5aSXxAnyj2CIWyPT4w0DtE/qsgsctpuqJdBAhzp2iSUSxL+AUxuxUhea5MT2zDD 8QJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=qM7TMfZHVkWFdrMEC1+1ffvTVguQ/3VrwQVoT10JH14=; b=p+Xyxxw/QPqeAl5qaX/++DPtwSpuHk0k0QPowyglxLNO93EiCqhmrtE1hhDoE0QJH/ IZI1ISyKEcznpUBUuv5RxgAM7qxDqmHDu2/ew51gIMy5iiTfozkN1A+mtei3BlLZA5fX /DqzLLcCwh1Nh31FmoeQmftTQ71aDrmxkjYsIKGyvbUYyFCX6V69913MlBEDWbqMLDf/ PRWxBkY0UF1Ys++G/TDjU5DTQ7PhM2Pcasr7ldB9yuPrQRneTXkyLMXtv8Y/p++Vn+hL XVnkNekR9cSjnUIljPW4aJcKSsIGZepsxW9671HGPUrejoYd9fre2BBTrXFGb5pNjV3n PSbQ== X-Gm-Message-State: APt69E04JVk1J6pmS+379wdnJQm8d2GNN9zLlK1maMT+F9EFB4dBXlzV yZgVu8dBXEtqb4ILfRZ1TTEHxBdQ X-Google-Smtp-Source: ADUXVKK2KSrjao0PfCYm4vec0E7zaQ8R7NXvfF0M4glVmz34MqIb47zRac9wOssVT64LdxVvwQGZRQ== X-Received: by 2002:a9d:2713:: with SMTP id r19-v6mr9899208ota.93.1529372688583; Mon, 18 Jun 2018 18:44:48 -0700 (PDT) Received: from localhost ([2600:1700:70:e488:b0ee:9bda:ee6f:91be]) by smtp.gmail.com with ESMTPSA id t77-v6sm7293535oie.3.2018.06.18.18.44.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 18 Jun 2018 18:44:47 -0700 (PDT) From: Michael Roth To: qemu-devel@nongnu.org Date: Mon, 18 Jun 2018 20:41:47 -0500 Message-Id: <20180619014319.28272-22-mdroth@linux.vnet.ibm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180619014319.28272-1-mdroth@linux.vnet.ibm.com> References: <20180619014319.28272-1-mdroth@linux.vnet.ibm.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4003:c0f::244 Subject: [Qemu-devel] [PATCH 021/113] loader: don't perform overlapping address check for memory region ROM images X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Cave-Ayland , qemu-stable@nongnu.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Mark Cave-Ayland All memory region ROM images have a base address of 0 which causes the overlapping address check to fail if more than one memory region ROM image is present, or an existing ROM image is loaded at address 0. Make sure that we ignore the overlapping address check in rom_check_and_register_reset() if this is a memory region ROM image. In particular this fixes the "rom: requested regions overlap" error on startup when trying to run qemu-system-sparc with a -kernel image since commit 7497638642: "tcx: switch to load_image_mr() and remove prom_addr hack". Suggested-by: Peter Maydell Reviewed-by: Peter Maydell Signed-off-by: Mark Cave-Ayland (cherry picked from commit ca316c11526a1bc221fb542bdce6bac7238dde69) Signed-off-by: Michael Roth --- hw/core/loader.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/hw/core/loader.c b/hw/core/loader.c index 91669d65aa..c08f130461 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -1104,20 +1104,22 @@ int rom_check_and_register_reset(void) if (rom->fw_file) { continue; } - if ((addr > rom->addr) && (as == rom->as)) { - fprintf(stderr, "rom: requested regions overlap " - "(rom %s. free=0x" TARGET_FMT_plx - ", addr=0x" TARGET_FMT_plx ")\n", - rom->name, addr, rom->addr); - return -1; + if (!rom->mr) { + if ((addr > rom->addr) && (as == rom->as)) { + fprintf(stderr, "rom: requested regions overlap " + "(rom %s. free=0x" TARGET_FMT_plx + ", addr=0x" TARGET_FMT_plx ")\n", + rom->name, addr, rom->addr); + return -1; + } + addr = rom->addr; + addr += rom->romsize; + as = rom->as; } - addr = rom->addr; - addr += rom->romsize; section = memory_region_find(rom->mr ? rom->mr : get_system_memory(), rom->addr, 1); rom->isrom = int128_nz(section.size) && memory_region_is_rom(section.mr); memory_region_unref(section.mr); - as = rom->as; } qemu_register_reset(rom_reset, NULL); roms_loaded = 1;