Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0848e6c6 authored by Jussi Kivilinna's avatar Jussi Kivilinna Committed by John W. Linville
Browse files

rndis_wlan: move link up/down work to separate functions



Move link up/down work to separate functions and use local array
for allocating memory for info structure instead of kzmalloc.

Signed-off-by: default avatarJussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent b1d25a67
Loading
Loading
Loading
Loading
+55 −46
Original line number Diff line number Diff line
@@ -2319,27 +2319,22 @@ static const struct iw_handler_def rndis_iw_handlers = {
};


static void rndis_wlan_worker(struct work_struct *work)
static void rndis_wlan_do_link_up_work(struct usbnet *usbdev)
{
	struct rndis_wlan_private *priv =
		container_of(work, struct rndis_wlan_private, work);
	struct usbnet *usbdev = priv->usbdev;
	union iwreq_data evt;
	unsigned char bssid[ETH_ALEN];
	struct ndis_80211_assoc_info *info;
	int assoc_size = sizeof(*info) + IW_CUSTOM_MAX + 32;
	union iwreq_data evt;
	u8 assoc_buf[sizeof(*info) + IW_CUSTOM_MAX + 32];
	u8 bssid[ETH_ALEN];
	int ret, offset;

	if (test_and_clear_bit(WORK_LINK_UP, &priv->work_pending)) {
		netif_carrier_on(usbdev->net);
	memset(assoc_buf, 0, sizeof(assoc_buf));
	info = (void *)assoc_buf;

		info = kzalloc(assoc_size, GFP_KERNEL);
		if (!info)
			goto get_bssid;
	netif_carrier_on(usbdev->net);

	/* Get association info IEs from device and send them back to
	 * userspace. */
		ret = get_association_info(usbdev, info, assoc_size);
	ret = get_association_info(usbdev, info, sizeof(assoc_buf));
	if (!ret) {
		evt.data.length = le32_to_cpu(info->req_ie_length);
		if (evt.data.length > 0) {
@@ -2356,11 +2351,10 @@ static void rndis_wlan_worker(struct work_struct *work)
				IWEVASSOCRESPIE, &evt,
				(char *)info + offset);
		}
		}

		kfree(info);
		usbnet_resume_rx(usbdev);
	}

get_bssid:
	ret = get_bssid(usbdev, bssid);
	if (!ret) {
		evt.data.flags = 0;
@@ -2372,7 +2366,10 @@ static void rndis_wlan_worker(struct work_struct *work)
	usbnet_resume_rx(usbdev);
}

	if (test_and_clear_bit(WORK_LINK_DOWN, &priv->work_pending)) {
static void rndis_wlan_do_link_down_work(struct usbnet *usbdev)
{
	union iwreq_data evt;

	netif_carrier_off(usbdev->net);

	evt.data.flags = 0;
@@ -2381,6 +2378,18 @@ static void rndis_wlan_worker(struct work_struct *work)
	wireless_send_event(usbdev->net, SIOCGIWAP, &evt, NULL);
}

static void rndis_wlan_worker(struct work_struct *work)
{
	struct rndis_wlan_private *priv =
		container_of(work, struct rndis_wlan_private, work);
	struct usbnet *usbdev = priv->usbdev;

	if (test_and_clear_bit(WORK_LINK_UP, &priv->work_pending))
		rndis_wlan_do_link_up_work(usbdev);

	if (test_and_clear_bit(WORK_LINK_DOWN, &priv->work_pending))
		rndis_wlan_do_link_down_work(usbdev);

	if (test_and_clear_bit(WORK_SET_MULTICAST_LIST, &priv->work_pending))
		set_multicast_list(usbdev);
}