From patchwork Fri Aug 28 00:16:48 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 511729 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 5F2A414016A for ; Fri, 28 Aug 2015 10:19:41 +1000 (AEST) Received: from localhost ([::1]:45314 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZV7ON-0002Gv-CV for incoming@patchwork.ozlabs.org; Thu, 27 Aug 2015 20:19:39 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58754) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZV7Ll-0007UL-7T for qemu-devel@nongnu.org; Thu, 27 Aug 2015 20:17:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZV7Lh-0004J9-Uy for qemu-devel@nongnu.org; Thu, 27 Aug 2015 20:16:57 -0400 Received: from mail-bn1on0070.outbound.protection.outlook.com ([157.56.110.70]:45305 helo=na01-bn1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZV7Lh-0004J5-QF for qemu-devel@nongnu.org; Thu, 27 Aug 2015 20:16:53 -0400 Received: from BN1AFFO11FD016.protection.gbl (10.58.52.32) by BN1AFFO11HUB010.protection.gbl (10.58.52.120) with Microsoft SMTP Server (TLS) id 15.1.256.10; Fri, 28 Aug 2015 00:16:52 +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 BN1AFFO11FD016.mail.protection.outlook.com (10.58.52.76) with Microsoft SMTP Server (TLS) id 15.1.256.10 via Frontend Transport; Fri, 28 Aug 2015 00:16:51 +0000 Received: from 172-16-1-203.xilinx.com ([172.16.1.203]:36766 helo=xsj-tvapsmtp02.xilinx.com) by xsj-tvapsmtpgw01 with esmtp (Exim 4.63) (envelope-from ) id 1ZV7Le-0000Sr-UC; Thu, 27 Aug 2015 17:16:50 -0700 Received: from [127.0.0.1] (port=54413 helo=tsj-smtp-dlp1.xlnx.xilinx.com) by xsj-tvapsmtp02.xilinx.com with esmtp (Exim 4.63) (envelope-from ) id 1ZV7Le-0001fO-Or; Thu, 27 Aug 2015 17:16:50 -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 t7S0C4Uq020530; Thu, 27 Aug 2015 17:12:04 -0700 Received: from [172.19.5.100] (port=43605 helo=xsjengdev1.xilinx.com) by xsj-tvapsmtp02 with esmtp (Exim 4.63) (envelope-from ) id 1ZV7Lc-0001fL-VO; Thu, 27 Aug 2015 17:16:49 -0700 From: Alistair Francis To: , , Date: Thu, 27 Aug 2015 17:16:48 -0700 Message-ID: <1b264632e6c61b5bf6645395571d5b738c669e2a.1440719554.git.alistair.francis@xilinx.com> X-Mailer: git-send-email 2.1.1 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-21774.005 X-TM-AS-Result: No--8.983-7.0-31-10 X-imss-scan-details: No--8.983-7.0-31-10 X-TMASE-MatchedRID: 7CdUTkRsPjLevfRM0DsRxpBOzK6mj2LNKVrLOZD1BXQfEmsQEltHxzBX Xb/qS263xphflU1kRp1GwkMiZwaGGxLmJd2F/yFu4pdq9sdj8LUK3n1SHen81VHy5abV66gJYJl hHij/83w7gGKZa6WZiO7l7MQDYUdTj+ikqJBaOpSeAiCmPx4NwBnUJ0Ek6yhjxEHRux+uk8jHUU +U0ACZwEq5HCRgNXQMsGHMDru4XH761W98ksD9EFtgFEEbFWSDnqg/VrSZEiM= X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD016; 1:FPvW7fXvP99MKH2QvPkRizR4VXmOhtAyTkQm9h1dlpMi2kb41aR6/paLmt+VKpSB9Le4Ay4eDHubtdKQeJYu+f4Vi4pvvKu/XRyVQ1GDPKdON6DerE1zyK+Qo6KDOoafp0+y9SBXO45VRPK+8sqYNA+Ceo2DjerjJxN9hqaIUjyfJY5KX7JIy9oF36orXTwc0/VRssvCAOWVsNk0p4hd+0iAIJWgmcZyFkytN16jaiQyvdZRfbe6Z8v3oYzrwCr4zsGl4o0OXMYqNWUSXnjrzjhony6G3hAw3AK4WBDLA2XlKENWlUTDNkZIIvLPsvVwzo9m0WwI0T5LP7vUkdLtfMVK3rktT/mg5l+LWS1pUmgrbp2sEP/fQG/p7VjPCEEX X-Forefront-Antispam-Report: CIP:149.199.60.96; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(339900001)(3050300001)(189002)(199003)(92566002)(5003940100001)(6806004)(76176999)(5003600100002)(50986999)(46102003)(64706001)(229853001)(33646002)(85426001)(19580395003)(19580405001)(4001540100001)(71366001)(81156007)(106466001)(48376002)(105606002)(50466002)(5001920100001)(2950100001)(118296001)(5001960100002)(64026002)(50226001)(5001830100001)(86362001)(5007970100001)(5001770100001)(77156002)(189998001)(5001860100001)(77096005)(87936001)(62966003)(47776003)(36756003)(2201001)(21314002)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1AFFO11HUB010; H:xsj-tvapsmtpgw01; FPR:; SPF:Fail; PTR:unknown-60-96.xilinx.com; MX:1; A:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11HUB010; 2:uV3IFUTz/cylWzn8ySJiCyVBIKVujonQMVgFKB6SF1aVclyTh12+fSMfTk+dF4Wm9+qIIUdnc3/lKC9By3BPP9h0iB0oZ8J66nT7Qqnsl0XeOfuTD9I5eUs2dy1Rig91fsqCG+8hEHmP5xWNkxuCX4U3bV2AABT9oaw6eOnI4Lc=; 3:BortunAUq/ySgrzQFOQ+/WbZyr0AzreiJ6rjNAiulpRkm5eI0PUBVLKyQvhQ/6se4L2RW3emLNNMLTUNPjQX+24Eni1hZ+Qrb2xsbkLVfBH99Mf6tM2jl2RJkxGdSYhpSwsYrV7TOGtTw5KXUd5cpZMRlEPZfY1gXzXM7Aykljj1btep6DH/TeajW58cFoLvPLSDxcM9UNmZKZA7QDdNsMl8YUnEx1SRV5/I7w9aqKU=; 25:xybKR3L1bwIu1ghsShB0AxGuMZbHphZ0vgBp4BC6tXJLa8hhLqJnedUhtHfqhpyPx/y7y6bcaiBfUzUYKg19xrum3gwlhDEqxL/o6LXVNj3qGvrAWTjPlLk/DU9hBDH+VaRZ8Q15E/Z3FHk1Obp76aRJBMlt8PQ7fPrLGh22yVaLxUV5VcZUupu1r13cwu7j9K5Fe7JTCvBgCJXNu7bdgZxCJ4SlwfPBevT+SUYgt6N+XWsyBTKfSX66ov9V+874aQzqyTkhfT0Jx5Fl61VzwQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN1AFFO11HUB010; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11HUB010; 20:qhaMC6z/4dnFyJvvgg7oLlJMjRkfQcjR5CFuEbM5LppftGat3mGQTjSQJdWbwUc+o2uW0JEtspy/TkGo/FaOPvGyTyXbiXkPO0AHF0NAZAMqM6u3QbdO3OO2tTtWE0ha90V7Mc04Qsu4FbzEura6eREBb83KWd3yyHUhEab4jY5jqB+UBiIPu31ddLg3xSLK+xOfdhFAMkveP4QxCqj23sCgoZwjgi8y2SKu/QssrAG34vQ8wepgy9sbyeNzU+ZVQP5DhYLqc6RYbIgNXWTnRZQa/ygPlxuafPzvjFlCWQDqG8jAAg74EUz2gvfaH5rx6yn6EvSjSced2ucijp4CqLCmC0axkOqa4t/AZQxBd1YX0XayEFO+RJdkaDKseFNtpZhs5+JTYU8yqgsqo7V2+sQTi0MAufOP5CkAXJpI2jIJyI2DIptGi3CQEqikPMCo6mEa3CtdIEL+vYZnqdSyhc6BIPi/QCufn69tb9VgSf/+mQoeYLEO19jHjg4VvxxV; 4:YufeUkvpi6w9B1ZU0bkZrwAzZzCatPTQEfXg9xYvoi+1MdgGDhMPFrtcUvuVKTa4dZNj/6TGkiZJCIGs2sFwbhB1QcqOjHsx9EjxJJckSoTEjpTLw3GKHhVWZc5fQmZbLyAFWSLe35gbg2scQ/7uH9MUEE35uyuz6yjFpCfOZ8eRnxQ+Etd8FvbuXv7MsYum8jB8npWgSXXWKBQ8Jfk0K7BmNZWpAj5WihcvHtvzBhkCYWlfAv1uyVPatp6d/OIsEDYPMU8qgnKLgL+gcGLwI1a5JLrOvalSMG022iXToC248BNBpxkSChkTXvEDOptH X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(8121501046)(5005006)(3002001); SRVR:BN1AFFO11HUB010; BCL:0; PCL:0; RULEID:; SRVR:BN1AFFO11HUB010; X-Forefront-PRVS: 0682FC00E8 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1AFFO11HUB010; 23:Gy6LM684pRToUglX48vfDfmKjrjnRpVPeIPTRhA?= =?us-ascii?Q?TGtgEHDMMtsaCBZJaLO9huclWY/fohG9Kr3vVaqS7uc5qSvDBMZHWeT0wXyS?= =?us-ascii?Q?NrnV9W7Dd61RcaPwDZRpeDGP1TDBAvBFODud/BgF0b04LkTflU14DuPvYpou?= =?us-ascii?Q?8RcIHXG3mKcSmoMKKbd6PrYz4OowV1x0V6h+GzJpw13dcmjgdURNR9cl/Nk3?= =?us-ascii?Q?dQIU/RN+hR4DZOCPr9d2NuW7MnWSnxdU7G0iB99jxEPu3WYxJp+utSVnjQEr?= =?us-ascii?Q?pv/ACCBtl9uStEhLEPR2ZgtJNdPh5tWkAXRfmYtLBjqb+l3+mVjeEjPgAvrc?= =?us-ascii?Q?2OuRjKIYkXW0GiReOy4wk9cOAPBwK+xUPdX4oSziV3ttsAYdtD4WGaKPUgRR?= =?us-ascii?Q?yATHIBkxYfdmL+spuW2BtLBwsH/mpNwhMWejqdVK+1tXXIrNgSVD7VYIdgQW?= =?us-ascii?Q?p4YHthoYIfW8ySmTQmerHufD6sVhkpY5/lE6L5l3CDMhEJnNjnnU7svIu6X5?= =?us-ascii?Q?2Hv6jPQxdTTyGi6ySnhWquIKCWfacL1z3FpX9oOVcYkLJ65phmAnIvg9ra+p?= =?us-ascii?Q?56bH8lAuVb2lng1tsTde51oM/9iNY2M6v3SgTMKX4uwoYgU1rENiGHDbnI15?= =?us-ascii?Q?2JomBgEz6fMNu7/kzvq2MtCwC2AFoTa6LvQuREl4IBR5Zt1UOWocyzIKA/Eq?= =?us-ascii?Q?NjSoz5iUckSA/sc1FSQik0PAE4iv9USoIS6/8eXKw2ym2LUpYUtkKT03lMZE?= =?us-ascii?Q?HJFrk41Dq6IIiBxSjoTdgXDxCSAT6d6qXziZ8lY8gyjj92PIgqF0e+hsxIAy?= =?us-ascii?Q?lDeLx28faA2YBC6GIAPyfz7WF3uJyduJ3dzfOBjpafINPlBknktDdXbyF+TI?= =?us-ascii?Q?pfW9K8ThCaG92RG70EyRG349LYKDGllwKKMCWPpRbLWjWiKCCty4r1v4o56M?= =?us-ascii?Q?qZ818ZgXoYw7FeGCKuw2543Nwg0DTAh28SKON2QnKyBhiLPqXEm9Hkwv9HHd?= =?us-ascii?Q?S6ojbM8L1/VqBKC1aSTch0D9DjWXpasPvU4ukBwk7sOGdeW3uQGNXm7yk+VA?= =?us-ascii?Q?WfVD/WbdbSJxGfApomVZ7TIUODlSGXpLTVoOi4Jel4DYkKlLFwVF4Jl/ud7j?= =?us-ascii?Q?HCD4lZpcnQh2HqMWJ6jVHDRG9aqgZ40zeqQyyhVeUvdAOELQy7nEUzp0ymEf?= =?us-ascii?Q?2vDU/vj5wuxN3aIYKby1dZyXOBCx6i9/xSpNtpgyPSaEIO53PwPJCPhNlz/L?= =?us-ascii?Q?+rXD4KvXEGy+3X2pKPmNXf6WELp3Q7BZ/EWN5PGg0no4cc8jA80B4Ib63CK+?= =?us-ascii?Q?4yg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11HUB010; 5:rLwaYzeOaypT2sqvwz+kzr5vZvsSy/myGgs233/RsiCW1a+CxGWYhZQOQdSVe1/XoYQKDWy5A3P9/2XnAhA0BjZk56tHVntFcoAAF+IAj+i1PddraLI3P9tlt3cG6g8hy9NULucd8e/qDqqo+OgAlQ==; 24:RwnlatLSP0rZWQm8z5Q9h+Vetw4Zhe7egeh3HM9WP6cVeUS7urZMW+jap1if1yXB7pvrqL2LnQvxATiidrswN8KHKuvLSxkomEsB4vedM9k= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2015 00:16:51.7432 (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: BN1AFFO11HUB010 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 X-Received-From: 157.56.110.70 Cc: saipava@xilinx.com, edgar.iglesias@xilinx.com, jsnow@redhat.com, afaerber@suse.de, alistair.francis@xilinx.com Subject: [Qemu-devel] [PATCH v4 2/4] ahci.c: Don't assume AHCIState's parent is AHCIPCIState 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The AHCIState struct can either have AHCIPCIState or SysbusAHCIState as a parent. The ahci_irq_lower() and ahci_irq_raise() functions assume that it is always AHCIPCIState, which is not always the case, which causes a seg fault. Verify what the container of AHCIState is before setting the PCIDevice struct. Signed-off-by: Alistair Francis --- V4: - Remove unnesicary casts - Use object_dynamic_cast() instead of object_class_dynamic_cast() hw/ide/ahci.c | 27 +++++++++++++++++++++------ hw/ide/ahci.h | 2 ++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 02d85fa..bab6f5c 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -121,9 +121,16 @@ static uint32_t ahci_port_read(AHCIState *s, int port, int offset) static void ahci_irq_raise(AHCIState *s, AHCIDevice *dev) { - AHCIPCIState *d = container_of(s, AHCIPCIState, ahci); - PCIDevice *pci_dev = - (PCIDevice *)object_dynamic_cast(OBJECT(d), TYPE_PCI_DEVICE); + DeviceState *dev_state = s->container; + PCIDevice *pci_dev = NULL; + ObjectClass *ret; + + /* Check is AHCIState's parent is SysbusAHCIState or AHCIPCIState */ + ret = object_dynamic_cast(OBJECT(dev_state), TYPE_PCI_DEVICE); + if (ret) { + /* AHCIState parent is AHCIPCIState */ + pci_dev = PCI_DEVICE(dev_state); + } DPRINTF(0, "raise irq\n"); @@ -136,9 +143,16 @@ static void ahci_irq_raise(AHCIState *s, AHCIDevice *dev) static void ahci_irq_lower(AHCIState *s, AHCIDevice *dev) { - AHCIPCIState *d = container_of(s, AHCIPCIState, ahci); - PCIDevice *pci_dev = - (PCIDevice *)object_dynamic_cast(OBJECT(d), TYPE_PCI_DEVICE); + DeviceState *dev_state = s->container; + PCIDevice *pci_dev = NULL; + ObjectClass *ret; + + /* Check is AHCIState's parent is SysbusAHCIState or AHCIPCIState */ + ret = object_dynamic_cast(OBJECT(dev_state), TYPE_PCI_DEVICE); + if (ret) { + /* AHCIState parent is AHCIPCIState */ + pci_dev = PCI_DEVICE(dev_state); + } DPRINTF(0, "lower irq\n"); @@ -1436,6 +1450,7 @@ void ahci_init(AHCIState *s, DeviceState *qdev, AddressSpace *as, int ports) s->as = as; s->ports = ports; s->dev = g_new0(AHCIDevice, ports); + s->container = qdev; ahci_reg_init(s); /* XXX BAR size should be 1k, but that breaks, so bump it to 4k for now */ memory_region_init_io(&s->mem, OBJECT(qdev), &ahci_mem_ops, s, diff --git a/hw/ide/ahci.h b/hw/ide/ahci.h index c055d6b..c9b3805 100644 --- a/hw/ide/ahci.h +++ b/hw/ide/ahci.h @@ -287,6 +287,8 @@ struct AHCIDevice { }; typedef struct AHCIState { + DeviceState *container; + AHCIDevice *dev; AHCIControlRegs control_regs; MemoryRegion mem;