staging: vt6655: replace memcpy() by ether_addr_copy() using coccinelle and pack variables
This patch focuses on fixing the following warning generated
by checkpatch.pl for the file rxtx.c :
Prefer ether_addr_copy() over memcpy() if the Ethernet addresses
are __aligned(2)
The changes were applied using the following coccinelle rule:
@@ expression e1, e2; @@
- memcpy(e1, e2, ETH_ALEN);
+ ether_addr_copy(e1, e2);
After applying the rule, some referencing operations were
adjusted manually to avoid a gcc compilation warning.
According to ether_addr_copy() description and functionality,
all Ethernet addresses should align to the u16 datatype.
A check was made on the following datastructures:
- vnt_mic_hdr
- tagS802_11Header
- tagSEthernetHeader
- vnt_rts_g
- ieee80211_rts
- vnt_private
To maintain that the array abyCurrentNetAddr in vnt_private is aligned,
it was placed before the boolean bLinkPass in the struct definition.
The definition can be found in device.h. A couple of variables were
packed in holes detected by pahole.
Output of pahole when running it on rxtx.o after the changes:
truct tagSEthernetHeader {
unsigned char abyDstAddr[6]; /* 0 6 */
unsigned char abySrcAddr[6]; /* 6 6 */
short unsigned int wType; /* 12 2 */
/* size: 14, cachelines: 1, members: 3 */
/* last cacheline: 14 bytes */
};
struct tagS802_11Header {
short unsigned int wFrameCtl; /* 0 2 */
short unsigned int wDurationID; /* 2 2 */
unsigned char abyAddr1[6]; /* 4 6 */
unsigned char abyAddr2[6]; /* 10 6 */
unsigned char abyAddr3[6]; /* 16 6 */
short unsigned int wSeqCtl; /* 22 2 */
unsigned char abyAddr4[6]; /* 24 6 */
/* size: 30, cachelines: 1, members: 7 */
/* last cacheline: 30 bytes */
};
struct ieee80211_rts {
__le16 frame_control; /* 0 2 */
__le16 duration; /* 2 2 */
u8 ra[6]; /* 4 6 */
u8 ta[6]; /* 10 6 */
/* size: 16, cachelines: 1, members: 4 */
/* last cacheline: 16 bytes */
};
struct vnt_private {
struct pci_dev * pcid; /* 0 4 */
struct net_device * dev; /* 4 4 */
dma_addr_t pool_dma; /* 8 4 */
dma_addr_t rd0_pool_dma; /* 12 4 */
dma_addr_t rd1_pool_dma; /* 16 4 */
dma_addr_t td0_pool_dma; /* 20 4 */
dma_addr_t td1_pool_dma; /* 24 4 */
dma_addr_t tx_bufs_dma0; /* 28 4 */
dma_addr_t tx_bufs_dma1; /* 32 4 */
dma_addr_t tx_beacon_dma; /* 36 4 */
unsigned char * tx0_bufs; /* 40 4 */
unsigned char * tx1_bufs; /* 44 4 */
unsigned char * tx_beacon_bufs; /* 48 4 */
CHIP_TYPE chip_id; /* 52 4 */
void * PortOffset; /* 56 4 */
long unsigned int dwIsr; /* 60 4 */
/*--- cacheline 1 boundary (64 bytes) ---*/
u32 memaddr; /* 64 4 */
u32 ioaddr; /* 68 4 */
u32 io_size; /* 72 4 */
unsigned char byRevId; /* 76 1 */
unsigned char byRxMode; /* 77 1 */
short unsigned int SubSystemID; /* 78 2 */
short unsigned int SubVendorID; /* 80 2 */
spinlock_t lock; /* 82 2 */
int nTxQueues; /* 84 4 */
volatile int iTDUsed; /* 88 8 */
volatile PSTxDesc apCurrTD; /* 96 8 */
volatile PSTxDesc apTailTD; /* 104 8 */
volatile PSTxDesc apTD0Rings; /* 112 4 */
volatile PSTxDesc apTD1Rings; /* 116 4 */
volatile PSRxDesc aRD0Ring; /* 120 4 */
volatile PSRxDesc aRD1Ring; /* 124 4 */
/*--- cacheline 2 boundary (128 bytes) ---*/
volatile PSRxDesc pCurrRD; /* 128 8 */
SCache sDupRxCache; /* 136 44 */
SDeFragControlBlock sRxDFCB[64]; /* 180 2048 */
/*--- cacheline 34 boundary (2176 bytes) was 52 bytes ago ---*/
unsigned int cbDFCB; /* 2228 4 */
unsigned int cbFreeDFCB; /* 2232 4 */
unsigned int uCurrentDFCBIdx; /* 2236 4 */
/*--- cacheline 35 boundary (2240 bytes) ---*/
OPTIONS sOpts; /* 2240 52 */
u32 flags; /* 2292 4 */
u32 rx_buf_sz; /* 2296 4 */
int multicast_limit; /* 2300 4 */
/*--- cacheline 36 boundary (2304 bytes) ---*/
pid_t MLMEThr_pid; /* 2304 4 */
struct completion notify; /* 2308 16 */
struct semaphore mlme_semaphore; /* 2324 16 */
u32 rx_bytes; /* 2340 4 */
unsigned char byLocalID; /* 2344 1 */
unsigned char byRFType; /* 2345 1 */
unsigned char byMaxPwrLevel; /* 2346 1 */
unsigned char byZoneType; /* 2347 1 */
bool bZoneRegExist; /* 2348 1 */
unsigned char byOriginalZonetype; /* 2349 1 */
unsigned char abyMacContext[384]; /* 2350 384 */
/*--- cacheline 42 boundary (2688 bytes) was 46 bytes ago ---*/
unsigned char abyCurrentNetAddr[6]; /* 2734 6 */
bool bLinkPass; /* 2740 1 */
/* XXX 3 bytes hole, try to pack */
SStatCounter scStatistic; /* 2744 776 */
/*--- cacheline 55 boundary (3520 bytes) ---*/
SDot11Counters s802_11Counter; /* 3520 172 */
/*--- cacheline 57 boundary (3648 bytes) was 44 bytes ago ---*/
PSMgmtObject pMgmt; /* 3692 4 */
SMgmtObject sMgmtObj; /* 3696 95840 */
/*--- cacheline 1555 boundary (99520 bytes) was 16 bytes ago ---*/
/* Bitfield combined with previous fields */
unsigned int uCurrRSSI; /* 0 4 */
unsigned char byCurrSQ; /* 0 1 */
long unsigned int dwTxAntennaSel; /* 0 4 */
long unsigned int dwRxAntennaSel; /* 0 4 */
unsigned char byAntennaCount; /* 0 1 */
unsigned char byRxAntennaMode; /* 0 1 */
unsigned char byTxAntennaMode; /* 0 1 */
bool bTxRxAntInv; /* 0 1 */
unsigned char * pbyTmpBuff; /* 0 4 */
unsigned int uSIFS; /* 0 4 */
unsigned int uDIFS; /* 0 4 */
unsigned int uEIFS; /* 0 4 */
unsigned int uSlot; /* 0 4 */
unsigned int uCwMin; /* 0 4 */
unsigned int uCwMax; /* 0 4 */
unsigned char bySIFS; /* 0 1 */
unsigned char byDIFS; /* 0 1 */
unsigned char byEIFS; /* 0 1 */
unsigned char bySlot; /* 0 1 */
unsigned char byCWMaxMin; /* 0 1 */
CARD_PHY_TYPE eCurrentPHYType; /* 0 4 */
VIA_BB_TYPE byBBType; /* 0 4 */
VIA_PKT_TYPE byPacketType; /* 0 4 */
short unsigned int wBasicRate; /* 0 2 */
unsigned char byACKRate; /* 0 1 */
unsigned char byTopOFDMBasicRate; /* 0 1 */
unsigned char byTopCCKBasicRate; /* 0 1 */
unsigned char byMinChannel; /* 0 1 */
unsigned char byMaxChannel; /* 0 1 */
unsigned int uConnectionRate; /* 0 4 */
unsigned char byPreambleType; /* 0 1 */
unsigned char byShortPreamble; /* 0 1 */
short unsigned int wCurrentRate; /* 0 2 */
short unsigned int wRTSThreshold; /* 0 2 */
short unsigned int wFragmentationThreshold; /* 0 2 */
unsigned char byShortRetryLimit; /* 0 1 */
unsigned char byLongRetryLimit; /* 0 1 */
enum nl80211_iftype op_mode; /* 0 4 */
unsigned char byOpMode; /* 0 1 */
bool bBSSIDFilter; /* 0 1 */
short unsigned int wMaxTransmitMSDULifetime; /* 0 2 */
unsigned char abyBSSID[6]; /* 0 6 */
unsigned char abyDesireBSSID[6]; /* 0 6 */
short unsigned int wACKDuration; /* 0 2 */
short unsigned int wRTSTransmitLen; /* 0 2 */
unsigned char byRTSServiceField; /* 0 1 */
unsigned char byRTSSignalField; /* 0 1 */
long unsigned int dwMaxReceiveLifetime; /* 0 4 */
bool bEncryptionEnable; /* 0 1 */
bool bLongHeader; /* 0 1 */
bool bShortSlotTime; /* 0 1 */
bool bProtectMode; /* 0 1 */
bool bNonERPPresent; /* 0 1 */
bool bBarkerPreambleMd; /* 0 1 */
unsigned char byERPFlag; /* 0 1 */
short unsigned int wUseProtectCntDown; /* 0 2 */
bool bRadioControlOff; /* 0 1 */
bool bRadioOff; /* 0 1 */
bool bEnablePSMode; /* 0 1 */
short unsigned int wListenInterval; /* 0 2 */
bool bPWBitOn; /* 0 1 */
WMAC_POWER_MODE ePSMode; /* 0 4 */
unsigned char byRadioCtl; /* 0 1 */
unsigned char byGPIO; /* 0 1 */
bool bHWRadioOff; /* 0 1 */
bool bPrvActive4RadioOFF; /* 0 1 */
bool bGPIOBlockRead; /* 0 1 */
short unsigned int wSeqCounter; /* 0 2 */
short unsigned int wBCNBufLen; /* 0 2 */
bool bBeaconBufReady; /* 0 1 */
bool bBeaconSent; /* 0 1 */
bool bIsBeaconBufReadySet; /* 0 1 */
unsigned int cbBeaconBufReadySetCnt; /* 0 4 */
bool bFixRate; /* 0 1 */
unsigned char byCurrentCh; /* 0 1 */
unsigned int uScanTime; /* 0 4 */
CMD_STATE eCommandState; /* 0 4 */
CMD_CODE eCommand; /* 0 4 */
bool bBeaconTx; /* 0 1 */
bool bStopBeacon; /* 0 1 */
bool bStopDataPkt; /* 0 1 */
bool bStopTx0Pkt; /* 0 1 */
unsigned int uAutoReConnectTime; /* 0 4 */
CMD_ITEM eCmdQueue[32]; /* 0 1408 */
unsigned int uCmdDequeueIdx; /* 0 4 */
unsigned int uCmdEnqueueIdx; /* 0 4 */
unsigned int cbFreeCmdQueue; /* 0 4 */
bool bCmdRunning; /* 0 1 */
bool bCmdClear; /* 0 1 */
bool bRoaming; /* 0 1 */
unsigned char abyIPAddr[4]; /* 0 4 */
long unsigned int ulTxPower; /* 0 4 */
NDIS_802_11_WEP_STATUS eEncryptionStatus; /* 0 4 */
bool bTransmitKey; /* 0 1 */
NDIS_802_11_WEP_STATUS eOldEncryptionStatus; /* 0 4 */
SKeyManagement sKey; /* 0 3784 */
long unsigned int dwIVCounter; /* 0 4 */
u64 qwPacketNumber; /* 0 8 */
unsigned int uCurrentWEPMode; /* 0 4 */
RC4Ext SBox; /* 0 264 */
unsigned char abyPRNG[35]; /* 0 35 */
unsigned char byKeyIndex; /* 0 1 */
unsigned int uKeyLength; /* 0 4 */
unsigned char abyKey[29]; /* 0 29 */
bool bAES; /* 0 1 */
unsigned char byCntMeasure; /* 0 1 */
unsigned int uAssocCount; /* 0 4 */
bool bMoreData; /* 0 1 */
bool bGrpAckPolicy; /* 0 1 */
bool bAssocInfoSet; /* 0 1 */
unsigned char byAutoFBCtrl; /* 0 1 */
bool bTxMICFail; /* 0 1 */
bool bRxMICFail; /* 0 1 */
unsigned int uRATEIdx; /* 0 4 */
bool bUpdateBBVGA; /* 0 1 */
unsigned int uBBVGADiffCount; /* 0 4 */
unsigned char byBBVGANew; /* 0 1 */
unsigned char byBBVGACurrent; /* 0 1 */
unsigned char abyBBVGA[4]; /* 0 4 */
long int ldBmThreshold[4]; /* 0 16 */
unsigned char byBBPreEDRSSI; /* 0 1 */
unsigned char byBBPreEDIndex; /* 0 1 */
bool bRadioCmd; /* 0 1 */
long unsigned int dwDiagRefCount; /* 0 4 */
unsigned char byFOETuning; /* 0 1 */
unsigned char byAutoPwrTunning; /* 0 1 */
short int sPSetPointCCK; /* 0 2 */
short int sPSetPointOFDMG; /* 0 2 */
short int sPSetPointOFDMA; /* 0 2 */
long int lPFormulaOffset; /* 0 4 */
short int sPThreshold; /* 0 2 */
char cAdjustStep; /* 0 1 */
char cMinTxAGC; /* 0 1 */
unsigned char byCCKPwr; /* 0 1 */
unsigned char byOFDMPwrG; /* 0 1 */
unsigned char byCurPwr; /* 0 1 */
char byCurPwrdBm; /* 0 1 */
unsigned char abyCCKPwrTbl[15]; /* 0 15 */
unsigned char abyOFDMPwrTbl[57]; /* 0 57 */
char abyCCKDefaultPwr[15]; /* 0 15 */
char abyOFDMDefaultPwr[57]; /* 0 57 */
char abyRegPwr[57]; /* 0 57 */
char abyLocalPwr[57]; /* 0 57 */
unsigned char byBBCR4d; /* 0 1 */
unsigned char byBBCRc9; /* 0 1 */
unsigned char byBBCR88; /* 0 1 */
unsigned char byBBCR09; /* 0 1 */
struct timer_list sTimerCommand; /* 0 52 */
struct timer_list sTimerTxData; /* 0 52 */
long unsigned int nTxDataTimeCout; /* 0 4 */
bool fTxDataInSleep; /* 0 1 */
bool IsTxDataTrigger; /* 0 1 */
bool fWPA_Authened; /* 0 1 */
unsigned char byReAssocCount; /* 0 1 */
unsigned char byLinkWaitCount; /* 0 1 */
unsigned char abyNodeName[17]; /* 0 17 */
bool bDiversityRegCtlON; /* 0 1 */
bool bDiversityEnable; /* 0 1 */
long unsigned int ulDiversityNValue; /* 0 4 */
long unsigned int ulDiversityMValue; /* 0 4 */
unsigned char byTMax; /* 0 1 */
unsigned char byTMax2; /* 0 1 */
unsigned char byTMax3; /* 0 1 */
long unsigned int ulSQ3TH; /* 0 4 */
long unsigned int uDiversityCnt; /* 0 4 */
unsigned char byAntennaState; /* 0 1 */
long unsigned int ulRatio_State0; /* 0 4 */
long unsigned int ulRatio_State1; /* 0 4 */
struct timer_list TimerSQ3Tmax1; /* 0 52 */
struct timer_list TimerSQ3Tmax2; /* 0 52 */
struct timer_list TimerSQ3Tmax3; /* 0 52 */
long unsigned int uNumSQ3[12]; /* 0 48 */
short unsigned int wAntDiversityMaxRate; /* 0 2 */
SEthernetHeader sTxEthHeader; /* 0 14 */
SEthernetHeader sRxEthHeader; /* 0 14 */
unsigned char abyBroadcastAddr[6]; /* 0 6 */
unsigned char abySNAP_RFC1042[6]; /* 0 6 */
unsigned char abySNAP_Bridgetunnel[6]; /* 0 6 */
unsigned char abyEEPROM[256]; /* 0 256 */
SPMKID gsPMKID; /* 0 360 */
SPMKIDCandidateEvent gsPMKIDCandidate; /* 0 72 */
bool b11hEnable; /* 0 1 */
unsigned char abyCountryCode[3]; /* 0 3 */
unsigned int uNumOfMeasureEIDs; /* 0 4 */
PWLAN_IE_MEASURE_REQ pCurrMeasureEID; /* 0 4 */
bool bMeasureInProgress; /* 0 1 */
unsigned char byOrgChannel; /* 0 1 */
unsigned char byOrgRCR; /* 0 1 */
long unsigned int dwOrgMAR0; /* 0 4 */
long unsigned int dwOrgMAR4; /* 0 4 */
unsigned char byBasicMap; /* 0 1 */
unsigned char byCCAFraction; /* 0 1 */
unsigned char abyRPIs[8]; /* 0 8 */
long unsigned int dwRPIs[8]; /* 0 32 */
bool bChannelSwitch; /* 0 1 */
unsigned char byNewChannel; /* 0 1 */
unsigned char byChannelSwitchCount; /* 0 1 */
bool bQuietEnable; /* 0 1 */
bool bEnableFirstQuiet; /* 0 1 */
unsigned char byQuietStartCount; /* 0 1 */
unsigned int uQuietEnqueue; /* 0 4 */
long unsigned int dwCurrentQuietEndTime; /* 0 4 */
SQuietControl sQuiet[8]; /* 0 96 */
bool bCountryInfo5G; /* 0 1 */
bool bCountryInfo24G; /* 0 1 */
short unsigned int wBeaconInterval; /* 0 2 */
struct net_device * wpadev; /* 0 4 */
bool bWPADEVUp; /* 0 1 */
struct sk_buff * skb; /* 0 4 */
unsigned int bwextcount; /* 0 4 */
bool bWPASuppWextEnabled; /* 0 1 */
bool bEnableHostapd; /* 0 1 */
bool bEnable8021x; /* 0 1 */
bool bEnableHostWEP; /* 0 1 */
struct net_device * apdev; /* 0 4 */
int (*tx_80211)(struct sk_buff *,
struct net_device *); /* 0 4 */
unsigned int uChannel; /* 0 4 */
bool bMACSuspend; /* 0 1 */
struct iw_statistics wstats; /* 0 32 */
bool bCommit; /* 0 1 */
/*--- cacheline 1672 boundary (107008 bytes) ---*/
/* size: 107008, cachelines: 1672, members: 279 */
/* sum members: 107005, holes: 1, sum holes: 3 */
/* padding: 41471 */
/* BRAIN FART ALERT! 107008 != 107005 + 3(holes), diff = 0 */
};
struct vnt_mic_hdr {
u8 id; /* 0 1 */
u8 tx_priority; /* 1 1 */
u8 mic_addr2[6]; /* 2 6 */
u8 ccmp_pn[6]; /* 8 6 */
__be16 payload_len; /* 14 2 */
__be16 hlen; /* 16 2 */
__le16 frame_control; /* 18 2 */
u8 addr1[6]; /* 20 6 */
u8 addr2[6]; /* 26 6 */
u8 addr3[6]; /* 32 6 */
__le16 seq_ctrl; /* 38 2 */
u8 addr4[6]; /* 40 6 */
u16 packing; /* 46 2 */
/* size: 48, cachelines: 1, members: 13 */
/* last cacheline: 48 bytes */
};
struct vnt_rts_g {
struct vnt_phy_field b; /* 0 4 */
struct vnt_phy_field a; /* 4 4 */
__le16 duration_ba; /* 8 2 */
__le16 duration_aa; /* 10 2 */
__le16 duration_bb; /* 12 2 */
u16 reserved; /* 14 2 */
struct ieee80211_rts data; /* 16 16 */
/* size: 32, cachelines: 1, members: 7 */
/* last cacheline: 32 bytes */
};
Signed-off-by: Aya Mahfouz <mahfouz.saif.elyazal@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>