linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: "Luck, Tony" <tony.luck@intel.com>
Cc: Robin Holt <holt@sgi.com>,
	Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>,
	"petkovbb@gmail.com" <petkovbb@gmail.com>,
	Nishanth Aravamudan <nacc@us.ibm.com>,
	"linux-ia64@vger.kernel.org" <linux-ia64@vger.kernel.org>,
	"linux-ide@vger.kernel.org" <linux-ide@vger.kernel.org>,
	FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Subject: Re: kernel unaligned accesses on IA64 in IDE
Date: Fri, 22 Aug 2008 16:15:22 -0500	[thread overview]
Message-ID: <1219439722.3339.89.camel@localhost.localdomain> (raw)
In-Reply-To: <200808222036.m7MKa6bT008897@agluck-lia64.sc.intel.com>

On Fri, 2008-08-22 at 13:36 -0700, Luck, Tony wrote:
> > How about long instead of int.  int leaves us with the possibility that
> > something else will expect 8 byte alignment.
> 
> How about this?
> 
> Align __cmd to ward off kernel unaligned access consoles messages on
> ia64 (and perhaps make an almost imperceptible performance improvement
> on other architectures that can handle unaligned access, but do so
> more slowly than aligned accesses).
> 
> Signed-off-by: Tony Luck <tony.luck@intel.com>

Yuk, really ... you're blowing out the size of a critical structure by
padding which is unnecessary in 99% of cases.  Commands are supposed to
be byte streams. Adding extra alignment to generic code because some
driver has strange rules isn't very well layered.

Also, these are string out instructions ... They don't have any
alignment requirements (or they're not supposed to; they're like
memcpy); they're modelled on the x86 instructions

What about this as the obvious solution?  It makes the ia64 version of
this command behave exactly as the x86 version does.

James

---

diff --git a/arch/ia64/include/asm/io.h b/arch/ia64/include/asm/io.h
index 260a85a..7f25750 100644
--- a/arch/ia64/include/asm/io.h
+++ b/arch/ia64/include/asm/io.h
@@ -19,6 +19,8 @@
  * Copyright (C) 1999 Don Dugger <don.dugger@intel.com>
  */
 
+#include <asm/unaligned.h>
+
 /* We don't use IO slowdowns on the ia64, but.. */
 #define __SLOW_DOWN_IO	do { } while (0)
 #define SLOW_DOWN_IO	do { } while (0)
@@ -241,7 +243,7 @@ __insw (unsigned long port, void *dst, unsigned long count)
 	unsigned short *dp = dst;
 
 	while (count--)
-		*dp++ = platform_inw(port);
+		put_unaligned(platform_inw(port), dp++);
 }
 
 static inline void
@@ -250,7 +252,7 @@ __insl (unsigned long port, void *dst, unsigned long count)
 	unsigned int *dp = dst;
 
 	while (count--)
-		*dp++ = platform_inl(port);
+		put_unaligned(platform_inl(port), dp++);
 }
 
 static inline void
@@ -268,7 +270,7 @@ __outsw (unsigned long port, const void *src, unsigned long count)
 	const unsigned short *sp = src;
 
 	while (count--)
-		platform_outw(*sp++, port);
+		platform_outw(get_unaligned(sp++), port);
 }
 
 static inline void
@@ -277,7 +279,7 @@ __outsl (unsigned long port, const void *src, unsigned long count)
 	const unsigned int *sp = src;
 
 	while (count--)
-		platform_outl(*sp++, port);
+		platform_outl(get_unaligned(sp++), port);
 }
 
 /*



  parent reply	other threads:[~2008-08-22 21:15 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-19 22:56 kernel unaligned accesses on IA64 in IDE Nishanth Aravamudan
2008-08-20  1:39 ` Peter Chubb
2008-08-21 21:28   ` Nishanth Aravamudan
2008-08-20 14:35 ` Robin Holt
2008-08-21 21:31   ` Nishanth Aravamudan
2008-08-21 21:54     ` Robin Holt
2008-08-22  0:39       ` Nishanth Aravamudan
2008-08-22  1:11         ` Robin Holt
2008-08-22 16:45           ` Nishanth Aravamudan
2008-08-22 10:15         ` Bartlomiej Zolnierkiewicz
2008-08-22 10:55           ` Boris Petkov
2008-08-22 16:45             ` Nishanth Aravamudan
2008-08-22 17:29               ` Boris Petkov
2008-08-22 18:36                 ` Bartlomiej Zolnierkiewicz
2008-08-22 18:51                   ` Luck, Tony
2008-08-22 19:39                     ` Robin Holt
2008-08-22 20:36                       ` Luck, Tony
2008-08-22 20:41                         ` Borislav Petkov
2008-08-22 20:54                         ` Borislav Petkov
2008-08-22 21:38                           ` Nishanth Aravamudan
2008-08-22 21:49                             ` Borislav Petkov
2008-08-22 21:14                         ` Borislav Petkov
2008-08-22 23:02                           ` Nishanth Aravamudan
2008-08-22 23:30                             ` Luck, Tony
2008-08-22 23:33                               ` James Bottomley
2008-08-22 21:15                         ` James Bottomley [this message]
2008-08-25 16:31                           ` Nishanth Aravamudan

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=1219439722.3339.89.camel@localhost.localdomain \
    --to=james.bottomley@hansenpartnership.com \
    --cc=bzolnier@gmail.com \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=holt@sgi.com \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=nacc@us.ibm.com \
    --cc=petkovbb@gmail.com \
    --cc=tony.luck@intel.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).