lkml.org 
[lkml]   [2009]   [Apr]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 2.6.30-rc2-git2: Reported regressions from 2.6.29
    On Fri, 17 Apr 2009 19:55:29 -0700 (PDT)
    Linus Torvalds <torvalds@linux-foundation.org> wrote:

    > > @@ -742,7 +742,7 @@ static int uvc_alloc_urb_buffers(struct
    > > uvc_video_device *video,
    > > /* Buffers are already allocated, bail out. */
    > > if (video->urb_size)
    > > - return 0;
    > > + return DIV_ROUND_UP(video->urb_size, psize);
    >
    > I don't think this is right. It should round _down_.
    >
    > It's supposed to return 'npackets', but if you pass it a different
    > packet size than it was passed originally, it can now return a
    > potentially bigger number than the already allocated buffer, no?
    >
    > So I think it should round down (ie use a regular divide). No?

    Yes,you are correct, please ignore my last reply, and following is
    the fixed patch.

    Thanks.

    From a3b3d72cdd57a0699fb643b41b78eb7beb211ff5 Mon Sep 17 00:00:00 2001
    From: Ming Lei <tom.leiming@gmail.com>
    Date: Wed, 15 Apr 2009 22:32:51 +0800
    Subject: [PATCH] V4L/DVB:usbvideo:fix uvc resume failed(v2)

    Now urb buffers is not freed before suspend, so uvc_alloc_urb_buffers
    should return packet counts allocated originally during uvc resume
    , instead of zero.

    This version uses round down to return packet counts on Linus's
    suggestions, or else may lead to buffer destructed if packet size
    is changed before calling uvc_alloc_urb_buffers() in this kind of
    case.

    This patch is against v2.6.30-rc2.

    Signed-off-by: Ming Lei <tom.leiming@gmail.com>
    ---
    drivers/media/video/uvc/uvc_video.c | 2 +-
    1 files changed, 1 insertions(+), 1 deletions(-)

    diff --git a/drivers/media/video/uvc/uvc_video.c b/drivers/media/video/uvc/uvc_video.c
    index a95e173..6ce974d 100644
    --- a/drivers/media/video/uvc/uvc_video.c
    +++ b/drivers/media/video/uvc/uvc_video.c
    @@ -742,7 +742,7 @@ static int uvc_alloc_urb_buffers(struct uvc_video_device *video,

    /* Buffers are already allocated, bail out. */
    if (video->urb_size)
    - return 0;
    + return video->urb_size / psize;

    /* Compute the number of packets. Bulk endpoints might transfer UVC
    * payloads accross multiple URBs.
    --
    1.6.0.GIT




    --
    Lei Ming


    \
     
     \ /
      Last update: 2009-04-18 06:55    [W:0.048 / U:31.480 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site