lkml.org 
[lkml]   [2004]   [Aug]   [27]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
FromMikael Pettersson <>
DateFri, 27 Aug 2004 11:19:15 +0200
Subject[PATCH][2.4.28-pre2] more gcc34 lvalue fixes
Marcelo,

Here are some more fixes for broken lvalues in 2.4.28-pre2.
- drivers/net/ne2k-pci.c: cast-as-lvalue, fixes from 2.6
- drivers/scsi/53c7,8xx.c: cast-as-lvalue, new 2.4 fix since
  2.6 doesn't seem to have this code any more
- drivers/scsi/advansys.c: cast-as-lvalue, fixes from 2.6
- drivers/scsi/dpt_i2o.c: cast-as-lvalue, fixes from 2.6
- drivers/scsi/seagate.c: cast-as-lvalue, fix from 2.6
- fs/affs/super.c: conditional-as-lvalue, new 2.4 fix since
  the 2.6 code is completely different

There is a half-broken asm() in drivers/scsi/ultrastor.c,
but that problem is also not fixed in 2.6 so I'm ignoring it.

drivers/net/e100/e100.h has broken usage of __attribute__((packed))
together with typedef, but this is not a regression from previous
gcc:s (gcc-3.4 just warns). I have a patch if you want it.

/Mikael

diff -ruN linux-2.4.28-pre2/drivers/net/ne2k-pci.c linux-2.4.28-pre2.gcc34-lvalue-fixes/drivers/net/ne2k-pci.c
--- linux-2.4.28-pre2/drivers/net/ne2k-pci.c	2004-04-14 20:22:20.000000000 +0200
+++ linux-2.4.28-pre2.gcc34-lvalue-fixes/drivers/net/ne2k-pci.c	2004-08-27 01:50:38.000000000 +0200
@@ -505,8 +505,12 @@
 		insl(NE_BASE + NE_DATAPORT, buf, count>>2);
 		if (count & 3) {
 			buf += count & ~3;
-			if (count & 2)
-				*((u16*)buf)++ = le16_to_cpu(inw(NE_BASE + NE_DATAPORT));
+			if (count & 2) {
+				u16 *b = (u16 *)buf;
+
+				*b++ = le16_to_cpu(inw(NE_BASE + NE_DATAPORT));
+				buf = (char *)b;
+			}
 			if (count & 1)
 				*buf = inb(NE_BASE + NE_DATAPORT);
 		}
@@ -566,8 +570,12 @@
 		outsl(NE_BASE + NE_DATAPORT, buf, count>>2);
 		if (count & 3) {
 			buf += count & ~3;
-			if (count & 2)
-				outw(cpu_to_le16(*((u16*)buf)++), NE_BASE + NE_DATAPORT);
+			if (count & 2) {
+				u16 *b = (u16 *)buf;
+
+				outw(cpu_to_le16(*b++), NE_BASE + NE_DATAPORT);
+				buf = (char *)b;
+			}
 		}
 	}
 
diff -ruN linux-2.4.28-pre2/drivers/scsi/53c7,8xx.c linux-2.4.28-pre2.gcc34-lvalue-fixes/drivers/scsi/53c7,8xx.c
--- linux-2.4.28-pre2/drivers/scsi/53c7,8xx.c	2003-11-29 00:28:13.000000000 +0100
+++ linux-2.4.28-pre2.gcc34-lvalue-fixes/drivers/scsi/53c7,8xx.c	2004-08-27 01:50:38.000000000 +0200
@@ -3926,7 +3926,7 @@
 	restore_flags (flags);
 	cmd->result = le32_to_cpu(0xffff);	/* The NCR will overwrite message
 				       and status with valid data */
