From: Dmitry Shmidt Date: Wed, 3 Aug 2011 21:11:58 +0000 (-0700) Subject: net: wireless: bcmdhd: Improve arp_hostip_table processing X-Git-Tag: firefly_0821_release~7613^2~375 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=043cda23f791e3aedf16737100511656f8392412;p=firefly-linux-kernel-4.4.55.git net: wireless: bcmdhd: Improve arp_hostip_table processing Signed-off-by: Dmitry Shmidt --- diff --git a/drivers/net/wireless/bcmdhd/dhd.h b/drivers/net/wireless/bcmdhd/dhd.h index bca75354370b..ea8f67ce8b4e 100644 --- a/drivers/net/wireless/bcmdhd/dhd.h +++ b/drivers/net/wireless/bcmdhd/dhd.h @@ -682,6 +682,7 @@ extern void dhd_wait_for_event(dhd_pub_t *dhd, bool *lockvar); extern void dhd_wait_event_wakeup(dhd_pub_t*dhd); #ifdef ARP_OFFLOAD_SUPPORT +#define MAX_IPV4_ENTRIES 8 /* dhd_commn arp offload wrapers */ void dhd_aoe_hostip_clr(dhd_pub_t *dhd); void dhd_aoe_arp_clr(dhd_pub_t *dhd); diff --git a/drivers/net/wireless/bcmdhd/dhd_common.c b/drivers/net/wireless/bcmdhd/dhd_common.c index 2a68965bb91f..c50f05325f6e 100644 --- a/drivers/net/wireless/bcmdhd/dhd_common.c +++ b/drivers/net/wireless/bcmdhd/dhd_common.c @@ -1486,11 +1486,8 @@ void dhd_arp_offload_add_ip(dhd_pub_t *dhd, uint32 ipaddr) __FUNCTION__)); } - int dhd_arp_get_arp_hostip_table(dhd_pub_t *dhd, void *buf, int buflen) { -#define MAX_IPV4_ENTRIES 8 - int retcode, i; int iov_len = 0; uint32 *ptr32 = buf; @@ -1502,27 +1499,28 @@ int dhd_arp_get_arp_hostip_table(dhd_pub_t *dhd, void *buf, int buflen) iov_len = bcm_mkiovar("arp_hostip", 0, 0, buf, buflen); retcode = dhd_wl_ioctl_cmd(dhd, WLC_GET_VAR, buf, buflen, TRUE, 0); + if (retcode) { + DHD_TRACE(("%s: ioctl WLC_GET_VAR error %d\n", + __FUNCTION__, retcode)); + + return -1; + } + /* clean up the buf, ascii reminder */ for (i = 0; i < MAX_IPV4_ENTRIES; i++) { - if (!clr_bottom) { if (*ptr32 == 0) - clr_bottom = TRUE; + clr_bottom = TRUE; } else { *ptr32 = 0; } ptr32++; } - if (retcode) { - DHD_TRACE(("%s: ioctl WLC_GET_VAR error %d\n", - __FUNCTION__, retcode)); - - return -1; - } return 0; } #endif /* ARP_OFFLOAD_SUPPORT */ + int dhd_preinit_ioctls(dhd_pub_t *dhd) { diff --git a/drivers/net/wireless/bcmdhd/dhd_linux.c b/drivers/net/wireless/bcmdhd/dhd_linux.c index c345b1815d0b..5d35f78cf2a8 100644 --- a/drivers/net/wireless/bcmdhd/dhd_linux.c +++ b/drivers/net/wireless/bcmdhd/dhd_linux.c @@ -2804,20 +2804,27 @@ int dhd_change_mtu(dhd_pub_t *dhdp, int new_mtu, int ifidx) /* add or remove AOE host ip(s) (up to 8 IPs on the interface) */ void aoe_update_host_ipv4_table(dhd_pub_t *dhd_pub, u32 ipa, bool add) { - u32 ipv4_buf[8]; /* temp save for AOE host_ip table */ + u32 ipv4_buf[MAX_IPV4_ENTRIES]; /* temp save for AOE host_ip table */ int i; + int ret; bzero(ipv4_buf, sizeof(ipv4_buf)); /* display what we've got */ - dhd_arp_get_arp_hostip_table(dhd_pub, ipv4_buf, sizeof(ipv4_buf)); + ret = dhd_arp_get_arp_hostip_table(dhd_pub, ipv4_buf, sizeof(ipv4_buf)); DHD_ARPOE(("%s: hostip table read from Dongle:\n", __FUNCTION__)); - /* dhd_print_buf(ipv4_buf, 32, 4); */ /* max 8 IPs 4b each */ - +#ifdef AOE_DBG + dhd_print_buf(ipv4_buf, 32, 4); /* max 8 IPs 4b each */ +#endif /* now we saved hoste_ip table, clr it in the dongle AOE */ dhd_aoe_hostip_clr(dhd_pub); - for (i = 0; i < 8; i++) { + if (ret) { + DHD_ERROR(("%s failed\n", __FUNCTION__)); + return; + } + + for (i = 0; i < MAX_IPV4_ENTRIES; i++) { if (add && (ipv4_buf[i] == 0)) {