Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd9a6dba authored by Malcolm Priestley's avatar Malcolm Priestley Committed by Greg Kroah-Hartman
Browse files

staging: vt6656: covert BSSvSecondCallBack to delayed_work.



timer to delay workqueue.
sTimerSecondCallback -> second_callback_work

The delayed work queue is declared in device.h

This timer is very heavy on the system.

Improves over performance of driver and reduce the atomic
area of driver.

Signed-off-by: default avatarMalcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 94488a7e
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -813,8 +813,10 @@ void BSSvAddMulticastNode(struct vnt_private *pDevice)
 *
-*/

void BSSvSecondCallBack(struct vnt_private *pDevice)
void BSSvSecondCallBack(struct work_struct *work)
{
	struct vnt_private *pDevice = container_of(work,
			struct vnt_private, second_callback_work.work);
	struct vnt_manager *pMgmt = &pDevice->vnt_mgmt;
	int ii;
	PWLAN_IE_SSID pItemSSID, pCurrSSID;
@@ -1126,8 +1128,7 @@ else {

    spin_unlock_irq(&pDevice->lock);

    pMgmt->sTimerSecondCallback.expires = RUN_AT(HZ);
    add_timer(&pMgmt->sTimerSecondCallback);
	schedule_delayed_work(&pDevice->second_callback_work, HZ);
}

/*+
+1 −1
Original line number Diff line number Diff line
@@ -262,7 +262,7 @@ void BSSvCreateOneNode(struct vnt_private *, u32 *puNodeIndex);
void BSSvUpdateAPNode(struct vnt_private *, u16 *pwCapInfo,
	PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pExtSuppRates);

void BSSvSecondCallBack(struct vnt_private *);
void BSSvSecondCallBack(struct work_struct *work);

void BSSvUpdateNodeTxCounter(struct vnt_private *, PSStatCounter pStatistic,
	u8 byTSR, u8 byPktNO);
+2 −0
Original line number Diff line number Diff line
@@ -708,6 +708,8 @@ struct vnt_private {

	/* command timer */
	struct delayed_work run_command_work;
	/* One second callback */
	struct delayed_work second_callback_work;

	struct timer_list sTimerTxData;
	unsigned long nTxDataTimeCout;
+5 −3
Original line number Diff line number Diff line
@@ -703,6 +703,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id)
	device_set_options(pDevice);
	spin_lock_init(&pDevice->lock);
	INIT_DELAYED_WORK(&pDevice->run_command_work, vRunCommand);
	INIT_DELAYED_WORK(&pDevice->second_callback_work, BSSvSecondCallBack);

	pDevice->tx_80211 = device_dma0_tx_80211;
	pDevice->vnt_mgmt.pAdapter = (void *) pDevice;
@@ -985,7 +986,9 @@ static int device_open(struct net_device *dev)
    tasklet_init(&pDevice->RxMngWorkItem, (void *)RXvMngWorkItem, (unsigned long)pDevice);
    tasklet_init(&pDevice->ReadWorkItem, (void *)RXvWorkItem, (unsigned long)pDevice);
    tasklet_init(&pDevice->EventWorkItem, (void *)INTvWorkItem, (unsigned long)pDevice);
	add_timer(&pDevice->vnt_mgmt.sTimerSecondCallback);

	schedule_delayed_work(&pDevice->second_callback_work, HZ);

	pDevice->int_interval = 100;  /* max 100 microframes */
    pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled;

@@ -1079,8 +1082,7 @@ static int device_close(struct net_device *dev)
    pDevice->fKillEventPollingThread = true;

	cancel_delayed_work_sync(&pDevice->run_command_work);

    del_timer(&pMgmt->sTimerSecondCallback);
	cancel_delayed_work_sync(&pDevice->second_callback_work);

    del_timer(&pDevice->sTimerTxData);

+2 −2
Original line number Diff line number Diff line
@@ -690,7 +690,7 @@ void vRunCommand(struct work_struct *work)
            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCommandState == WLAN_CMD_AP_MODE_START\n");

            if (pMgmt->eConfigMode == WMAC_CONFIG_AP) {
                del_timer(&pMgmt->sTimerSecondCallback);
		cancel_delayed_work_sync(&pDevice->second_callback_work);
                pMgmt->eCurrState = WMAC_STATE_IDLE;
                pMgmt->eCurrMode = WMAC_MODE_STANDBY;
                pDevice->bLinkPass = false;
@@ -718,7 +718,7 @@ void vRunCommand(struct work_struct *work)
                }
                pDevice->bLinkPass = true;
                ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_STS,LEDSTS_INTER);
                add_timer(&pMgmt->sTimerSecondCallback);
		schedule_delayed_work(&pDevice->second_callback_work, HZ);
            }
            s_bCommandComplete(pDevice);
            break;
Loading