lkml.org 
[lkml]   [2013]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 31/71] staging: vt6656: 64bit fixes: vCommandTimerWait change calculation of timer.
    Date
    3.0-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Malcolm Priestley <tvboxspy@gmail.com>

    commit 70e227790d4ee4590023d8041a3485f8053593fc upstream.

    The timer appears to run too fast/race on 64 bit systems.

    Using msecs_to_jiffies seems to cause a deadlock on 64 bit.

    A calculation of (MSecond * HZ) / 1000 appears to run satisfactory.

    Change BSSIDInfoCount to u32.

    After this patch the driver can be successfully connect on little endian 64/32 bit systems.

    Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/staging/vt6656/wcmd.c | 20 +++++++++++---------
    drivers/staging/vt6656/wpa2.h | 4 ++--
    2 files changed, 13 insertions(+), 11 deletions(-)

    --- a/drivers/staging/vt6656/wcmd.c
    +++ b/drivers/staging/vt6656/wcmd.c
    @@ -316,17 +316,19 @@ s_MgrMakeProbeRequest(
    return pTxPacket;
    }

    -void vCommandTimerWait(void *hDeviceContext, unsigned int MSecond)
    +void vCommandTimerWait(void *hDeviceContext, unsigned long MSecond)
    {
    - PSDevice pDevice = (PSDevice)hDeviceContext;
    + PSDevice pDevice = (PSDevice)hDeviceContext;

    - init_timer(&pDevice->sTimerCommand);
    - pDevice->sTimerCommand.data = (unsigned long)pDevice;
    - pDevice->sTimerCommand.function = (TimerFunction)vRunCommand;
    - // RUN_AT :1 msec ~= (HZ/1024)
    - pDevice->sTimerCommand.expires = (unsigned int)RUN_AT((MSecond * HZ) >> 10);
    - add_timer(&pDevice->sTimerCommand);
    - return;
    + init_timer(&pDevice->sTimerCommand);
    +
    + pDevice->sTimerCommand.data = (unsigned long)pDevice;
    + pDevice->sTimerCommand.function = (TimerFunction)vRunCommand;
    + pDevice->sTimerCommand.expires = RUN_AT((MSecond * HZ) / 1000);
    +
    + add_timer(&pDevice->sTimerCommand);
    +
    + return;
    }

    void vRunCommand(void *hDeviceContext)
    --- a/drivers/staging/vt6656/wpa2.h
    +++ b/drivers/staging/vt6656/wpa2.h
    @@ -45,8 +45,8 @@ typedef struct tagsPMKIDInfo {
    } PMKIDInfo, *PPMKIDInfo;

    typedef struct tagSPMKIDCache {
    - unsigned long BSSIDInfoCount;
    - PMKIDInfo BSSIDInfo[MAX_PMKID_CACHE];
    + u32 BSSIDInfoCount;
    + PMKIDInfo BSSIDInfo[MAX_PMKID_CACHE];
    } SPMKIDCache, *PSPMKIDCache;





    \
     
     \ /
      Last update: 2013-01-16 01:21    [W:3.409 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site