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

Commit b58a1858 authored by stephen hemminger's avatar stephen hemminger Committed by David S. Miller
Browse files

netvsc: simplify get next send section



Use kernel for_each_clear_bit macro to simplify finding next
available send section.

Signed-off-by: default avatarStephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6c80f3fc
Loading
Loading
Loading
Loading
+8 −20
Original line number Diff line number Diff line
@@ -680,27 +680,15 @@ static void netvsc_send_completion(struct netvsc_device *net_device,

static u32 netvsc_get_next_send_section(struct netvsc_device *net_device)
{
	unsigned long index;
	u32 max_words = net_device->map_words;
	unsigned long *map_addr = (unsigned long *)net_device->send_section_map;
	u32 section_cnt = net_device->send_section_cnt;
	int ret_val = NETVSC_INVALID_INDEX;
	int i;
	int prev_val;

	for (i = 0; i < max_words; i++) {
		if (!~(map_addr[i]))
			continue;
		index = ffz(map_addr[i]);
		prev_val = sync_test_and_set_bit(index, &map_addr[i]);
		if (prev_val)
			continue;
		if ((index + (i * BITS_PER_LONG)) >= section_cnt)
			break;
		ret_val = (index + (i * BITS_PER_LONG));
		break;
	unsigned long *map_addr = net_device->send_section_map;
	unsigned int i;

	for_each_clear_bit(i, map_addr, net_device->map_words) {
		if (sync_test_and_set_bit(i, map_addr) == 0)
			return i;
	}
	return ret_val;

	return NETVSC_INVALID_INDEX;
}

static u32 netvsc_copy_to_send_buf(struct netvsc_device *net_device,