qcacmn: Use global variable for cpumask

Local variable is used to store cpumask to send it to
irq_set_affinity_hint and qdf_dev_set_irq_affinity APIs.
This memory is used by the kernel later outside the
current contect resulting in invalid memory access.

Fix this by using global variables to store cpumask.

Change-Id: I086f40bf1b3499d2c2ccb1ce18140b2dc2761d04
CRs-Fixed: 2373548
This commit is contained in:
Rakshith Suresh Patkar
2018-12-28 15:29:10 +05:30
committed by nshrivas
parent d2dad4b5bd
commit ee84fbeea2
4 changed files with 13 additions and 12 deletions

View File

@@ -814,7 +814,6 @@ bool hif_napi_correct_cpu(struct qca_napi_info *napi_info)
{
bool right_cpu = true;
int rc = 0;
cpumask_t cpumask;
int cpu;
struct qca_napi_data *napid;
QDF_STATUS ret;
@@ -830,12 +829,12 @@ bool hif_napi_correct_cpu(struct qca_napi_info *napi_info)
right_cpu = false;
NAPI_DEBUG("interrupt on wrong CPU, correcting");
cpumask.bits[0] = (0x01 << napi_info->cpu);
napi_info->cpumask.bits[0] = (0x01 << napi_info->cpu);
irq_modify_status(napi_info->irq, IRQ_NO_BALANCING, 0);
ret = qdf_dev_set_irq_affinity(napi_info->irq,
(struct qdf_cpu_mask *)
&cpumask);
&napi_info->cpumask);
rc = qdf_status_to_os_return(ret);
irq_modify_status(napi_info->irq, 0, IRQ_NO_BALANCING);
@@ -1472,18 +1471,19 @@ static int hncm_migrate_to(struct qca_napi_data *napid,
int didx)
{
int rc = 0;
cpumask_t cpumask;
QDF_STATUS status;
NAPI_DEBUG("-->%s(napi_cd=%d, didx=%d)", __func__, napi_ce, didx);
cpumask.bits[0] = (1 << didx);
if (!napid->napis[napi_ce])
return -EINVAL;
napid->napis[napi_ce]->cpumask.bits[0] = (1 << didx);
irq_modify_status(napid->napis[napi_ce]->irq, IRQ_NO_BALANCING, 0);
status = qdf_dev_set_irq_affinity(napid->napis[napi_ce]->irq,
(struct qdf_cpu_mask *)&cpumask);
(struct qdf_cpu_mask *)
&napid->napis[napi_ce]->cpumask);
rc = qdf_status_to_os_return(status);
/* unmark the napis bitmap in the cpu table */