From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756325AbbI2PHJ (ORCPT ); Tue, 29 Sep 2015 11:07:09 -0400 Received: from 8bytes.org ([81.169.241.247]:55604 "EHLO theia.8bytes.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754681AbbI2PHB (ORCPT ); Tue, 29 Sep 2015 11:07:01 -0400 Date: Tue, 29 Sep 2015 17:06:58 +0200 From: Joerg Roedel To: Alexander Holler Cc: linux-kernel@vger.kernel.org Subject: Re: AMD-IOMMU and problem with __init(data)? Message-ID: <20150929150658.GJ3036@8bytes.org> References: <56027D60.3070903@ahsoftware.de> <20150923114358.GA3036@8bytes.org> <5602CA2B.5000106@ahsoftware.de> <5602F7BF.4020009@ahsoftware.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5602F7BF.4020009@ahsoftware.de> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As expected it is no bug in the AMD IOMMU driver, but in your code. On Wed, Sep 23, 2015 at 09:04:31PM +0200, Alexander Holler wrote: > struct _annotated_initcall { > initcall_t initcall; > unsigned driver_id; > unsigned *dependencies; > struct device_driver *driver; > }; This struct gets aligned on a 32 bytes boundary. > +#define ANNOTATED_INITCALLS \ > + VMLINUX_SYMBOL(__annotated_initcall_start) = .; \ > + *(.annotated_initcall.init) \ > + VMLINUX_SYMBOL(__annotated_initcall_end) = .; But this section does not. > + ac = __annotated_initcall_start; > + pr_info("ac %p ID %u\n", ac, ac->driver_id); > + BUG_ON(ac->driver_id != 23); So when you access __annotated_initcall_start here, you don't access the first element of your array, but actually the zero padding before your struct. On my system the section was aligned on an 8 bytes boundary, which means there were 24 bytes of padding before the symbol you try to access. Joerg