Skip to content

Commit

Permalink
staging: vt6656: 64bit fixes: vCommandTimerWait change calculation of…
Browse files Browse the repository at this point in the history
… timer.

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 <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
Malcolm Priestley authored and gregkh committed Nov 13, 2012
1 parent 1d651be commit 70e2277
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 11 deletions.
20 changes: 11 additions & 9 deletions drivers/staging/vt6656/wcmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/vt6656/wpa2.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;


Expand Down

0 comments on commit 70e2277

Please sign in to comment.