| From 66b41b94504973225fbcfdd35c040d090512af94 Mon Sep 17 00:00:00 2001 |
| From: Aditya Shankar <aditya.shankar@microchip.com> |
| Date: Fri, 7 Apr 2017 17:24:58 +0530 |
| Subject: staging: wilc1000: Fix problem with wrong vif index |
| |
| [ Upstream commit 0e490657c7214cce33fbca3d88227298c5c968ae ] |
| |
| The vif->idx value is always 0 for two interfaces. |
| |
| wl->vif_num = 0; |
| |
| loop { |
| ... |
| |
| vif->idx = wl->vif_num; |
| ... |
| wl->vif_num = i; |
| .... |
| i++; |
| ... |
| } |
| |
| At present, vif->idx is assigned the value of wl->vif_num |
| at the beginning of this block and device is initialized |
| based on this index value. |
| In the next iteration, wl->vif_num is still 0 as it is only updated |
| later but gets assigned to vif->idx in the beginning. This causes problems |
| later when we try to reference a particular interface and also while |
| configuring the firmware. |
| |
| This patch moves the assignment to vif->idx from the beginning |
| of the block to after wl->vif_num is updated with latest value of i. |
| |
| Fixes: commit 735bb39ca3be ("staging: wilc1000: simplify vif[i]->ndev accesses") |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Aditya Shankar <aditya.shankar@microchip.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/staging/wilc1000/linux_wlan.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c |
| index 07d6e4824a9d..2e5e3b368532 100644 |
| --- a/drivers/staging/wilc1000/linux_wlan.c |
| +++ b/drivers/staging/wilc1000/linux_wlan.c |
| @@ -1260,11 +1260,12 @@ int wilc_netdev_init(struct wilc **wilc, struct device *dev, int io_type, |
| else |
| strcpy(ndev->name, "p2p%d"); |
| |
| - vif->idx = wl->vif_num; |
| vif->wilc = *wilc; |
| vif->ndev = ndev; |
| wl->vif[i] = vif; |
| wl->vif_num = i; |
| + vif->idx = wl->vif_num; |
| + |
| ndev->netdev_ops = &wilc_netdev_ops; |
| |
| { |
| -- |
| 2.17.1 |
| |