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();                      \
       }                                                               \
}