Hi Greg,

I'll be releasing patches for scanner.[ch] for both the linus and ac trees to
bring them up to date with each other.  Hopefully before the week end.

Regards,
        /\/elson

On Tue, 9 Oct 2001, Greg KH wrote:

> Hi all,
>
> Ok, In trying to resolve all of the USB differences between the -ac and
> Linus trees, I'm down to the attached diff.  My question to everyone is
> which version of each file is the newer one?
>
> I'm pretty sure the usb.c and usb.h files should be taken from the -ac
> tree like Pete said, but I want to make sure no one minds this before I
> do it.
>
> Here's the diffstat:
>
>  include/linux/usb.h                             |   13 +--
>  linux-2.4-ac/drivers/usb/devices.c              |    2
>  linux-2.4-ac/drivers/usb/inode.c                |   14 +---
>  linux-2.4-ac/drivers/usb/kaweth.c               |   33 +++------
>  linux-2.4-ac/drivers/usb/mdc800.c               |   12 ---
>  linux-2.4-ac/drivers/usb/storage/unusual_devs.h |   25 +++++--
>  linux-2.4-ac/drivers/usb/usb.c                  |   80 ++++++++++++------------
>  7 files changed, 87 insertions, 92 deletions
>
> Any help on any of this diffs is greatly appreciated, otherwise I'm just
> going to guess which one is better :)
>
> thanks,
>
> greg k-h
>
>
> diff -Naur -X dontdiff linux-2.4/drivers/usb/devices.c 
>linux-2.4-ac/drivers/usb/devices.c
> --- linux-2.4/drivers/usb/devices.c   Tue Sep 11 13:12:51 2001
> +++ linux-2.4-ac/drivers/usb/devices.c        Wed Oct  3 10:12:42 2001
> @@ -488,7 +488,6 @@
>               return -EFAULT;
>
>       /* enumerate busses */
> -     read_lock_irq (&usb_bus_list_lock);
>       for (buslist = usb_bus_list.next; buslist != &usb_bus_list; buslist = 
>buslist->next) {
>               /* print devices for this bus */
>               bus = list_entry(buslist, struct usb_bus, bus_list);
> @@ -498,7 +497,6 @@
>                       return ret;
>               total_written += ret;
>       }
> -     read_unlock_irq (&usb_bus_list_lock);
>       return total_written;
>  }
>
> diff -Naur -X dontdiff linux-2.4/drivers/usb/inode.c linux-2.4-ac/drivers/usb/inode.c
> --- linux-2.4/drivers/usb/inode.c     Tue Sep 11 13:12:52 2001
> +++ linux-2.4-ac/drivers/usb/inode.c  Wed Oct  3 10:12:43 2001
> @@ -260,15 +260,11 @@
>          struct list_head *list;
>          struct usb_bus *bus;
>
> -     read_lock_irq (&usb_bus_list_lock);
>          for (list = usb_bus_list.next; list != &usb_bus_list; list = list->next) {
>                  bus = list_entry(list, struct usb_bus, bus_list);
> -                if (bus->busnum == busnr) {
> -                     read_unlock_irq (&usb_bus_list_lock);
> +                if (bus->busnum == busnr)
>                          return bus;
> -             }
>          }
> -     read_unlock_irq (&usb_bus_list_lock);
>          return NULL;
>  }
>
> @@ -416,7 +412,7 @@
>               if (i < 2+NRSPECIAL)
>                       return 0;
>               i -= 2+NRSPECIAL;
> -             read_lock_irq (&usb_bus_list_lock);
> +             lock_kernel();
>               for (list = usb_bus_list.next; list != &usb_bus_list; list = 
>list->next) {
>                       if (i > 0) {
>                               i--;
> @@ -428,7 +424,7 @@
>                               break;
>                       filp->f_pos++;
>               }
> -             read_unlock_irq (&usb_bus_list_lock);
> +             unlock_kernel();
>               return 0;
>       }
>  }
> @@ -639,13 +635,13 @@
>               list_add_tail(&inode->u.usbdev_i.slist, &s->u.usbdevfs_sb.ilist);
>               list_add_tail(&inode->u.usbdev_i.dlist, &special[i].inodes);
>       }
> -     read_lock_irq (&usb_bus_list_lock);
> +     lock_kernel();
>       for (blist = usb_bus_list.next; blist != &usb_bus_list; blist = blist->next) {
>               bus = list_entry(blist, struct usb_bus, bus_list);
>               new_bus_inode(bus, s);
>               recurse_new_dev_inode(bus->root_hub, s);
>       }
> -     read_unlock_irq (&usb_bus_list_lock);
> +     unlock_kernel();
>          return s;
>
>   out_no_root:
> diff -Naur -X dontdiff linux-2.4/drivers/usb/kaweth.c 
>linux-2.4-ac/drivers/usb/kaweth.c
> --- linux-2.4/drivers/usb/kaweth.c    Mon Sep 17 08:41:29 2001
> +++ linux-2.4-ac/drivers/usb/kaweth.c Wed Oct  3 10:12:45 2001
> @@ -949,12 +949,10 @@
>   *-------------------------------------------------------------------*/
>  static void usb_api_blocking_completion(urb_t *urb)
>  {
> -        api_wrapper_data *awd = (api_wrapper_data *)urb->context;
> -
> -        if (waitqueue_active(awd->wakeup)) {
> -                wake_up(awd->wakeup);
> -     }
> +        struct usb_api_data *awd = (struct usb_api_data *)urb->context;
>
> +     awd->done=1;
> +     wake_up(&awd->wqh);
>  }
>
>  /*-------------------------------------------------------------------*
> @@ -965,36 +963,31 @@
>  static int usb_start_wait_urb(urb_t *urb, int timeout, int* actual_length)
>  {
>          DECLARE_WAITQUEUE(wait, current);
> -        DECLARE_WAIT_QUEUE_HEAD(wqh);
> -        api_wrapper_data awd;
> +     struct usb_api_data awd;
>          int status;
>
> -        awd.wakeup = &wqh;
> -        init_waitqueue_head(&wqh);
> +        init_waitqueue_head(&awd.wqh);
> +        awd.done = 0;
> +
>          current->state = TASK_INTERRUPTIBLE;
> -        add_wait_queue(&wqh, &wait);
> +        add_wait_queue(&awd.wqh, &wait);
>          urb->context = &awd;
>          status = usb_submit_urb(urb);
>          if (status) {
>                  // something went wrong
>                  usb_free_urb(urb);
>                  current->state = TASK_RUNNING;
> -                remove_wait_queue(&wqh, &wait);
> +                remove_wait_queue(&awd.wqh, &wait);
>                  return status;
>          }
>
> -        if (urb->status == -EINPROGRESS) {
> -                while (timeout && urb->status == -EINPROGRESS)
> -                        status = timeout = schedule_timeout(timeout);
> -        }
> -     else {
> -                status = 1;
> -     }
> +     while (timeout && !awd.done)
> +             timeout = schedule_timeout(timeout);
>
>          current->state = TASK_RUNNING;
> -        remove_wait_queue(&wqh, &wait);
> +        remove_wait_queue(&awd.wqh, &wait);
>
> -        if (!status) {
> +        if (!timeout) {
>                  // timeout
>                  kaweth_warn("usb_control/bulk_msg: timeout");
>                  usb_unlink_urb(urb);  // remove urb safely
> diff -Naur -X dontdiff linux-2.4/drivers/usb/mdc800.c 
>linux-2.4-ac/drivers/usb/mdc800.c
> --- linux-2.4/drivers/usb/mdc800.c    Tue Oct  9 09:48:52 2001
> +++ linux-2.4-ac/drivers/usb/mdc800.c Wed Oct  3 10:12:45 2001
> @@ -718,7 +718,6 @@
>  static ssize_t mdc800_device_write (struct file *file, const char *buf, size_t len, 
>loff_t *pos)
>  {
>       int i=0;
> -     char c;
>
>       spin_lock (&mdc800->io_lock);
>       if (mdc800->state != READY)
> @@ -741,14 +740,7 @@
>               }
>
>               /* check for command start */
> -
> -             if(get_user(c, buf+i))
> -             {
> -                     spin_unlock (&mdc800->io_lock);
> -                     return -EFAULT;
> -             }
> -
> -             if (c == (char) 0x55)
> +             if (buf [i] == (char) 0x55)
>               {
>                       mdc800->in_count=0;
>                       mdc800->out_count=0;
> @@ -759,7 +751,7 @@
>               /* save command byte */
>               if (mdc800->in_count < 8)
>               {
> -                     mdc800->in[mdc800->in_count]=c;
> +                     mdc800->in[mdc800->in_count]=buf[i];
>                       mdc800->in_count++;
>               }
>               else
> diff -Naur -X dontdiff linux-2.4/drivers/usb/storage/unusual_devs.h 
>linux-2.4-ac/drivers/usb/storage/unusual_devs.h
> --- linux-2.4/drivers/usb/storage/unusual_devs.h      Tue Sep 11 13:12:55 2001
> +++ linux-2.4-ac/drivers/usb/storage/unusual_devs.h   Fri Oct  5 09:51:07 2001
> @@ -60,6 +60,11 @@
>               US_SC_8070, US_PR_SCM_ATAPI, init_8200e, 0),
>  #endif
>
> +UNUSUAL_DEV(  0x04cb, 0x0100, 0x0000, 0x2210,
> +             "Fujifilm",
> +             "FinePix 1400Zoom",
> +             US_SC_8070, US_PR_CBI, NULL, US_FL_FIX_INQUIRY),
> +
>  #ifdef CONFIG_USB_STORAGE_DPCM
>  UNUSUAL_DEV(  0x0436, 0x0005, 0x0100, 0x0100,
>               "Microtech",
> @@ -293,18 +298,17 @@
>                  US_FL_SINGLE_LUN ),
>
>  #ifdef CONFIG_USB_STORAGE_SDDR09
> -UNUSUAL_DEV(  0x0781, 0x0200, 0x0000, 0x9999,
> +UNUSUAL_DEV(  0x0781, 0x0200, 0x0100, 0x0208,
>               "Sandisk",
>               "ImageMate SDDR-09",
>               US_SC_SCSI, US_PR_EUSB_SDDR09, NULL,
>               US_FL_SINGLE_LUN | US_FL_START_STOP ),
> -#endif
>
> -#ifdef CONFIG_USB_STORAGE_FREECOM
> -UNUSUAL_DEV(  0x07ab, 0xfc01, 0x0000, 0x9999,
> -                "Freecom",
> -                "USB-IDE",
> -                US_SC_QIC, US_PR_FREECOM, freecom_init, 0),
> +UNUSUAL_DEV(  0x0781, 0x0200, 0x0000, 0x9999,
> +             "Sandisk",
> +             "ImageMate SDDR-09",
> +             US_SC_SCSI, US_PR_EUSB_SDDR09, NULL,
> +             US_FL_SINGLE_LUN | US_FL_START_STOP ),
>  #endif
>
>  UNUSUAL_DEV(  0x07af, 0x0004, 0x0100, 0x0100,
> @@ -312,6 +316,13 @@
>               "USB-SCSI-DB25",
>               US_SC_SCSI, US_PR_BULK, usb_stor_euscsi_init,
>               US_FL_SCM_MULT_TARG ),
> +
> +#ifdef CONFIG_USB_STORAGE_FREECOM
> +UNUSUAL_DEV( 0x07ab, 0xfc01, 0x0000, 0x9999,
> +                "Freecom",
> +                "USB-IDE",
> +                US_SC_QIC, US_PR_FREECOM, freecom_init, 0),
> +#endif
>
>  UNUSUAL_DEV(  0x07af, 0x0005, 0x0100, 0x0100,
>               "Microtech",
> diff -Naur -X dontdiff linux-2.4/drivers/usb/usb.c linux-2.4-ac/drivers/usb/usb.c
> --- linux-2.4/drivers/usb/usb.c       Tue Oct  9 09:46:58 2001
> +++ linux-2.4-ac/drivers/usb/usb.c    Tue Oct  9 09:47:49 2001
> @@ -1042,15 +1042,11 @@
>   *-------------------------------------------------------------------*/
>  static void usb_api_blocking_completion(urb_t *urb)
>  {
> -     api_wrapper_data *awd = (api_wrapper_data *)urb->context;
> +     struct usb_api_data *awd = (struct usb_api_data *)urb->context;
>
> -     if (waitqueue_active(awd->wakeup))
> -             wake_up(awd->wakeup);
> -#if 0
> -     else
> -             dbg("(blocking_completion): waitqueue empty!");
> -             // even occurs if urb was unlinked by timeout...
> -#endif
> +     awd->done = 1;
> +     wmb();
> +     wake_up(&awd->wqh);
>  }
>
>  /*-------------------------------------------------------------------*
> @@ -1061,38 +1057,46 @@
>  static int usb_start_wait_urb(urb_t *urb, int timeout, int* actual_length)
>  {
>       DECLARE_WAITQUEUE(wait, current);
> -     DECLARE_WAIT_QUEUE_HEAD(wqh);
> -     api_wrapper_data awd;
> +     struct usb_api_data awd;
>       int status;
> -
> -     awd.wakeup = &wqh;
> -     init_waitqueue_head(&wqh);
> -     current->state = TASK_INTERRUPTIBLE;
> -     add_wait_queue(&wqh, &wait);
> +
> +     init_waitqueue_head(&awd.wqh);
> +     awd.done = 0;
> +
> +     set_current_state(TASK_UNINTERRUPTIBLE);
> +     add_wait_queue(&awd.wqh, &wait);
> +
>       urb->context = &awd;
>       status = usb_submit_urb(urb);
>       if (status) {
>               // something went wrong
>               usb_free_urb(urb);
> -             current->state = TASK_RUNNING;
> -             remove_wait_queue(&wqh, &wait);
> +             set_current_state(TASK_RUNNING);
> +             remove_wait_queue(&awd.wqh, &wait);
>               return status;
>       }
>
> -     if (urb->status == -EINPROGRESS) {
> -             while (timeout && urb->status == -EINPROGRESS)
> -                     status = timeout = schedule_timeout(timeout);
> -     } else
> -             status = 1;
> -
> -     current->state = TASK_RUNNING;
> -     remove_wait_queue(&wqh, &wait);
> -
> -     if (!status) {
> -             // timeout
> -             printk("usb_control/bulk_msg: timeout\n");
> -             usb_unlink_urb(urb);  // remove urb safely
> -             status = -ETIMEDOUT;
> +     while (timeout && !awd.done)
> +     {
> +             timeout = schedule_timeout(timeout);
> +             set_current_state(TASK_UNINTERRUPTIBLE);
> +             rmb();
> +     }
> +
> +     set_current_state(TASK_RUNNING);
> +     remove_wait_queue(&awd.wqh, &wait);
> +
> +     if (!timeout && !awd.done) {
> +             if (urb->status != -EINPROGRESS) {      /* No callback?!! */
> +                     printk(KERN_ERR "usb: raced timeout, "
> +                         "pipe 0x%x status %d time left %d\n",
> +                         urb->pipe, urb->status, timeout);
> +                     status = urb->status;
> +             } else {
> +                     printk("usb_control/bulk_msg: timeout\n");
> +                     usb_unlink_urb(urb);  // remove urb safely
> +                     status = -ETIMEDOUT;
> +             }
>       } else
>               status = urb->status;
>
> @@ -1116,15 +1120,14 @@
>       if (!urb)
>               return -ENOMEM;
>
> -     FILL_CONTROL_URB(urb, usb_dev, pipe, (unsigned char*)cmd, data, len,    /* 
>build urb */
> -                (usb_complete_t)usb_api_blocking_completion,0);
> +     FILL_CONTROL_URB(urb, usb_dev, pipe, (unsigned char*)cmd, data, len,
> +                usb_api_blocking_completion, 0);
>
>       retv = usb_start_wait_urb(urb, timeout, &length);
>       if (retv < 0)
>               return retv;
>       else
>               return length;
> -
>  }
>
>  /**
> @@ -1205,8 +1208,8 @@
>       if (!urb)
>               return -ENOMEM;
>
> -     FILL_BULK_URB(urb,usb_dev,pipe,(unsigned char*)data,len,   /* build urb */
> -                     (usb_complete_t)usb_api_blocking_completion,0);
> +     FILL_BULK_URB(urb, usb_dev, pipe, data, len,
> +                 usb_api_blocking_completion, 0);
>
>       return usb_start_wait_urb(urb,timeout,actual_length);
>  }
> @@ -1767,8 +1770,11 @@
>   * These are the actual routines to send
>   * and receive control messages.
>   */
> -
> +#ifdef CONFIG_USB_LONG_TIMEOUT
> +#define GET_TIMEOUT 4
> +#else
>  #define GET_TIMEOUT 3
> +#endif
>  #define SET_TIMEOUT 3
>
>  int usb_set_address(struct usb_device *dev)
> --- linux-2.4/include/linux/usb.h     Mon Oct  8 08:57:55 2001
> +++ linux-2.4-ac/include/linux/usb.h  Mon Oct  8 16:31:15 2001
> @@ -539,13 +539,12 @@
>   *                         SYNCHRONOUS CALL SUPPORT                  *
>   *-------------------------------------------------------------------*/
>
> -typedef struct
> +struct usb_api_data
>  {
> -  wait_queue_head_t *wakeup;
> -
> -  void* stuff;
> -  /* more to follow */
> -} api_wrapper_data;
> +     wait_queue_head_t wqh;
> +     int done;
> +     /* void* stuff; */      /* Possible extension later. */
> +};
>
>  /* -------------------------------------------------------------------------- */
>
> @@ -718,7 +717,7 @@
>   * appropriately.
>   *
>   * NOTE:  there's no encoding (yet?) for a "high speed" endpoint; treat them
> - * like full speed devices.
> + * like like full speed devices.
>   */
>
>  #define PIPE_ISOCHRONOUS             0
>
> _______________________________________________
> [EMAIL PROTECTED]
> To unsubscribe, use the last form field at:
> https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
>

-- 
~~ ** ~~  UNIX remains, to this very day, a dark endless maze of ~~ ** ~~
           catwalks and mantraps, an eternal hard-hat area that
        kills the foolish and shelters the brave. (UNIX Manifesto)


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

Reply via email to