Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Feb 2016 08:43:00 +0000
From:      "sepherosa_gmail.com (Sepherosa Ziehau)" <phabric-noreply@FreeBSD.org>
To:        freebsd-net@freebsd.org
Subject:   [Differential] [Request, 31 lines] D5159: hyperv/hn: Recover half of the chimney sending space
Message-ID:  <differential-rev-PHID-DREV-ilfipff27tzltswcpxdp-req@FreeBSD.org>

next in thread | raw e-mail | index | archive | help

--b1_297ff6342ca4903e34619b9cb3aa961e
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

sepherosa_gmail.com created this revision.
sepherosa_gmail.com added reviewers: network, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com.
sepherosa_gmail.com added a subscriber: freebsd-net-list.

REVISION SUMMARY
  Due to the miss use of ffs, where ffsl should be used.  And use system atomic operation instead.
  
  While I'm here, strigent chimney sending index assertion.

REVISION DETAIL
  https://reviews.freebsd.org/D5159

AFFECTED FILES
  sys/dev/hyperv/netvsc/hv_net_vsc.c

CHANGE DETAILS
  diff --git a/sys/dev/hyperv/netvsc/hv_net_vsc.c b/sys/dev/hyperv/netvsc/hv_net_vsc.c
  --- a/sys/dev/hyperv/netvsc/hv_net_vsc.c
  +++ b/sys/dev/hyperv/netvsc/hv_net_vsc.c
  @@ -136,15 +136,15 @@
   	int i;
   
   	for (i = 0; i < bitsmap_words; i++) {
  -		idx = ffs(~bitsmap[i]);
  +		idx = ffsl(~bitsmap[i]);
   		if (0 == idx)
   			continue;
   
   		idx--;
  -		if (i * BITS_PER_LONG + idx >= net_dev->send_section_count)
  -			return (ret);
  +		KASSERT(i * BITS_PER_LONG + idx < net_dev->send_section_count,
  +		    ("invalid i %d and idx %lu", i, idx));
   
  -		if (synch_test_and_set_bit(idx, &bitsmap[i]))
  +		if (atomic_testandset_long(&bitsmap[i], idx))
   			continue;
   
   		ret = i * BITS_PER_LONG + idx;
  @@ -789,8 +789,27 @@
   		if (NULL != net_vsc_pkt) {
   			if (net_vsc_pkt->send_buf_section_idx !=
   			    NVSP_1_CHIMNEY_SEND_INVALID_SECTION_INDEX) {
  -				synch_change_bit(net_vsc_pkt->send_buf_section_idx,
  -				    net_dev->send_section_bitsmap);
  +				u_long mask;
  +				int idx;
  +
  +				idx = net_vsc_pkt->send_buf_section_idx /
  +				    BITS_PER_LONG;
  +				KASSERT(idx < net_dev->bitsmap_words,
  +				    ("invalid section index %u",
  +				     net_vsc_pkt->send_buf_section_idx));
  +				mask = 1UL <<
  +				    (net_vsc_pkt->send_buf_section_idx %
  +				     BITS_PER_LONG);
  +
  +				KASSERT(net_dev->send_section_bitsmap[idx] &
  +				    mask,
  +				    ("index bitmap 0x%lx, section index %u, "
  +				     "bitmap idx %d, bitmask 0x%lx",
  +				     net_dev->send_section_bitsmap[idx],
  +				     net_vsc_pkt->send_buf_section_idx,
  +				     idx, mask));
  +				atomic_clear_long(
  +				    &net_dev->send_section_bitsmap[idx], mask);
   			}
   			
   			/* Notify the layer above us */

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: sepherosa_gmail.com, network, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com
Cc: freebsd-net-list

--b1_297ff6342ca4903e34619b9cb3aa961e
Content-Type: text/x-patch; charset=utf-8; name="D5159.12926.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D5159.12926.patch"

ZGlmZiAtLWdpdCBhL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9odl9uZXRfdnNjLmMgYi9zeXMvZGV2
L2h5cGVydi9uZXR2c2MvaHZfbmV0X3ZzYy5jCi0tLSBhL3N5cy9kZXYvaHlwZXJ2L25ldHZzYy9o
dl9uZXRfdnNjLmMKKysrIGIvc3lzL2Rldi9oeXBlcnYvbmV0dnNjL2h2X25ldF92c2MuYwpAQCAt
MTM2LDE1ICsxMzYsMTUgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBiaXRzbWFwX3dv
cmRzOyBpKyspIHsKLQkJaWR4ID0gZmZzKH5iaXRzbWFwW2ldKTsKKwkJaWR4ID0gZmZzbCh+Yml0
c21hcFtpXSk7CiAJCWlmICgwID09IGlkeCkKIAkJCWNvbnRpbnVlOwogCiAJCWlkeC0tOwotCQlp
ZiAoaSAqIEJJVFNfUEVSX0xPTkcgKyBpZHggPj0gbmV0X2Rldi0+c2VuZF9zZWN0aW9uX2NvdW50
KQotCQkJcmV0dXJuIChyZXQpOworCQlLQVNTRVJUKGkgKiBCSVRTX1BFUl9MT05HICsgaWR4IDwg
bmV0X2Rldi0+c2VuZF9zZWN0aW9uX2NvdW50LAorCQkgICAgKCJpbnZhbGlkIGkgJWQgYW5kIGlk
eCAlbHUiLCBpLCBpZHgpKTsKIAotCQlpZiAoc3luY2hfdGVzdF9hbmRfc2V0X2JpdChpZHgsICZi
aXRzbWFwW2ldKSkKKwkJaWYgKGF0b21pY190ZXN0YW5kc2V0X2xvbmcoJmJpdHNtYXBbaV0sIGlk
eCkpCiAJCQljb250aW51ZTsKIAogCQlyZXQgPSBpICogQklUU19QRVJfTE9ORyArIGlkeDsKQEAg
LTc4OSw4ICs3ODksMjcgQEAKIAkJaWYgKE5VTEwgIT0gbmV0X3ZzY19wa3QpIHsKIAkJCWlmIChu
ZXRfdnNjX3BrdC0+c2VuZF9idWZfc2VjdGlvbl9pZHggIT0KIAkJCSAgICBOVlNQXzFfQ0hJTU5F
WV9TRU5EX0lOVkFMSURfU0VDVElPTl9JTkRFWCkgewotCQkJCXN5bmNoX2NoYW5nZV9iaXQobmV0
X3ZzY19wa3QtPnNlbmRfYnVmX3NlY3Rpb25faWR4LAotCQkJCSAgICBuZXRfZGV2LT5zZW5kX3Nl
Y3Rpb25fYml0c21hcCk7CisJCQkJdV9sb25nIG1hc2s7CisJCQkJaW50IGlkeDsKKworCQkJCWlk
eCA9IG5ldF92c2NfcGt0LT5zZW5kX2J1Zl9zZWN0aW9uX2lkeCAvCisJCQkJICAgIEJJVFNfUEVS
X0xPTkc7CisJCQkJS0FTU0VSVChpZHggPCBuZXRfZGV2LT5iaXRzbWFwX3dvcmRzLAorCQkJCSAg
ICAoImludmFsaWQgc2VjdGlvbiBpbmRleCAldSIsCisJCQkJICAgICBuZXRfdnNjX3BrdC0+c2Vu
ZF9idWZfc2VjdGlvbl9pZHgpKTsKKwkJCQltYXNrID0gMVVMIDw8CisJCQkJICAgIChuZXRfdnNj
X3BrdC0+c2VuZF9idWZfc2VjdGlvbl9pZHggJQorCQkJCSAgICAgQklUU19QRVJfTE9ORyk7CisK
KwkJCQlLQVNTRVJUKG5ldF9kZXYtPnNlbmRfc2VjdGlvbl9iaXRzbWFwW2lkeF0gJgorCQkJCSAg
ICBtYXNrLAorCQkJCSAgICAoImluZGV4IGJpdG1hcCAweCVseCwgc2VjdGlvbiBpbmRleCAldSwg
IgorCQkJCSAgICAgImJpdG1hcCBpZHggJWQsIGJpdG1hc2sgMHglbHgiLAorCQkJCSAgICAgbmV0
X2Rldi0+c2VuZF9zZWN0aW9uX2JpdHNtYXBbaWR4XSwKKwkJCQkgICAgIG5ldF92c2NfcGt0LT5z
ZW5kX2J1Zl9zZWN0aW9uX2lkeCwKKwkJCQkgICAgIGlkeCwgbWFzaykpOworCQkJCWF0b21pY19j
bGVhcl9sb25nKAorCQkJCSAgICAmbmV0X2Rldi0+c2VuZF9zZWN0aW9uX2JpdHNtYXBbaWR4XSwg
bWFzayk7CiAJCQl9CiAJCQkKIAkJCS8qIE5vdGlmeSB0aGUgbGF5ZXIgYWJvdmUgdXMgKi8KCg==


--b1_297ff6342ca4903e34619b9cb3aa961e--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?differential-rev-PHID-DREV-ilfipff27tzltswcpxdp-req>