From patchwork Thu Aug 27 20:47:36 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 511430 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 11B9014012C for ; Fri, 28 Aug 2015 06:48:22 +1000 (AEST) Received: from localhost ([::1]:44616 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZV45s-0006vN-0g for incoming@patchwork.ozlabs.org; Thu, 27 Aug 2015 16:48:20 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35856) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZV45K-0004dm-Ay for qemu-devel@nongnu.org; Thu, 27 Aug 2015 16:47:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZV45G-0002V5-4T for qemu-devel@nongnu.org; Thu, 27 Aug 2015 16:47:46 -0400 Received: from mail-bl2on0100.outbound.protection.outlook.com ([65.55.169.100]:60320 helo=na01-bl2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZV45G-0002Ur-0t for qemu-devel@nongnu.org; Thu, 27 Aug 2015 16:47:42 -0400 Received: from BN1BFFO11FD017.protection.gbl (10.58.144.33) by BN1BFFO11HUB012.protection.gbl (10.58.144.159) with Microsoft SMTP Server (TLS) id 15.1.249.14; Thu, 27 Aug 2015 20:47:40 +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 BN1BFFO11FD017.mail.protection.outlook.com (10.58.144.80) with Microsoft SMTP Server (TLS) id 15.1.256.10 via Frontend Transport; Thu, 27 Aug 2015 20:47:40 +0000 Received: from 172-16-1-203.xilinx.com ([172.16.1.203]:33196 helo=xsj-tvapsmtp02.xilinx.com) by xsj-tvapsmtpgw01 with esmtp (Exim 4.63) (envelope-from ) id 1ZV45D-0000R5-BD; Thu, 27 Aug 2015 13:47:39 -0700 Received: from [127.0.0.1] (port=50843 helo=tsj-smtp-dlp1.xlnx.xilinx.com) by xsj-tvapsmtp02.xilinx.com with esmtp (Exim 4.63) (envelope-from ) id 1ZV45D-00067d-5M; Thu, 27 Aug 2015 13:47:39 -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 t7RKgqIb030413; Thu, 27 Aug 2015 13:42:52 -0700 Received: from [172.19.5.100] (port=43501 helo=xsjengdev1.xilinx.com) by xsj-tvapsmtp02 with esmtp (Exim 4.63) (envelope-from ) id 1ZV45B-00067Z-2E; Thu, 27 Aug 2015 13:47:37 -0700 From: Alistair Francis To: , , Date: Thu, 27 Aug 2015 13:47:36 -0700 Message-ID: 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--9.420-7.0-31-10 X-imss-scan-details: No--9.420-7.0-31-10 X-TMASE-MatchedRID: ot4KjhbYmmbevfRM0DsRxpBOzK6mj2LNKVrLOZD1BXQwgyLNJp1+YN/9 N6lK9KH6ThbvLLI8RvPxY0WGgfScA5jgdm4pKakwSHCU59h5KrGgmJ/165QbK04IqSdLdTKdNR3 Cad/nFs3OQf/S1XvtEGa39PjWf0NNHxPMjOKY7A8LbigRnpKlKWxlRJiH4397Uz5yAJqNHS6bCw PzQW2ZV5ZMXsmrHg7B2PcvG0Rd0Inh/sbL8WxkZw== X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD017; 1:nUP4Ty0qJFb/DkCKcKIbvaKDPdvCLs5dj8csGq+24Q5pHdZgia/ad12SQT6SPoKifCso92mABzSfyTESSDqwOuDzw4KaATtZD/HPBxoy1I5VVj1fTU3Vx1neTTS8VxJkZqoay+aBPgb9f2suymWhL2uZOznBWWwESmtAQynFIGjwPHn/smpnCY6lqvwsQahka6z/aIWMo+YwQ6AyDpq4SqStw4FKtL4UA/rI1q4mtluF6U/fCwiwrTNElu1kEDTy6PQjV+LgjDm2iS2Ovn3/k4AXxNx15d+WOcU+yQtek8oX/wkT2V4FvWRszTjK6UqRiRwKWK/veIzLFSxYOPjh9Dj4aXAo3QP71g8zQyQ/837VEOVZ8nTSi7C0rEuxJx21 X-Forefront-Antispam-Report: CIP:149.199.60.96; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(3050300001)(339900001)(189002)(199003)(76176999)(64706001)(106466001)(36756003)(4001540100001)(81156007)(19580395003)(5001860100001)(5001830100001)(118296001)(50466002)(48376002)(50986999)(33646002)(105606002)(6806004)(229853001)(189998001)(5003600100002)(46102003)(19580405001)(62966003)(77156002)(2950100001)(5001920100001)(85426001)(5007970100001)(5001960100002)(92566002)(77096005)(71366001)(5003940100001)(5001770100001)(64026002)(50226001)(47776003)(87936001)(2201001)(86362001)(107986001)(21314002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1BFFO11HUB012; 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; BN1BFFO11HUB012; 2:FvVUmrnwuZSjH0lYQRII2ydiagKN2G8J3UbZly0Fe4rl0M7AwQTvECUEf3BToqcHOc/DO5vXhIDdqWwBaLrHWxU/0m4HLBbmT54z+JnaUaPFU1u8L1Bu4V6/dOr2LFSbnTj7JnuLhK/HP2FyjcwQNG21ZJbFK0NtR9P5EklXkvo=; 3:fcb7ZizTl4uog4cy9S/zvkN1PvvfFS430qSVF3WaCIXgTO+hD1M4x9F2iS8kEJslXVXTVu1lYs6X5ymomJqfi0z7hps+DTrih9wOnbOdDuaJjQFE5+L4aoED9jJPANl+iDQOtG06j1mo+xVoEM+AmylBhoZ9xvxzBK5K1M3F8KH74uGfqZl15eV8oU+sCYtIuB+sv0BTKT/Q1P3v2qNYNZhhTPF9N/eL3fHILXrcb7o=; 25:lCYzdNRfE1GRMSN/y0DpNxzrUgdzHwg2tXRpQjob0Hz/u8GLEU4PLWk80HAPVwt97Jl0h9t5EPcaqYMMvXUE66vJUYzPdqRidF6+GTzNjzgOA5O2erDnebq/cTYL9rIQJMY5KoqgGRv/K+/N/7pKMY38YT993v2shmxllYL+NXVx1mqVhsrTikf7CWBE2cfLq5TdV/VV2NzegNlK0EYtonN/F5VPLQiiWwu2+23NNL4CRn3HtZ5vR5PkSt9ufaNFpA0G53XCG9fj1IzjMVyy8Q== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN1BFFO11HUB012; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11HUB012; 20:k1a/hyl2Fvu/fMhbl0ue9HYLTmKr4/90X8Wg/zn1H5SSvgWkNfpqmzRQyErp352KxRaOIs4wX9/eXFctKfE33oJR9xMfaUBRQ9jtSQEok0CNm2RaZpg/1RxqLk/3bxT1KCYxFlt7ZrM9vpNZ09isDge2vbGq39g4ckORcZYGbUeAGbXj4UvYrW1DCdocpr+nvSDTkySDUZr7mvNtVn+aBF16gZ+Li0ygmSm/44PsJfujvYM762JO347RpTT9HiT7laQ1V/zubddBQIWGCg8mvukJ5lMgFfA1SZtnd2h0CdLmpFTTdPbsuAYoRArINHJosb+ZPKdgvBmiS0Vq3Ko5GmFdrm4QdCEiKy2tOE5K1XHX+iy/6Jc8jYlKd/VU0+q4ClQRNwUxroBN0GLBrHt4R0kEahYZ5DvZnPI3bGOjrf+dhRQsfXFOX5oYCxSofsUqvf4D61nSeFWcwjamQHcPwcqUMNZnpNjGDkFuC7CIxpGI3ew/wvqkVPy8a/JofPKL; 4:aHZqbufQhAAlPTvf9W4w4x1XJSqWpLPZv0kFpBTuuGovkZMLcKWQLmVgJxvALSu0YcrCDjMZT375Uk6RbEgFYZF31k3ICrtSryxaVOZcNst4P3c5RJjSpSN7LfQB9WtderdKD2ST1TdRHZmNKRx3I3dVE3Jak2X68VqcHOH2gR5kRV7sTfClF7hvSNDgS36Uz/PpWfoq+59lY0+d0qbmormCTvOMnpb2tpTK9khWMRJ+6bOZQxLtSAShZFkDwSfoCasl9/a350vEecQyB6jJp7UD98rr6N1pYK7Td0IPSitNIBBBjcoGhi16n81iOvan X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(8121501046)(3002001); SRVR:BN1BFFO11HUB012; BCL:0; PCL:0; RULEID:; SRVR:BN1BFFO11HUB012; X-Forefront-PRVS: 06818431B9 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1BFFO11HUB012; 23:+NjaXwsylQCnLyDUKocIATCQ9kmljnyquMyyj9r?= =?us-ascii?Q?hyy1qgTkhOSO5ioyVTvLvqpJRZo1guTgr++PKPPFYq8w/KwcRFYnDxX732Tz?= =?us-ascii?Q?6dw3WYh3i2PvxUAY3u0sLq/h9HRD5fxldbLHv39tKSVevOpHElNpnYhWLYJ/?= =?us-ascii?Q?4OG/lzmMJudiWu13bXk3OP8pMNqOXXyBYEDi8UKg0o9m8XPveopsq6Bv4r+M?= =?us-ascii?Q?0dUNAWkGBb1nifbJ1nMbiD3rOba17hbVNgFx0PdyyzP78kUDrSy+a9cEURDQ?= =?us-ascii?Q?61MEPQaU0dWWQHSp5PeRfVi7r6HONMzXOUw9u/GNnAqQyxb0W4jH6S+5YJac?= =?us-ascii?Q?CELnCd4BgS/dA+JcZqarzqFo6jxUWnIWjJfTs3UNWaLDho97hhtsAPySN2kc?= =?us-ascii?Q?gZCMSWxsZmOCcXjmYFaFQlDFSTsB7Q6n0gTQ0tsm9VXc16U2PT+ievdguEic?= =?us-ascii?Q?q7ifJ4LCqJ6ZHPN/ANd2Rgs3pgHyGjsTyA8vU0snWKcSSMD4Ahkg3Or3pKHN?= =?us-ascii?Q?AExwmiCxuv/P+h4wW0JCPpX2h/my2GVsXvOamE3gNrew14crr0EhZsQrGfb9?= =?us-ascii?Q?0PHEaiUql4DbdjqBgGMRvwAtIKysi4FxMBlgqgnroM9G2vr9ldgUJP7JCuwd?= =?us-ascii?Q?ebYWufWbLbIeeMK7NvvZx5EbGXta+RoBEkXX2GAN/sKyitrQgdht7jXm/HFf?= =?us-ascii?Q?9FN92DQTwOkWHK8HiaUO1RTrfqWS9ENbOO5btGBwE5cWzpiukbxVfyzVwvVv?= =?us-ascii?Q?/VzE3vQkoYIYd6IkSfbNmXNt0QnDofesXU04vzMxei/R89MOiq3YSb2YxTI3?= =?us-ascii?Q?Q+C/RDKhzZ5WbawLcsBHpnUqPtWoGcpNnk7rpAyFs509jjCvp2wQDeSlnRf6?= =?us-ascii?Q?UhX2SRzIbFNCKslxPn8UBHoHs9d4qrea5TUmX+2DiffVq+t+qKRFXe03zpqZ?= =?us-ascii?Q?arTEBuUj4IEdenbM/I9HJlZRASSbPiRpsJkoYKRNVZTDv2PASU4bJHQEFcsI?= =?us-ascii?Q?rieVOdU5e/CK4xvq7unUjUcNz2D9YAShIf3HlpZZNpRiJLphM0aQlzQcDFBz?= =?us-ascii?Q?UDx5rLxhFpU9Ndfmj5puHQQbt2y0us807gtiKRRq68SPCuuNmm078BROoQEU?= =?us-ascii?Q?JBItbV1l/qLG9B6vq2DKP4EUqzka9dYxWMdXH8Jq+ks7HQjl3ejEQsatIgeE?= =?us-ascii?Q?8nWLlUTnd1V4nqudYc2mMEUYKco/WvG7luyeZD4WpWVVzY58zvN/aRHlGheG?= =?us-ascii?Q?CRvlc/0KPM2aMpxO8nzwud1Fsd0Zd7JqVqxGmmswqr3j3Vu17kH7leR4XzsU?= =?us-ascii?Q?yNA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11HUB012; 5:cJh2tWzSqdEMndgBKbLFbFCrfpz3UjhkpBiIiDuS9yC9vIK6vhRRnWsgKy1FqRjv/tXR0nLFeoRUNiW/rtDaFecBNS/Ju1NIcLtyuykikWOoVXkBM31RXnqnWL2xLrLXnxN8Spv8ArKLbq1E/HyOhg==; 24:woEb0F02hBvsUHyWBg7sIPOE4CbNA340Lir2kvKbIELiv+L4ZIH1HS6TVhy+jquCn5qc7HNzy6r3sqPSaAbGoi8Ityf6eR/BsGsFN4+eseA= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2015 20:47:40.1896 (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: BN1BFFO11HUB012 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 X-Received-From: 65.55.169.100 Cc: saipava@xilinx.com, edgar.iglesias@xilinx.com, jsnow@redhat.com, afaerber@suse.de, alistair.francis@xilinx.com Subject: [Qemu-devel] [PATCH v3 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 strucut 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 --- hw/ide/ahci.c | 29 +++++++++++++++++++++++------ hw/ide/ahci.h | 2 ++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 02d85fa..b45b21d 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -121,9 +121,17 @@ 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 = DEVICE(s->container); + PCIDevice *pci_dev = NULL; + ObjectClass *ret; + + /* Check is AHCIState's parent is SysbusAHCIState or AHCIPCIState */ + ret = object_class_dynamic_cast(object_get_class(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 +144,17 @@ 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 = DEVICE(s->container); + PCIDevice *pci_dev = NULL; + ObjectClass *ret; + + /* Check is AHCIState's parent is SysbusAHCIState or AHCIPCIState */ + ret = object_class_dynamic_cast(object_get_class(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 +1452,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;