public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [sparc64] 2.6.18 unaligned acccess in ehci_hub_control
@ 2006-09-20 17:21 Will Simoneau
  2006-09-20 17:56 ` David Miller
  0 siblings, 1 reply; 8+ messages in thread
From: Will Simoneau @ 2006-09-20 17:21 UTC (permalink / raw)
  To: sparclinux; +Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1073 bytes --]

I upgraded from 2.6.17.7 to 2.6.18 today, and in dmesg I have 5 of these
messages in a row:

Kernel unaligned access at TPC[100be8c8] ehci_hub_control+0x350/0x680 [ehci_hcd]

This message wasn't there before... I suppose it is pretty harmless as
the kernel is supposed to handle unaligned accesses (right?) but this is
the first time it's happened.

According to gdb (my first time using it...),
drivers/usb/host/ehci-hub.c:280 is to blame:

(gdb) list *ehci_hub_control+0x350
0x8d0 is in ehci_hub_control (drivers/usb/host/ehci-hub.c:280).
275      struct usb_hub_descriptor  *desc
276   ) {
277      int      ports = HCS_N_PORTS (ehci->hcs_params);
278      u16      temp;
279   
280      desc->bDescriptorType = 0x29;
281      desc->bPwrOn2PwrGood = 10; /* ehci 1.0, 2.3.9 says 20ms max */
282      desc->bHubContrCurrent = 0;
283   
284      desc->bNbrPorts = ports;

System is a Sun U80 4x450 with 2.5G and a USB2 PCI card. GCC for the
kernel is 4.1.1 (with gentoo patchset). The only USB2 device is an
external Sony dual layer DVD writer.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread
* Re: [sparc64] 2.6.18 unaligned acccess in ehci_hub_control
@ 2006-09-22 22:15 Mikael Pettersson
  2006-09-22 22:22 ` David Miller
  2006-09-24  0:05 ` David Miller
  0 siblings, 2 replies; 8+ messages in thread
From: Mikael Pettersson @ 2006-09-22 22:15 UTC (permalink / raw)
  To: davem; +Cc: linux-kernel, simoneau, sparclinux

On Thu, 21 Sep 2006 13:51:21 -0700 (PDT), David Miller wrote:
>> I don't think it's harmless. My Ultra5 has an add-on PCI USB controller
>> card (Belkin). A 2.6.18-rc kernel compiled with gcc-4.1.1 will throw a few
>> unaligned accesses when I initialise USB by inserting a USB memory stick.
>> Removing the memory stick then results in PCI errors and other breakage.
>> 
>> The same kernel compiled with gcc-3.4.6 has no problems at all, so I've
>> been assuming it's a gcc-4 issue and not a kernel issue.
>
>Compiled with gcc-4.0.x I get the same ehci_hub_control unaligned
>accesses, and putting the correct {get,put}_unaligned() in that
>function makes them go away.
>
>It's a pure mystery if gcc-3.4.x somehow avoids those, as by the
>way the code is written those unaligned accesses are to be expected.

I rechecked with 2.6.18 final, and the behaviour is as I described:
gcc-4.1.1 causes the alignment exceptions, while gcc-3.4.6 does not.
I didn't get any PCI errors now, but I'm sure I did get them in the
2.6.17 or early 2.6.18-rc kernels.

Here's a dmesg diff to show what happens, between the gcc-4.1.1
and gcc-3.4.6 compiled kernels. The first part is from kernel
bootup + user-space modprobe of the USB EHCI etc modules:

--- dmesg-2.6.18.usb-remove	2006-09-22 22:43:36.000000000 +0200
+++ dmesg-2.6.18-gcc346.usb-remove	2006-09-22 23:30:36.000000000 +0200
@@ -1,20 +1,20 @@
 PROMLIB: Sun IEEE Boot Prom 'OBP 3.25.3 2000/06/29 14:12'
 PROMLIB: Root node compatible: 
-Linux version 2.6.18 (mikpe@sparge) (gcc version 4.1.1) #1 Fri Sep 22 22:32:42 CEST 2006
+Linux version 2.6.18-gcc346 (mikpe@sparge) (gcc version 3.4.6) #1 Fri Sep 22 23:09:51 CEST 2006
 ARCH: SUN4U
 Ethernet address: 08:00:20:fd:ec:1f
 PROM: Built device tree with 46570 bytes of memory.
-On node 0 totalpages: 32312
-  DMA zone: 32312 pages, LIFO batch:7
+On node 0 totalpages: 32309
+  DMA zone: 32309 pages, LIFO batch:7
 CPU[0]: Caches D[sz(16384):line_sz(32)] I[sz(16384):line_sz(32)] E[sz(2097152):line_sz(64)]
-Built 1 zonelists.  Total pages: 32312
+Built 1 zonelists.  Total pages: 32309
 Kernel command line: ro root=/dev/hda5
 PID hash table entries: 1024 (order: 10, 8192 bytes)
 Console: colour dummy device 80x25
 Dentry cache hash table entries: 32768 (order: 5, 262144 bytes)
 Inode-cache hash table entries: 16384 (order: 4, 131072 bytes)
-Memory: 255928k available (1736k kernel code, 624k data, 112k init) [fffff80000000000,0000000017f46000]
-Calibrating delay using timer specific routine.. 800.26 BogoMIPS (lpj=4001318)
+Memory: 255872k available (1752k kernel code, 624k data, 112k init) [fffff80000000000,0000000017f46000]
+Calibrating delay using timer specific routine.. 800.30 BogoMIPS (lpj=4001524)
 Mount-cache hash table entries: 512
 NET: Registered protocol family 16
 PCI: Probing for controllers.
@@ -88,9 +88,6 @@
 usb usb1: configuration #1 chosen from 1 choice
 hub 1-0:1.0: USB hub found
 hub 1-0:1.0: 3 ports detected
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
 ohci_hcd: 2005 April 22 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI)
 ohci_hcd 0000:02:01.0: OHCI Host Controller
 ohci_hcd 0000:02:01.0: new USB bus registered, assigned bus number 2

The following messages are from when I insert the USB memory stick:

@@ -112,11 +109,6 @@
 EXT3 FS on hda2, internal journal
 EXT3-fs: mounted filesystem with ordered data mode.
 Adding 1048808k swap on /dev/hda4.  Priority:-1 extents:1 across:1048808k
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
 usb 1-2: new high speed USB device using ehci_hcd and address 2
 usb 1-2: configuration #1 chosen from 1 choice
 SCSI subsystem initialized

The following messages are from when I remove the USB memory stick:

@@ -139,9 +131,4 @@
 sda: assuming drive cache: write through
  sda: sda1
 sd 0:0:0:0: Attached scsi removable disk sda
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
 usb 1-2: USB disconnect, address 2
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]
-Kernel unaligned access at TPC[1006a9e4] ehci_hub_control+0x54c/0x68c [ehci_hcd]

/Mikael

^ permalink raw reply	[flat|nested] 8+ messages in thread
* Re: [sparc64] 2.6.18 unaligned acccess in ehci_hub_control
@ 2006-09-24 13:58 Mikael Pettersson
  0 siblings, 0 replies; 8+ messages in thread
From: Mikael Pettersson @ 2006-09-24 13:58 UTC (permalink / raw)
  To: davem, greg; +Cc: linux-kernel, simoneau, sparclinux

On Sat, 23 Sep 2006 17:05:31 -0700 (PDT), David Miller wrote:
>[USB]: Fix alignment of buffer passed down to ->hub_control()
>
>Implementations assume the buffer is at least 4 byte aligned.
>
>Signed-off-by: David S. Miller <davem@davemloft.net>
>
>diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
>index fb4d058..7766d7b 100644
>--- a/drivers/usb/core/hcd.c
>+++ b/drivers/usb/core/hcd.c
>@@ -344,7 +344,8 @@ static int rh_call_control (struct usb_h
> 	struct usb_ctrlrequest *cmd;
>  	u16		typeReq, wValue, wIndex, wLength;
> 	u8		*ubuf = urb->transfer_buffer;
>-	u8		tbuf [sizeof (struct usb_hub_descriptor)];
>+	u8		tbuf [sizeof (struct usb_hub_descriptor)]
>+		__attribute__((aligned(4)));
> 	const u8	*bufp = tbuf;
> 	int		len = 0;
> 	int		patch_wakeup = 0;
>

Thanks, this eliminated the USB alignment traps in my
gcc-4.1.1 compiled sparc64 kernel.

/Mikael

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-09-24 13:59 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-20 17:21 [sparc64] 2.6.18 unaligned acccess in ehci_hub_control Will Simoneau
2006-09-20 17:56 ` David Miller
2006-09-21 10:37   ` Mikael Pettersson
2006-09-21 20:51     ` David Miller
  -- strict thread matches above, loose matches on Subject: below --
2006-09-22 22:15 Mikael Pettersson
2006-09-22 22:22 ` David Miller
2006-09-24  0:05 ` David Miller
2006-09-24 13:58 Mikael Pettersson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox