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 Original line 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;
	struct vnt_manager *pMgmt = &pDevice->vnt_mgmt;
	int ii;
	int ii;
	PWLAN_IE_SSID pItemSSID, pCurrSSID;
	PWLAN_IE_SSID pItemSSID, pCurrSSID;
@@ -1126,8 +1128,7 @@ else {


    spin_unlock_irq(&pDevice->lock);
    spin_unlock_irq(&pDevice->lock);


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


/*+
/*+
+1 −1
Original line number Original line Diff line number Diff line
@@ -262,7 +262,7 @@ void BSSvCreateOneNode(struct vnt_private *, u32 *puNodeIndex);
void BSSvUpdateAPNode(struct vnt_private *, u16 *pwCapInfo,
void BSSvUpdateAPNode(struct vnt_private *, u16 *pwCapInfo,
	PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pExtSuppRates);
	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,
void BSSvUpdateNodeTxCounter(struct vnt_private *, PSStatCounter pStatistic,
	u8 byTSR, u8 byPktNO);
	u8 byTSR, u8 byPktNO);
+2 −0
Original line number Original line Diff line number Diff line
@@ -708,6 +708,8 @@ struct vnt_private {


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


	struct timer_list sTimerTxData;
	struct timer_list sTimerTxData;
	unsigned long nTxDataTimeCout;
	unsigned long nTxDataTimeCout;
+5 −3
Original line number Original line 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);
	device_set_options(pDevice);
	spin_lock_init(&pDevice->lock);
	spin_lock_init(&pDevice->lock);
	INIT_DELAYED_WORK(&pDevice->run_command_work, vRunCommand);
	INIT_DELAYED_WORK(&pDevice->run_command_work, vRunCommand);
	INIT_DELAYED_WORK(&pDevice->second_callback_work, BSSvSecondCallBack);


	pDevice->tx_80211 = device_dma0_tx_80211;
	pDevice->tx_80211 = device_dma0_tx_80211;
	pDevice->vnt_mgmt.pAdapter = (void *) pDevice;
	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->RxMngWorkItem, (void *)RXvMngWorkItem, (unsigned long)pDevice);
    tasklet_init(&pDevice->ReadWorkItem, (void *)RXvWorkItem, (unsigned long)pDevice);
    tasklet_init(&pDevice->ReadWorkItem, (void *)RXvWorkItem, (unsigned long)pDevice);
    tasklet_init(&pDevice->EventWorkItem, (void *)INTvWorkItem, (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->int_interval = 100;  /* max 100 microframes */
    pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled;
    pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled;


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


	cancel_delayed_work_sync(&pDevice->run_command_work);
	cancel_delayed_work_sync(&pDevice->run_command_work);

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


    del_timer(&pDevice->sTimerTxData);
    del_timer(&pDevice->sTimerTxData);


+2 −2
Original line number Original line 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");
            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCommandState == WLAN_CMD_AP_MODE_START\n");


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