Subject: Re: CVS commit: src/sys/dev/scsipi
To: Christian Biere <christianbiere@gmx.de>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: source-changes
Date: 12/01/2006 21:01:13
--ikeVEW9yuYc//A+q
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Fri, Dec 01, 2006 at 08:46:32PM +0100, Manuel Bouyer wrote:
> On Fri, Dec 01, 2006 at 08:42:15PM +0100, Christian Biere wrote:
> > > 
> > > It matters on all of these structures.
> > 
> > Does __aligned__ add trailing padding?
> 
> That's what I'm wondering too. It breaks ahc on i386 too:
> ahc0:A:5:0: Ensuring async
> (ahc0:A:5:0): Sending WDTR 0
> (ahc0:A:5:0): refuses WIDE negotiation. Using 8bit transfers
> ahc0:No or incomplete CDB sent to device.
> ahc0: Issued Channel A Bus Reset. 1 SCBs aborted
> probe(ahc0:0:5:0): generic HBA error
> ahc0:A:6:0: Ensuring async
> (ahc0:A:6:0): Sending WDTR 0
> (ahc0:A:6:0): refuses WIDE negotiation. Using 8bit transfers
> ahc0:No or incomplete CDB sent to device.
> ahc0: Issued Channel A Bus Reset. 1 SCBs aborted
> probe(ahc0:0:6:0): generic HBA error
> ahc0:A:10:0: Ensuring async
> (ahc0:A:10:0): Sending WDTR 0
> (ahc0:A:10:0): Received WDTR 0 filtered to 0
> ahc0:No or incomplete CDB sent to device.
> ahc0: Issued Channel A Bus Reset. 1 SCBs aborted
> probe(ahc0:0:10:0): generic HBA error

changing aligned(4) to aligned(2) on structs where it does matters
fixes the problem

-- 
Manuel Bouyer <bouyer@antioche.eu.org>
     NetBSD: 26 ans d'experience feront toujours la difference
--

--ikeVEW9yuYc//A+q
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=diff

Index: scsipi_all.h
===================================================================
RCS file: /cvsroot/src/sys/dev/scsipi/scsipi_all.h,v
retrieving revision 1.30
diff -u -r1.30 scsipi_all.h
--- scsipi_all.h	30 Nov 2006 16:23:20 -0000	1.30
+++ scsipi_all.h	1 Dec 2006 20:00:41 -0000
@@ -62,7 +62,7 @@
 	u_int8_t unused[2];
 	u_int8_t length;
 	u_int8_t control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 #define START_STOP		0x1b
 struct scsipi_start_stop {
@@ -74,7 +74,7 @@
 #define SSS_START		0x01
 #define SSS_LOEJ		0x02
 	u_int8_t control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 /*
  * inquiry data format
@@ -163,6 +163,6 @@
 /*58*/	u_int8_t reserved;
 /*59*/	char    version_descriptor[8][2];
 #define	SCSIPI_INQUIRY_LENGTH_SCSI3	74
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 #endif /* _DEV_SCSIPI_SCSIPI_ALL_H_ */
Index: scsipi_cd.h
===================================================================
RCS file: /cvsroot/src/sys/dev/scsipi/scsipi_cd.h,v
retrieving revision 1.15
diff -u -r1.15 scsipi_cd.h
--- scsipi_cd.h	30 Nov 2006 16:23:20 -0000	1.15
+++ scsipi_cd.h	1 Dec 2006 20:00:41 -0000
@@ -44,7 +44,7 @@
 	u_int8_t unused[6];
 	u_int8_t resume;
 	u_int8_t control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 #define	PA_PAUSE	0x00
 #define PA_RESUME	0x01
 
@@ -60,7 +60,7 @@
 	u_int8_t end_s;
 	u_int8_t end_f;
 	u_int8_t control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 #define PLAY			0x45	/* cdrom play  'play audio' mode */
 struct scsipi_play {
@@ -70,7 +70,7 @@
 	u_int8_t unused;
 	u_int8_t xfer_len[2];
 	u_int8_t control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 #define READ_HEADER		0x44	/* cdrom read header */
 struct scsipi_read_header {
@@ -80,7 +80,7 @@
 	u_int8_t unused;
 	u_int8_t data_len[2];
 	u_int8_t control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 #define READ_SUBCHANNEL		0x42	/* cdrom read Subchannel */
 struct scsipi_read_subchannel {
@@ -93,7 +93,7 @@
 	u_int8_t track;
 	u_int8_t data_len[2];
 	u_int8_t control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 #define READ_TOC		0x43	/* cdrom read TOC */
 struct scsipi_read_toc {
@@ -104,7 +104,7 @@
 	u_int8_t from_track;		/* session nr in format 2 */
 	u_int8_t data_len[2];
 	u_int8_t control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 struct scsipi_toc_header {
 	uint8_t	 length[2];
@@ -156,7 +156,7 @@
 	uint8_t  unused[3];
 	uint8_t  data_len[2];
 	uint8_t  control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 struct scsipi_get_conf_data {
 	uint8_t  data_len[4];
@@ -181,7 +181,7 @@
 	uint8_t  unused[6];
 	uint8_t  data_len[2];
 	uint8_t  control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 #define READ_DISCINFO_SMALLSIZE  12
 #define READ_DISCINFO_BIGSIZE    34	/* + entries */
@@ -215,7 +215,7 @@
 	uint8_t  nothing;
 	uint8_t  data_len[2];
 	uint8_t  control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 #define READ_TRACKINFO_ADDR_LBA    0
 #define READ_TRACKINFO_ADDR_TRACK  1
 #define READ_TRACKINFO_ADDR_SESS   2
@@ -248,7 +248,7 @@
 	u_int8_t addr[4];
 	u_int8_t unused[3];
 	u_int8_t control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 struct scsipi_read_cd_cap_data {
 	u_int8_t addr[4];
Index: scsipi_disk.h
===================================================================
RCS file: /cvsroot/src/sys/dev/scsipi/scsipi_disk.h,v
retrieving revision 1.17
diff -u -r1.17 scsipi_disk.h
--- scsipi_disk.h	30 Nov 2006 16:23:20 -0000	1.17
+++ scsipi_disk.h	1 Dec 2006 20:00:41 -0000
@@ -70,7 +70,7 @@
 	u_int8_t reserved;
 	u_int8_t length[2];
 	u_int8_t control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 #define	READ_12			0xa8
 #define	WRITE_12		0xaa
@@ -101,7 +101,7 @@
 	u_int8_t addr[4];
 	u_int8_t unused[3];
 	u_int8_t control;
-} __attribute__((__packed__, __aligned__(4)));
+} __attribute__((__packed__, __aligned__(2)));
 
 /* DATAs definitions for the above commands */
 

--ikeVEW9yuYc//A+q--