-	cmd->host_scribble = (unsigned char *) tmp = create_cmd (cmd);
+	cmd->host_scribble = (unsigned char *) create_cmd (cmd);
     }
     cli();
     /*
diff -ruN linux-2.4.28-pre2/drivers/scsi/advansys.c linux-2.4.28-pre2.gcc34-lvalue-fixes/drivers/scsi/advansys.c
--- linux-2.4.28-pre2/drivers/scsi/advansys.c	2004-04-14 20:22:20.000000000 +0200
+++ linux-2.4.28-pre2.gcc34-lvalue-fixes/drivers/scsi/advansys.c	2004-08-27 01:50:38.000000000 +0200
@@ -6118,8 +6118,8 @@
     } else {
         /* Append to 'done_scp' at the end with 'last_scp'. */
         ASC_ASSERT(last_scp != NULL);
-        REQPNEXT(last_scp) = asc_dequeue_list(&boardp->active,
-            &new_last_scp, ASC_TID_ALL);
+        last_scp->host_scribble = (unsigned char *)asc_dequeue_list(
+			&boardp->active, &new_last_scp, ASC_TID_ALL);
         if (new_last_scp != NULL) {
             ASC_ASSERT(REQPNEXT(last_scp) != NULL);
             for (tscp = REQPNEXT(last_scp); tscp; tscp = REQPNEXT(tscp)) {
@@ -6141,8 +6141,8 @@
     } else {
         /* Append to 'done_scp' at the end with 'last_scp'. */
         ASC_ASSERT(last_scp != NULL);
-        REQPNEXT(last_scp) = asc_dequeue_list(&boardp->waiting,
-            &new_last_scp, ASC_TID_ALL);
+        last_scp->host_scribble = (unsigned char *)asc_dequeue_list(
+			&boardp->waiting, &new_last_scp, ASC_TID_ALL);
         if (new_last_scp != NULL) {
             ASC_ASSERT(REQPNEXT(last_scp) != NULL);
             for (tscp = REQPNEXT(last_scp); tscp; tscp = REQPNEXT(tscp)) {
@@ -6394,8 +6394,8 @@
                     ASC_TID_ALL);
             } else {
                 ASC_ASSERT(last_scp != NULL);
-                REQPNEXT(last_scp) = asc_dequeue_list(&boardp->done,
-                    &new_last_scp, ASC_TID_ALL);
+                last_scp->host_scribble = (unsigned char *)asc_dequeue_list(
+			&boardp->done, &new_last_scp, ASC_TID_ALL);
                 if (new_last_scp != NULL) {
                     ASC_ASSERT(REQPNEXT(last_scp) != NULL);
                     last_scp = new_last_scp;
@@ -6466,7 +6466,7 @@
     while (scp != NULL) {
         ASC_DBG1(3, "asc_scsi_done_list: scp 0x%lx\n", (ulong) scp);
         tscp = REQPNEXT(scp);
-        REQPNEXT(scp) = NULL;
+        scp->host_scribble = NULL;
         ASC_STATS(scp->host, done);
         ASC_ASSERT(scp->scsi_done != NULL);
         scp->scsi_done(scp);
@@ -7511,7 +7511,7 @@
     tid = REQPTID(reqp);
     ASC_ASSERT(tid >= 0 && tid <= ADV_MAX_TID);
     if (flag == ASC_FRONT) {
-        REQPNEXT(reqp) = ascq->q_first[tid];
+        reqp->host_scribble = (unsigned char *)ascq->q_first[tid];
         ascq->q_first[tid] = reqp;
         /* If the queue was empty, set the last pointer. */
         if (ascq->q_last[tid] == NULL) {
@@ -7519,10 +7519,10 @@
         }
     } else { /* ASC_BACK */
         if (ascq->q_last[tid] != NULL) {
-            REQPNEXT(ascq->q_last[tid]) = reqp;
+            ascq->q_last[tid]->host_scribble = (unsigned char *)reqp;
         }
         ascq->q_last[tid] = reqp;
-        REQPNEXT(reqp) = NULL;
+        reqp->host_scribble = NULL;
         /* If the queue was empty, set the first pointer. */
         if (ascq->q_first[tid] == NULL) {
             ascq->q_first[tid] = reqp;
@@ -7643,7 +7643,7 @@
                     lastp = ascq->q_last[i];
                 } else {
                     ASC_ASSERT(lastp != NULL);
-                    REQPNEXT(lastp) = ascq->q_first[i];
+                    lastp->host_scribble = (unsigned char *)ascq->q_first[i];
                     lastp = ascq->q_last[i];
                 }
                 ascq->q_first[i] = ascq->q_last[i] = NULL;
@@ -7721,8 +7721,8 @@
              currp; prevp = currp, currp = REQPNEXT(currp)) {
             if (currp == reqp) {
                 ret = ASC_TRUE;
-                REQPNEXT(prevp) = REQPNEXT(currp);
-                REQPNEXT(reqp) = NULL;
+                prevp->host_scribble = (unsigned char *)REQPNEXT(currp);
+                reqp->host_scribble = NULL;
                 if (ascq->q_last[tid] == reqp) {
                     ascq->q_last[tid] = prevp;
                 }
diff -ruN linux-2.4.28-pre2/drivers/scsi/dpt_i2o.c linux-2.4.28-pre2.gcc34-lvalue-fixes/drivers/scsi/dpt_i2o.c
--- linux-2.4.28-pre2/drivers/scsi/dpt_i2o.c	2003-06-14 13:30:24.000000000 +0200
+++ linux-2.4.28-pre2.gcc34-lvalue-fixes/drivers/scsi/dpt_i2o.c	2004-08-27 01:50:38.000000000 +0200
@@ -434,7 +434,7 @@
 			cmd->scsi_done(cmd);
 			return 0;
 		}
-		(struct adpt_device*)(cmd->device->hostdata) = pDev;
+		cmd->device->hostdata = pDev;
 	}
 	pDev->pScsi_dev = cmd->device;
 
@@ -2194,7 +2194,7 @@
 		printk ("%s: scsi_register returned NULL\n",pHba->name);
 		return -1;
 	}
-	(adpt_hba*)(host->hostdata[0]) = pHba;
+	host->hostdata[0] = (unsigned long)pHba;
 	pHba->host = host;
 
 	host->irq = pHba->pDev->irq;;
diff -ruN linux-2.4.28-pre2/drivers/scsi/seagate.c linux-2.4.28-pre2.gcc34-lvalue-fixes/drivers/scsi/seagate.c
--- linux-2.4.28-pre2/drivers/scsi/seagate.c	2003-08-25 20:07:46.000000000 +0200
+++ linux-2.4.28-pre2.gcc34-lvalue-fixes/drivers/scsi/seagate.c	2004-08-27 01:50:38.000000000 +0200
@@ -698,7 +698,7 @@
 	done_fn = done;
 	current_target = SCpnt->target;
 	current_lun = SCpnt->lun;
-	(const void *) current_cmnd = SCpnt->cmnd;
+	current_cmnd = SCpnt->cmnd;
 	current_data = (unsigned char *) SCpnt->request_buffer;
 	current_bufflen = SCpnt->request_bufflen;
 	SCint = SCpnt;
diff -ruN linux-2.4.28-pre2/fs/affs/super.c linux-2.4.28-pre2.gcc34-lvalue-fixes/fs/affs/super.c
--- linux-2.4.28-pre2/fs/affs/super.c	2004-08-08 10:56:31.000000000 +0200
+++ linux-2.4.28-pre2.gcc34-lvalue-fixes/fs/affs/super.c	2004-08-27 01:50:38.000000000 +0200
@@ -130,7 +130,7 @@
 					printk("AFFS: Argument for set[ug]id option missing\n");
 					return 0;
 				} else {
-					(f ? *uid : *gid) = simple_strtoul(value,&value,0);
+					*(f ? uid : gid) = simple_strtoul(value,&value,0);
 					if (*value) {
 						printk("AFFS: Bad set[ug]id argument\n");
 						return 0;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 14:05    [from the cache]
©2003-2008