From: David Miller <davem@davemloft.net>
To: jt@hpl.hp.com
Cc: shaddy_baddah@hotmail.com, linux-wireless@vger.kernel.org,
dsd@gentoo.org, johannes@sipsolutions.net
Subject: Re: zd1211rw (2.6.22 sparc64): unaligned access (do_rx)
Date: Thu, 06 Dec 2007 19:49:38 -0800 (PST) [thread overview]
Message-ID: <20071206.194938.180887974.davem@davemloft.net> (raw)
In-Reply-To: <20071206212525.GA6509@bougret.hpl.hp.com>
From: Jean Tourrilhes <jt@hpl.hp.com>
Date: Thu, 6 Dec 2007 13:25:25 -0800
> On Wed, Dec 05, 2007 at 06:36:28PM -0800, David Miller wrote:
> > This only works if you hide the underlying types from the compiler,
> > using something like:
> >
> > static void copy_object(void *dst, void *src, int len)
> > {
> > memcpy(dst, src, len);
> > }
> >
> > And use the copy_object() thing to move unaligned things around.
>
> Most likely, copy_object() will be inlined.
It doesn't matter, by passing the pointer through the arguments of a
function you've casted the type to "void *" before the builtin
memcpy() logic in the compiler can look at it, and thus the compiler
is no longer allowed to see past that cast back to the original type
and assume any kind of alignment.
I used this to fix similar bugs in libgtk+ and gthumb.
> Now, I'm wondering how to deal with unaligned access in
> userspace. If you get data from hardware or the network, you can not
> guarantee that everything will always be aligned, so we need a way to
> deal with it.
> In the kernel, we have get_unaligned(). I wonder what's the
> equivalent in userspace.
attribute((__packed__)) usually
Better to enforce the alignment in the kernel though. We recently
found a case with link attributes in netlink where u64 attributes end
up unaligned in userspace because of how we size the netlink attribute
headers and the total attribute lengths. So we have to use __packed__
for these things now.
And you _DONT_ want to do this, because the code generated is
completely awful. It does byte at a time accesses for every access
and this is completely silly if the data is aligned most of the time.
So, again, better to put the onus on the kernel or whatever parses the
data to align things properly.
I totally disagree about your assertions about iwlib BTW, anybody
should be able to write code to parse these blobs coming out of the
kernel. Saying that everyone who wants to do so has to go through
iwlib is unreasonable.
If the kernel was converting the data streams correctly, we wouldn't
even having this conversation. And it really ticks me off that you
keep ignoring this point. If it had been done correctly from the
start, we'd have none of this compat code in iwlib, and none of these
problems.
But it's OK that we didn't fix it correctly at first, what is not
OK is refusing to recognize that the kernel does need to do these
conversions so we can fix this properly.
I think I'm finally angry enough about this to do the implementation
so expect to see some code soon...
next prev parent reply other threads:[~2007-12-07 3:49 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-19 0:56 zd1211rw (2.6.22 sparc64): unaligned access (do_rx) Shaddy Baddah
2007-11-19 8:27 ` David Miller
2007-11-19 12:11 ` Shaddy Baddah
2007-11-19 12:19 ` David Miller
2007-11-21 13:08 ` Shaddy Baddah
2007-11-19 15:03 ` Johannes Berg
2007-11-19 18:04 ` Jean Tourrilhes
2007-11-21 13:18 ` Shaddy Baddah
2007-11-21 13:30 ` Shaddy Baddah
2007-11-21 14:23 ` Daniel Drake
2007-11-21 18:05 ` Kyle McMartin
2007-11-30 5:31 ` Shaddy Baddah
2007-11-21 14:33 ` Daniel Drake
2007-11-21 18:44 ` Jean Tourrilhes
2007-11-30 3:42 ` Shaddy Baddah
2007-11-30 20:21 ` Jean Tourrilhes
2007-12-04 0:01 ` Jean Tourrilhes
[not found] ` <4756AABC.3000204@hotmail.com>
[not found] ` <20071205215600.GA28349@bougret.hpl.hp.com>
2007-12-05 23:25 ` Shaddy Baddah
2007-12-05 23:40 ` Jean Tourrilhes
2007-12-06 21:59 ` Jean Tourrilhes
2007-12-06 2:36 ` David Miller
2007-12-06 21:25 ` Jean Tourrilhes
2007-12-06 21:33 ` Michael Buesch
2007-12-06 21:43 ` Jean Tourrilhes
2007-12-07 3:52 ` David Miller
2007-12-07 11:35 ` Michael Buesch
2007-12-07 12:34 ` David Miller
2007-12-07 13:36 ` Michael Buesch
2007-12-07 14:48 ` Daniel Drake
2007-12-08 1:36 ` David Miller
2007-12-08 1:35 ` David Miller
2007-12-08 11:21 ` Michael Buesch
2007-12-08 12:54 ` Daniel Drake
2007-12-07 3:50 ` David Miller
2007-12-07 3:49 ` David Miller [this message]
2007-11-19 22:20 ` David Miller
2007-11-19 22:35 ` Jean Tourrilhes
2007-11-20 7:42 ` David Miller
2007-11-20 17:43 ` Jean Tourrilhes
2007-11-20 21:56 ` David Miller
2007-11-20 12:40 ` Johannes Berg
2007-11-20 12:46 ` David Miller
[not found] ` <20071120180016.GC1480@bougret.hpl.hp.com>
2007-11-20 21:58 ` David Miller
2007-11-20 22:08 ` John W. Linville
2007-11-20 22:38 ` David Miller
2007-11-20 22:16 ` Jean Tourrilhes
2007-11-20 22:41 ` David Miller
[not found] ` <20071120180601.GA2019@bougret.hpl.hp.com>
[not found] ` <47443430.3010504@hotmail.com>
2007-11-21 19:06 ` Jean Tourrilhes
2007-11-20 17:38 ` Jean Tourrilhes
2007-11-20 12:34 ` David Miller
2007-11-20 13:15 ` Johannes Berg
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=20071206.194938.180887974.davem@davemloft.net \
--to=davem@davemloft.net \
--cc=dsd@gentoo.org \
--cc=johannes@sipsolutions.net \
--cc=jt@hpl.hp.com \
--cc=linux-wireless@vger.kernel.org \
--cc=shaddy_baddah@hotmail.com \
/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;
as well as URLs for NNTP newsgroup(s).