From: Alexander Holler <holler@ahsoftware.de>
To: Joerg Roedel <joro@8bytes.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: AMD-IOMMU and problem with __init(data)?
Date: Tue, 29 Sep 2015 19:17:41 +0200 [thread overview]
Message-ID: <560AC7B5.4010009@ahsoftware.de> (raw)
In-Reply-To: <20150929150658.GJ3036@8bytes.org>
Am 29.09.2015 um 17:06 schrieb Joerg Roedel:
> 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.
Hmm. Thanks a lot. Also I've checked the alignment (at least twice) and
remember it was 32bit. But maybe I've checked something different or
looked at some file for ARM or x86(_32) or was confused or similar. But
now, when I look at ARM the initcall section seems to be aligned to 8
too. So I wonder why the stuff works on ARM (v5 and v7) and on an Intel
Atom (32bit). I think at least the armv5 box should have trapped (fatal)
too, but maybe that changed.
Sorry for not having looked at the alignment at least once more.
Alignment bugs are always hard to see and I've already assumed such,
especially because any other kernel seems to work, but I was obviously
unable to see it.
Again, thanks a lot.
Regards,
Alexander Holler
prev parent reply other threads:[~2015-09-29 17:17 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-23 10:22 AMD-IOMMU and problem with __init(data)? Alexander Holler
2015-09-23 11:43 ` Joerg Roedel
2015-09-23 15:50 ` Alexander Holler
2015-09-23 19:04 ` Alexander Holler
2015-09-26 8:18 ` Alexander Holler
2015-09-29 15:06 ` Joerg Roedel
2015-09-29 17:17 ` Alexander Holler [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=560AC7B5.4010009@ahsoftware.de \
--to=holler@ahsoftware.de \
--cc=joro@8bytes.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox