# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#                  ChangeSet    1.517   -> 1.518  
#       drivers/usb/storage/usb.c       1.24    -> 1.25   
#       drivers/usb/storage/scsiglue.c  1.21    -> 1.22   
#       drivers/usb/storage/usb.h       1.10    -> 1.11   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/06/18      [EMAIL PROTECTED]   1.518
# [PATCH] USB storage: change atomic_t to bitfield, consolidate #defines
# 
# This patch changes from using an atomic_t with two states to using a
# bitfield to determine if a device is attached.  It also moves some common
# #defines into a common header file.
# 
# courtsey of Alan Stern <[EMAIL PROTECTED]>
# --------------------------------------------
#
diff -Nru a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
--- a/drivers/usb/storage/scsiglue.c    Tue Jun 18 17:02:00 2002
+++ b/drivers/usb/storage/scsiglue.c    Tue Jun 18 17:02:00 2002
@@ -51,12 +51,6 @@
 
 #include <linux/slab.h>
 
-/*
- * kernel thread actions
- */
-
-#define US_ACT_COMMAND         1
-#define US_ACT_EXIT            5
 
 /***********************************************************************
  * Host functions 
@@ -204,7 +198,7 @@
        US_DEBUGP("device_reset() called\n" );
 
        /* if the device was removed, then we're already reset */
-       if (atomic_read(&us->sm_state) == US_STATE_DETACHED)
+       if (!test_bit(DEV_ATTACHED, &us->bitflags))
                return SUCCESS;
 
        scsi_unlock(srb->host);
@@ -235,7 +229,7 @@
        US_DEBUGP("bus_reset() called\n");
 
        /* if the device has been removed, this worked */
-       if (atomic_read(&us->sm_state) == US_STATE_DETACHED) {
+       if (!test_bit(DEV_ATTACHED, &us->bitflags)) {
                US_DEBUGP("-- device removed already\n");
                return SUCCESS;
        }
@@ -337,8 +331,8 @@
 
        /* show the GUID of the device */
        SPRINTF("         GUID: " GUID_FORMAT "\n", GUID_ARGS(us->guid));
-       SPRINTF("     Attached: %s\n", (atomic_read(&us->sm_state) ==
-                       US_STATE_DETACHED) ? "Yes" : "No");
+       SPRINTF("     Attached: %s\n", (test_bit(DEV_ATTACHED, &us->bitflags)
+                       ? "Yes" : "No"));
 
        /*
         * Calculate start of next buffer, and return value.
diff -Nru a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
--- a/drivers/usb/storage/usb.c Tue Jun 18 17:02:00 2002
+++ b/drivers/usb/storage/usb.c Tue Jun 18 17:02:00 2002
@@ -99,13 +99,6 @@
 
 static int my_host_number;
 
-/*
- * kernel thread actions
- */
-
-#define US_ACT_COMMAND         1
-#define US_ACT_EXIT            5
-
 /* The list of structures and the protective lock for them */
 struct us_data *us_list;
 struct semaphore us_list_semaphore;
@@ -426,7 +419,7 @@
                down(&(us->dev_semaphore));
 
                /* our device has gone - pretend not ready */
-               if (atomic_read(&us->device_state) == US_STATE_DETACHED) {
+               if (!test_bit(DEV_ATTACHED, &us->bitflags)) {
                        US_DEBUGP("Request is for removed device\n");
                        /* For REQUEST_SENSE, it's the data.  But
                         * for anything else, it should look like
@@ -450,7 +443,7 @@
                                       sizeof(usb_stor_sense_notready));
                                us->srb->result = CHECK_CONDITION << 1;
                        }
-               } else { /* atomic_read(&us->device_state) == STATE_DETACHED */
+               } else { /* test_bit(DEV_ATTACHED, &us->bitflags) */
 
                        /* Handle those devices which need us to fake 
                         * their inquiry data */
@@ -695,7 +688,7 @@
         */
        ss = us_list;
        while ((ss != NULL) && 
-                  ((atomic_read(&ss->device_state) == US_STATE_ATTACHED) ||
+                  (test_bit(DEV_ATTACHED, &ss->bitflags) ||
                    !GUID_EQUAL(guid, ss->guid)))
                ss = ss->next;
 
@@ -710,7 +703,7 @@
                /* establish the connection to the new device upon reconnect */
                ss->ifnum = ifnum;
                ss->pusb_dev = dev;
-               atomic_set(&ss->device_state, US_STATE_ATTACHED);
+               set_bit(DEV_ATTACHED, &ss->bitflags);
 
                /* copy over the endpoint data */
                ss->ep_in = ep_in->bEndpointAddress & 
@@ -979,7 +972,7 @@
 
                /* start up our control thread */
                atomic_set(&ss->sm_state, US_STATE_IDLE);
-               atomic_set(&ss->device_state, US_STATE_ATTACHED);
+               set_bit(DEV_ATTACHED, &ss->bitflags);
                ss->pid = kernel_thread(usb_stor_control_thread, ss,
                                        CLONE_VM);
                if (ss->pid < 0) {
@@ -1040,7 +1033,7 @@
                ss->current_urb = NULL;
        }
 
-       atomic_set(&ss->device_state, US_STATE_DETACHED);
+       clear_bit(DEV_ATTACHED, &ss->bitflags);
        ss->pusb_dev = NULL;
        if (new_device)
                kfree(ss);
@@ -1088,7 +1081,7 @@
        /* mark the device as gone */
        usb_put_dev(ss->pusb_dev);
        ss->pusb_dev = NULL;
-       atomic_set(&ss->sm_state, US_STATE_DETACHED);
+       clear_bit(DEV_ATTACHED, &ss->bitflags);
 
        /* unlock access to the device data structure */
        up(&(ss->dev_semaphore));
diff -Nru a/drivers/usb/storage/usb.h b/drivers/usb/storage/usb.h
--- a/drivers/usb/storage/usb.h Tue Jun 18 17:02:00 2002
+++ b/drivers/usb/storage/usb.h Tue Jun 18 17:02:00 2002
@@ -103,9 +103,10 @@
 #define US_FL_SCM_MULT_TARG   0x00000020 /* supports multiple targets */
 #define US_FL_FIX_INQUIRY     0x00000040 /* INQUIRY response needs fixing */
 
-/* device attached/detached states */
-#define US_STATE_DETACHED      1
-#define US_STATE_ATTACHED      2
+
+/* kernel thread actions */
+#define US_ACT_COMMAND         1
+#define US_ACT_EXIT            5
 
 /* processing state machine states */
 #define US_STATE_IDLE          1
@@ -127,10 +128,9 @@
        /* The device we're working with
         * It's important to note:
         *    (o) you must hold dev_semaphore to change pusb_dev
-        *    (o) device_state should change whenever pusb_dev does
+        *    (o) DEV_ATTACHED in bitflags should change whenever pusb_dev does
         */
        struct semaphore        dev_semaphore;   /* protect pusb_dev */
-       atomic_t                device_state;    /* attached or detached */
        struct usb_device       *pusb_dev;       /* this usb_device */
 
        unsigned int            flags;           /* from filter initially */
@@ -174,6 +174,7 @@
        struct semaphore        ip_waitq;        /* for CBI interrupts   */
        unsigned long           bitflags;        /* single-bit flags:    */
 #define IP_WANTED      1                        /* is an IRQ expected?  */
+#define DEV_ATTACHED   2                        /* is the dev. attached?*/
 
        /* interrupt communications data */
        struct semaphore        irq_urb_sem;     /* to protect irq_urb   */

----------------------------------------------------------------------------
                   Bringing you mounds of caffeinated joy
                   >>>     http://thinkgeek.com/sf    <<<

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to