From patchwork Tue Sep 20 14:54:14 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 672333 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org 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 ozlabs.org (Postfix) with ESMTPS id 3sdnFc6Q6Fz9t1P for ; Wed, 21 Sep 2016 01:47:32 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b=TTlp6Kq5; dkim-atps=neutral Received: from localhost ([::1]:36216 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bmNGc-00046Z-Ew for incoming@patchwork.ozlabs.org; Tue, 20 Sep 2016 11:47:30 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42198) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bmMyY-00079c-3O for qemu-devel@nongnu.org; Tue, 20 Sep 2016 11:28:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bmMyS-0008Gk-O7 for qemu-devel@nongnu.org; Tue, 20 Sep 2016 11:28:49 -0400 Received: from mail-sn1nam02on0080.outbound.protection.outlook.com ([104.47.36.80]:31744 helo=NAM02-SN1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bmMyS-0008Gc-DA for qemu-devel@nongnu.org; Tue, 20 Sep 2016 11:28:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=kC9tbgqcivCRJHzB0NhFaff8Pw8VdUZVzHzgSUs9TJ4=; b=TTlp6Kq5P7YXiawK6uGIFZq0wUyVphJW1LDoFEHoxgbI4tLXGMyX2SBY0NH7LoFprYkZY1fmU6P3qVBT5IuCy5ykVL3NdCYUcjbRuYxY4pkBmo1c+8XlFPWRCUtX5y44UXNCDL2fd1Cx5Gv4J/CmmmM5S9uX1IxJfEN/4NnkZDA= Received: from BY2PR02CA0113.namprd02.prod.outlook.com (10.163.44.167) by CY1PR02MB1691.namprd02.prod.outlook.com (10.162.161.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.629.8; Tue, 20 Sep 2016 14:55:20 +0000 Received: from BL2NAM02FT018.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e46::209) by BY2PR02CA0113.outlook.office365.com (2a01:111:e400:5261::39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.629.8 via Frontend Transport; Tue, 20 Sep 2016 14:55:20 +0000 Authentication-Results: spf=fail (sender IP is 149.199.60.96) smtp.mailfrom=xilinx.com; redhat.com; dkim=none (message not signed) header.d=none; redhat.com; dmarc=none action=none header.from=xilinx.com; Received-SPF: Fail (protection.outlook.com: domain of xilinx.com does not designate 149.199.60.96 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.96; helo=xsj-tvapsmtpgw01; Received: from xsj-tvapsmtpgw01 (149.199.60.96) by BL2NAM02FT018.mail.protection.outlook.com (10.152.77.170) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.629.5 via Frontend Transport; Tue, 20 Sep 2016 14:55:17 +0000 Received: from 172-16-1-203.xilinx.com ([172.16.1.203]:50685 helo=xsj-tvapsmtp02.xilinx.com) by xsj-tvapsmtpgw01 with esmtp (Exim 4.63) (envelope-from ) id 1bmMS4-0008Gl-E8; Tue, 20 Sep 2016 07:55:16 -0700 Received: from [127.0.0.1] (port=47512 helo=tsj-smtp-dlp1.xlnx.xilinx.com) by xsj-tvapsmtp02.xilinx.com with esmtp (Exim 4.63) (envelope-from ) id 1bmMS4-00074A-Cc; Tue, 20 Sep 2016 07:55:16 -0700 Received: from xsj-tvapsmtp02 (xsj-tvapsmtp02.xilinx.com [172.16.1.203]) by tsj-smtp-dlp1.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id u8KEm91H008948; Tue, 20 Sep 2016 07:48:09 -0700 Received: from [172.19.74.182] (port=57006 helo=xsjalistai50.xilinx.com) by xsj-tvapsmtp02 with esmtp (Exim 4.63) (envelope-from ) id 1bmMS3-000747-Jp; Tue, 20 Sep 2016 07:55:15 -0700 From: Alistair Francis To: , Date: Tue, 20 Sep 2016 07:54:14 -0700 Message-ID: <85f86b94ea94879e7ce8b12e85ac8de26658f7eb.1474331683.git.alistair.francis@xilinx.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: X-RCIS-Action: ALLOW X-TM-AS-MML: disable X-TM-AS-Product-Ver: IMSS-7.1.0.1679-8.0.0.1202-22588.005 X-TM-AS-Result: No--13.145-7.0-31-10 X-imss-scan-details: No--13.145-7.0-31-10 X-TMASE-MatchedRID: rM+ASnyCBigal4bwVwO8G46MisxJraxHUAjrAJWsTe80QmmUihPzrCQB aQmIzU7rBy+/NpifOmiuLF4JBlEobxLmJd2F/yFu4pdq9sdj8LWcgz9a61Hb4WLyOVj3Wj5MEFM wn2lXrJfk79hsfy1e7DctK0KUOQ1lZpfqU/Ltqbtc/msUC5wFQQNSVkz3e8zDpagkuUYwXN09vH Qc8DvXUFWS2wsLnK7AIUmX+V9fKhLb1od9UbTWPHTnOygHVQpOu56wFPSkMVH5I78USsbn0nWCd 6QvVzbejsRhVFGbIhC1G8a1bjbb5o0GdWKgGbBh5O5PclyYqqoSNRDlFTpYku5pa6tB8+lNMnad wj0BvkV7bEUz51WYDbpjAjMHHtZlHxPMjOKY7A8LbigRnpKlKSPzRlrdFGDwPsjsTrBrQPxObvA cW/iR9b/2OSS0Xfx38VqGxI14Kp8aQXmGqcs2Fg== X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.96; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(9786002)(8676002)(50466002)(8936002)(86362001)(189998001)(87936001)(92566002)(626004)(85426001)(33646002)(48376002)(118296001)(4326007)(2906002)(50986999)(50226002)(5001770100001)(36756003)(76176999)(81156014)(305945005)(81166006)(71366001)(7846002)(2950100001)(47776003)(64026002)(5003940100001)(77096005)(105606002)(356003)(586003)(11100500001)(229853001)(19580405001)(106466001)(5660300001)(19580395003)(49343001)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR02MB1691; H:xsj-tvapsmtpgw01; FPR:; SPF:Fail; PTR:unknown-60-96.xilinx.com; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2NAM02FT018; 1:eMv5RG/OxQzvOUqJZi8LOv6dAfMvZHVxveQsocSCj3wX6MbDk/USe10fEjPI2whRSAGTHUP/0sq74GtzOzrR4IXDIslY4DWGhPCNLGGGBcSfgUelB0PIZOX2c/AIHwIvyZemLxGldokpyAdsZDwMLStw77l7UnotSAyEx9Fk7dnZmVIR+PNqeu8Xx+JDUbJprec0ISsnDP9MDm2rQ+OlI5JRaPoJGAJw2ftcwl0gprv64qQdNCPX59Nk9LbXl9QppJ3DzvU/SeX6rRcqaOG3lYMmpE/7EpQcAzspSY6xoK9z/4h7qTy+N6lnpFPbQLyDYrj8U41vi0yMAkJJQ2HjSPVUDCib7O/SYc8SbCrOpxb3Ae98vGu3QY1Rzvcs1DLFFwpDtX4+6mQyVCWj+2yHbcfzy2oQYGR+SAsNQkjS140EtJBdS3pCsX2kTVEIB5fOh+Wu3EWZZ0Z3yxaOJmNhfaMIkTz01uYttNItHsERjlmoepUw23C1EvPlNsakFmY+1MsXll55UnD4lkpmmEknuElSSotbLvMsajzmvYi9GtE4EeVZDth14O51l4dyoT4aQMIk1comBH+M9c3CwWKGDR+lfpphTOKKylpXPv5W3Fk= MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 3c6b98c6-ae92-42c5-f497-08d3e1662420 X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1691; 2:oU+4UHIJYYruYsLbgpy0czvPYw3Ap8nzjyZ/dzPAMDGPpkRwxEeJ5WvLN1KTQQzTyX644qRnkDlGQEGDmNhdlLL4gjsdX9f/z2xWzolPFoEuZf1LJfcJfQWFhCcgjPSd0NrjcvNFc44LVoIhAw+RPAlI/g0hNfWAmVcmSa+suXzBBcIY4v+TpKc6Y4I6XoFc; 3:9nXznnXTfZQJcrP3FCEm6mYq0BHxbcpPU3OfGNShmx2qZH4xJXPm5+oLFLPFwf7M+e6Y6wxG8QWxaXomTTbSGa4E74sEVIKNXUcMef+VMpQeeoNxkw9PNkcvLNonltexOFh3qQzTxsC70AlkwAdvr5YBVbKddJtvE1tB5xqqT/fe1GpfpjLHgozBFX9unvd74HJ4W5fpVjqbw0WksfyAXtDnkpD+N8MGEgEXRrEPvGw= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR02MB1691; X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1691; 25:jna5thSQkxoPRU09fHzwskW13LSPsp5BaSUzwcYVQ3ItM35opqylc9Nlu2N1KhPnRexPwC0n3Rz1l1a6XPQXy+YvY8SfltmmKfsaEaNkOHYaJlwH/3f/u4dxqBk65rNKE1gOm49R//Ir8bZFxAfISWXl6RSiyer5NT2/GPGUJakVJ/mCM7sxOjYdmuZjPjYdDHTsIv6F80yZwLyRFOs3wKblRAeG6QuTek5kskdzWOxKFI12PehHliseHHDYTUd75buPGminf5ZmrIWEYWPEJpdrrAjHfmwiyXEcUKzAUyvJ8SpgDiabj6bH9tktP9T0gi45ObmTCyLHzCrLbb3i89MAmq8JhM0DGcyQX0e/4clic0o3wvDusie4nRT4PNcjRCN8qAUdTkYNwbEwJCUyDLBwsWVmKOj5SYcwMi2e2NCZ7wAzrfU48had9WgYeWLlWH+f00iiZi2P6ApPV4XELtw0UNVRduINsXxy5rNnVekaPyVVU6DjO817Syuqdxnjsofp3pfDcR9UlXwldvkYc9icBCxchvk5EaCtUoRTWjz5l6nbapeqYDfFvEJ/yl8pFmMulG3yTHedd7aSyzBZjKHJoIsBeOveLCDW2LeyyX3wUtDCBwPTCP1GiYoQT6/t+fo8MTA6F44tnmSbQJPDTic8kaYWzT4kB22GyvCVQpbmJzpRc+VkTrIWvkVOx+87LagZSA89LtJJop4w+ZLz/ftATNth22jX6L3EvDBFnZMXlA2CSBpFITcXX3PrrelAB1AOgti9b8aQvyf6KON6bdsEFdMRwioUZpR7Rrv/DEA= X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1691; 31:80Xg/0968QL+cTTV+4dJ0h7QvMt0vovNRCaqYIrrk92uG7rMUJZ6orm+LiI9TZFCNi2yvkpReC9+3z5fV+v2Segm6xQEqrapRlaDov3FNOWJLKVJNI/uBDOX76CTthBuOpxe5Yn1u4V2xfpz1LYXpReGzG9GA2t1hgqYba/r7G21WEIkehgguVfKBRaSekUWe/qv3pIwRQnIjSlESmYUbiPix9hsH4yUWZl5ULX2PiQ=; 20:Sq511J2wnASErNZAN5BGIzdm518CeuGYJcbViIHtl4/Afzi95MIovPmUes+irZr0DPo+oNY/x68PZ3Ts+XWrzfOPl4gFjuP6yq4Ry64vmamqiblhTS7iNodicNSWNbicH0WKOBGM3BuJ+vEeJjWGl+mTnKZV8wBm0dyIs+S5nJXXAPUSQr49krokwEo2AJLr4bQP+UubXeHbSf/CpfIEp6C6lq/1Imxc963mIx/FeD3P7QygdcyrS7fhuDM9a84nifX5Lp3PhVVds97X5+V+TINl41rAInEFBNgasNBAnKu0VzCpEgoEnO8ROsKBH4OZZ+g3gUTvnrpFPCf9u/kki7g0myL1q22z+zHW9mDPW136vHKji5JpFxAK8/uvR8W7FfM72dx72PNCt8pX2sz/jkTakOMJydWI6legBN/1o3wfm+zQfsFf1TSV4GJrx+eskdIAZa0rhnar/K1gyPuP2mqqx6rvOKaZU6IdqI3ViAVWVUNYUDUj4if9Uf/uyCgg X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(60795455431006)(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(13018025)(13017025)(13024025)(13015025)(13023025)(3002001)(10201501046)(6055026); SRVR:CY1PR02MB1691; BCL:0; PCL:0; RULEID:; SRVR:CY1PR02MB1691; X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1691; 4:Ixf0kk7oiPqV+kLuk/dZfh9DEDRdzjcugrqLNEb/zQKTTP0IhpTMwBnYD6jEVSC1XKwdcPqsMMDUhgMomzElDUY176JCpj88jcwbA9s6W20nmWBK6xUE1uUJYFWDBqBDd7s36DX498SIw9l9mM/1s7vn/4B8NKmezuiwQ2Avj2uOID9etkDjarzlFOvjFLsHgntL6PoJtSggb68wCHTdRSS1++NTITNJzcz1KW55TVBBAbm/jz6n8BV7XlFpdu24jSR+/nN49TaqlJqVudxzfeoeaJ8xauMIPCXY0t3erfnklQZmmMmZPV+sJRZvvwIBZbkHd8oVfSnICJvmRxex7A4xf0qJUJzKaCUNBrgHATWEyyqOeHppG1F0vTiI0BLUbPZCp/KlSImeg7Vr+tsr+CSGEZB0Xi0yc8hteliPG/LunodMNpWey0eR4NQdPezWebVWNP4O6Y02H4KThwHKEEB8RPPyw64wzXimKcCcrRKl9JvFt4fc+/fwmcYKi2gzJaGamgzwZWkBJKcQGdgYMm6Hcb2qfMeMgTLPVDZZsbvft9a1VVkZU40IpgxIsKuis9+omc9X2lsURcLHBvYIvw== X-Forefront-PRVS: 0071BFA85B X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR02MB1691; 23:VYF5sn09uXFsD1myTbJRv52zXg3iuPV9oCedm0YkK?= =?us-ascii?Q?Bxu/MTeeMJhT5Z/ixKATyq6Z/F7YweNGOW3zbajlFl1LhL32/T3XLoC+JMoG?= =?us-ascii?Q?GeW0/yqTeHS+yZNlpmPqTDUAQxEU2Caw8C6bFFyEMSGgy+Ynqm8tgDt79VrS?= =?us-ascii?Q?l+ie9n5Y2tP9hFnOWeK2HVF6kU+tZUALs4MMlP1UPEw9pfOHhpowZkMusTEM?= =?us-ascii?Q?LuFZxJLCMycAe4tUTceI3laHnNCFLvCrF8XoDFwFFGzRLo4lUQCN91XSc+La?= =?us-ascii?Q?EZKUS8JPRgm2UHsirBSLJjuFdq5qunF25W1UdF6h7n0+bYqMyUZ5rq+8XEGS?= =?us-ascii?Q?Ii9ppsJD/x86dmBYc9m9SBMYVsG5gqw4KanrRgTLf8rOpihW4iokmlehaeqC?= =?us-ascii?Q?IlZWEDm3vfDgg8RcgtsFBbYilg7dhhLzylXf2lFQoMJzRGXjUTMwCJvBXFkl?= =?us-ascii?Q?6rvfu8orMMtKxXzDk3owWRiXlCdMNbIstkcAaZh4gsoU/+CGMChc8vIvENT3?= =?us-ascii?Q?U7xn/BDiCZlD4ERPka7jpE2yWc+LFjueUG9VfD1rWO21pAsnw8oJaoRAfskC?= =?us-ascii?Q?r78Qo1m0asTBv6HEVEfzHhBgtHxNjgRua3GyATyv7T79bVxa5qphm9JnzXhH?= =?us-ascii?Q?3nztOPlMJXk/pTDD65RzhV5co3WY8XUGt8n1oMd2z/Vrt5pV/EzUJFCC2oSy?= =?us-ascii?Q?MI8JOUSjmpt9xDdVMlNvhwuq9KeGoH0wITSD4Z3TZr3wOyBE7xby6Iv06HvF?= =?us-ascii?Q?BuP96/Ws39c5bMsEKg5ot4+v61eTwShCfaR3C7Hm7QrD/s8dwHIZu02IKxmi?= =?us-ascii?Q?vPoLA5pGoVADghiHOTCoLUEGRFfFeJ64+ViZA/Sp1uoS0R8tG7yp+KwifN88?= =?us-ascii?Q?XT7y6t+Ccb5L69sPWr420I+ugzIQZXMRoTqSon8D6xuP9hslHbQgZ6x/kn88?= =?us-ascii?Q?ouEeSLOyWS45g6eIGjpT1/PmmXV3xr8UmSh1KfDJIDWcamtxMOkMs4UElCtX?= =?us-ascii?Q?XWmBXYJ3VKWJ9lzWIwkqM7iTFGu8VKjSsHcnWIF/+rsqw2yLsZMOqrHEWg0O?= =?us-ascii?Q?+TOJhuZ1ihMQrwWurI8uaV5zV/5IbWDPQJKBAZ5V0KkS3KtJdaTurTzRz3hh?= =?us-ascii?Q?atHr4mzti2NbVZ5ZGlCaST7Yvs0HTUVBL7DdvSUKiXq/jOF8ZgwtXmvmzMLI?= =?us-ascii?Q?67RLptgBH+aW1U=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR02MB1691; 6:QNqiclL20WaCVA5JDJLZanPje2bfHse0efjV2xJ6+p00XxqyGzBGiiBjaAOPaRA9N7ilylve07Gno4gJT5nTSFQbAz86mTGT2zATG37mmYbWNuN/uub0wqY+NB285hrgS9tV4e4Wxx6HiotzQb8lK+qL7yPepU6PxoXnVso+XJ9ZUIt/wlPX0hYM8/S2UcueG+0EfyVhrVkt+i+exmhU55CCTy2WqlKzmuVmTSb15XliW4eJLY/O8WyO1xhsGCGwjbBdSrKdCrTuX6nKK9x85ybrzBkTMgukE3cfymOdVn0kQBCewhfoSouHfMNrXsan1fODacAAl0ctRPE7R1egMQ==; 5:3Vmt3cBk0Uq+LMDYO/6AymrCvYtugCgFkkp3ZR6BLfcOJaA3QFD3vi8jHLe5T0SHR2PwQk5BEBOkvg7gi6fEe/mmZ5QLQgliVPIkRQzuYUMUtnEn19I1yPkr9WyPtChlEtgJZDSfUVGg57nc8Ie8Dw==; 24:3H5YwQShHTppndzuiw4u58My9ayyZHYVmDLQHB5E5duwcxuIsZK9hgLjd15LTrFtJeIiMRSrLNUqQpT4uwzLLwqcdNaEyiItkmhri3XJMgk=; 7:WjI6sHakdxZkQ5AfZ+Mp2elvxo2WtKFvpOpKUGE1aitkyTnZ/v7BcWbUtDWqCWmHiPYwXBFvtnDlLvajzX9mTQwjTV6fBkSV/fhNCvn4Sr0SChHJcqdHQclMc0QCijTBuG7s4xglQpxmoOLhI+e5TMq2CR05Ap92+6myAl+AR5E44RQcgz1Z8pJrmIyzeRV61ZYmV1ULtKiAPSaItjJvan1MuObQ/cNL/97mpIBFoNTNLPVEeqX+UIDnOn52CO2yRsnaBR3ntbWqyG7ey7fQ7DimbOO5a9pCc8hRLrPh/M4eDmFQ8+PQQdB1itEB/znv SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Sep 2016 14:55:17.4347 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.60.96]; Helo=[xsj-tvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR02MB1691 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.36.80 Subject: [Qemu-devel] [PATCH v11 3/8] loader: Allow a custom AddressSpace when loading ROMs 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: cov@codeaurora.org, crosthwaitepeter@gmail.com, pbonzini@redhat.com, armbru@redhat.com, alistair.francis@xilinx.com Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" When loading ROMs allow the caller to specify an AddressSpace to use for the load. Signed-off-by: Alistair Francis --- V11: - Fix ordering logic V10: - Set the rom address space instead of leaving it NULL - Cleanup ordering logic V9: - Fixup the ROM ordering - Don't allow address space and memory region to be specified V8: - Introduce an RFC version of AddressSpace loading support hw/core/loader.c | 43 ++++++++++++++++++++++++++++++++++--------- include/hw/elf_ops.h | 2 +- include/hw/loader.h | 10 ++++++---- 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/hw/core/loader.c b/hw/core/loader.c index 6b61f29..56c593e 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -777,6 +777,7 @@ struct Rom { uint8_t *data; MemoryRegion *mr; + AddressSpace *as; int isrom; char *fw_dir; char *fw_file; @@ -788,6 +789,12 @@ struct Rom { static FWCfgState *fw_cfg; static QTAILQ_HEAD(, Rom) roms = QTAILQ_HEAD_INITIALIZER(roms); +static inline bool rom_order_compare(Rom *rom, Rom *item) +{ + return (rom->as > item->as) || + (rom->as == item->as && rom->addr >= item->addr); +} + static void rom_insert(Rom *rom) { Rom *item; @@ -796,10 +803,16 @@ static void rom_insert(Rom *rom) hw_error ("ROM images must be loaded at startup\n"); } - /* list is ordered by load address */ + /* The user didn't specify an address space, this is the default */ + if (!rom->as) { + rom->as = &address_space_memory; + } + + /* List is ordered by load address in the same address space */ QTAILQ_FOREACH(item, &roms, next) { - if (rom->addr >= item->addr) + if (rom_order_compare(rom, item)) { continue; + } QTAILQ_INSERT_BEFORE(item, rom, next); return; } @@ -833,16 +846,25 @@ static void *rom_set_mr(Rom *rom, Object *owner, const char *name) int rom_add_file(const char *file, const char *fw_dir, hwaddr addr, int32_t bootindex, - bool option_rom, MemoryRegion *mr) + bool option_rom, MemoryRegion *mr, + AddressSpace *as) { MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine()); Rom *rom; int rc, fd = -1; char devpath[100]; + if (as && mr) { + fprintf(stderr, "Specifying an Address Space and Memory Region is " \ + "not valid when loading a rom\n"); + /* We haven't allocated anything so we don't need any cleanup */ + return -1; + } + rom = g_malloc0(sizeof(*rom)); rom->name = g_strdup(file); rom->path = qemu_find_file(QEMU_FILE_TYPE_BIOS, rom->name); + rom->as = as; if (rom->path == NULL) { rom->path = g_strdup(file); } @@ -969,7 +991,7 @@ MemoryRegion *rom_add_blob(const char *name, const void *blob, size_t len, * memory ownership of "data", so we don't have to allocate and copy the buffer. */ int rom_add_elf_program(const char *name, void *data, size_t datasize, - size_t romsize, hwaddr addr) + size_t romsize, hwaddr addr, AddressSpace *as) { Rom *rom; @@ -979,18 +1001,19 @@ int rom_add_elf_program(const char *name, void *data, size_t datasize, rom->datasize = datasize; rom->romsize = romsize; rom->data = data; + rom->as = as; rom_insert(rom); return 0; } int rom_add_vga(const char *file) { - return rom_add_file(file, "vgaroms", 0, -1, true, NULL); + return rom_add_file(file, "vgaroms", 0, -1, true, NULL, NULL); } int rom_add_option(const char *file, int32_t bootindex) { - return rom_add_file(file, "genroms", 0, bootindex, true, NULL); + return rom_add_file(file, "genroms", 0, bootindex, true, NULL, NULL); } static void rom_reset(void *unused) @@ -1008,8 +1031,8 @@ static void rom_reset(void *unused) void *host = memory_region_get_ram_ptr(rom->mr); memcpy(host, rom->data, rom->datasize); } else { - cpu_physical_memory_write_rom(&address_space_memory, - rom->addr, rom->data, rom->datasize); + cpu_physical_memory_write_rom(rom->as, rom->addr, rom->data, + rom->datasize); } if (rom->isrom) { /* rom needs to be written only once */ @@ -1031,12 +1054,13 @@ int rom_check_and_register_reset(void) hwaddr addr = 0; MemoryRegionSection section; Rom *rom; + AddressSpace *as = NULL; QTAILQ_FOREACH(rom, &roms, next) { if (rom->fw_file) { continue; } - if (addr > rom->addr) { + 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", @@ -1049,6 +1073,7 @@ int rom_check_and_register_reset(void) 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; diff --git a/include/hw/elf_ops.h b/include/hw/elf_ops.h index 5038c7f..4744d11 100644 --- a/include/hw/elf_ops.h +++ b/include/hw/elf_ops.h @@ -405,7 +405,7 @@ static int glue(load_elf, SZ)(const char *name, int fd, snprintf(label, sizeof(label), "phdr #%d: %s", i, name); /* rom_add_elf_program() seize the ownership of 'data' */ - rom_add_elf_program(label, data, file_size, mem_size, addr); + rom_add_elf_program(label, data, file_size, mem_size, addr, NULL); total_size += mem_size; if (addr < low) diff --git a/include/hw/loader.h b/include/hw/loader.h index c59673d..815a8d6 100644 --- a/include/hw/loader.h +++ b/include/hw/loader.h @@ -120,14 +120,14 @@ extern bool rom_file_has_mr; int rom_add_file(const char *file, const char *fw_dir, hwaddr addr, int32_t bootindex, - bool option_rom, MemoryRegion *mr); + bool option_rom, MemoryRegion *mr, AddressSpace *as); MemoryRegion *rom_add_blob(const char *name, const void *blob, size_t len, size_t max_len, hwaddr addr, const char *fw_file_name, FWCfgReadCallback fw_callback, void *callback_opaque); int rom_add_elf_program(const char *name, void *data, size_t datasize, - size_t romsize, hwaddr addr); + size_t romsize, hwaddr addr, AddressSpace *as); int rom_check_and_register_reset(void); void rom_set_fw(FWCfgState *f); void rom_set_order_override(int order); @@ -137,11 +137,13 @@ void *rom_ptr(hwaddr addr); void hmp_info_roms(Monitor *mon, const QDict *qdict); #define rom_add_file_fixed(_f, _a, _i) \ - rom_add_file(_f, NULL, _a, _i, false, NULL) + rom_add_file(_f, NULL, _a, _i, false, NULL, NULL) #define rom_add_blob_fixed(_f, _b, _l, _a) \ rom_add_blob(_f, _b, _l, _l, _a, NULL, NULL, NULL) #define rom_add_file_mr(_f, _mr, _i) \ - rom_add_file(_f, NULL, 0, _i, false, _mr) + rom_add_file(_f, NULL, 0, _i, false, _mr, NULL) +#define rom_add_file_as(_f, _as, _i) \ + rom_add_file(_f, NULL, 0, _i, false, NULL, _as) #define PC_ROM_MIN_VGA 0xc0000 #define PC_ROM_MIN_OPTION 0xc8000