diff -u linux-2.5.29/include/linux/signal.h linux-2.5.29-scsi/include/linux/signal.h
--- linux-2.5.29/include/linux/signal.h	2002-06-20 16:53:46.000000000 -0600
+++ linux-2.5.29-scsi/include/linux/signal.h	2002-08-01 08:14:04.000000000 -0600
@@ -70,37 +70,24 @@
 #define _SIG_SET_BINOP(name, op)					\
 static inline void name(sigset_t *r, const sigset_t *a, const sigset_t *b) \
 {									\
+	extern void _NSIG_WORDS_is_unsupported_size(void);		\
 	unsigned long a0, a1, a2, a3, b0, b1, b2, b3;			\
-	unsigned long i;						\
 									\
-	for (i = 0; i < _NSIG_WORDS/4; ++i) {				\
-		a0 = a->sig[4*i+0]; a1 = a->sig[4*i+1];			\
-		a2 = a->sig[4*i+2]; a3 = a->sig[4*i+3];			\
-		b0 = b->sig[4*i+0]; b1 = b->sig[4*i+1];			\
-		b2 = b->sig[4*i+2]; b3 = b->sig[4*i+3];			\
-		r->sig[4*i+0] = op(a0, b0);				\
-		r->sig[4*i+1] = op(a1, b1);				\
-		r->sig[4*i+2] = op(a2, b2);				\
-		r->sig[4*i+3] = op(a3, b3);				\
-	}								\
-	switch (_NSIG_WORDS % 4) {					\
-	    case 3:							\
-		a0 = a->sig[4*i+0]; a1 = a->sig[4*i+1]; a2 = a->sig[4*i+2]; \
-		b0 = b->sig[4*i+0]; b1 = b->sig[4*i+1]; b2 = b->sig[4*i+2]; \
-		r->sig[4*i+0] = op(a0, b0);				\
-		r->sig[4*i+1] = op(a1, b1);				\
-		r->sig[4*i+2] = op(a2, b2);				\
-		break;							\
+	switch (_NSIG_WORDS) {						\
+	    case 4:							\
+		a3 = a->sig[3]; a2 = a->sig[2];				\
+		b3 = b->sig[3]; b2 = b->sig[2];				\
+		r->sig[3] = op(a3, b3);					\
+		r->sig[2] = op(a2, b2);					\
 	    case 2:							\
-		a0 = a->sig[4*i+0]; a1 = a->sig[4*i+1];			\
-		b0 = b->sig[4*i+0]; b1 = b->sig[4*i+1];			\
-		r->sig[4*i+0] = op(a0, b0);				\
-		r->sig[4*i+1] = op(a1, b1);				\
-		break;							\
+		a1 = a->sig[1]; b1 = b->sig[1];				\
+		r->sig[1] = op(a1, b1);					\
 	    case 1:							\
-		a0 = a->sig[4*i+0]; b0 = b->sig[4*i+0];			\
-		r->sig[4*i+0] = op(a0, b0);				\
+		a0 = a->sig[0]; b0 = b->sig[0];				\
+		r->sig[0] = op(a0, b0);					\
 		break;							\
+	    default:							\
+		_NSIG_WORDS_is_unsupported_size();			\
 	}								\
 }
 
@@ -121,18 +108,16 @@
 #define _SIG_SET_OP(name, op)						\
 static inline void name(sigset_t *set)					\
 {									\
-	unsigned long i;						\
+	extern void _NSIG_WORDS_is_unsupported_size(void);		\
 									\
-	for (i = 0; i < _NSIG_WORDS/4; ++i) {				\
-		set->sig[4*i+0] = op(set->sig[4*i+0]);			\
-		set->sig[4*i+1] = op(set->sig[4*i+1]);			\
-		set->sig[4*i+2] = op(set->sig[4*i+2]);			\
-		set->sig[4*i+3] = op(set->sig[4*i+3]);			\
-	}								\
-	switch (_NSIG_WORDS % 4) {					\
-	    case 3: set->sig[4*i+2] = op(set->sig[4*i+2]);		\
-	    case 2: set->sig[4*i+1] = op(set->sig[4*i+1]);		\
-	    case 1: set->sig[4*i+0] = op(set->sig[4*i+0]);		\
+	switch (_NSIG_WORDS) {						\
+	    case 4: set->sig[3] = op(set->sig[3]);			\
+		    set->sig[2] = op(set->sig[2]);			\
+	    case 2: set->sig[1] = op(set->sig[1]);			\
+	    case 1: set->sig[0] = op(set->sig[0]);			\
+		    break;						\
+	    default:							\
+		_NSIG_WORDS_is_unsupported_size();			\
 	}								\
 }
 
