mirror of https://github.com/xemu-project/xemu.git
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1 iQEcBAABAgAGBQJhhKgIAAoJEO8Ells5jWIRi9QH/iMggQEHjoFXTU65+t0SRKkT OXLz164baNO+AFVjJo0I20Ee5uvVCUnOt1VX4PmJDF2WYsRSQcmMgTI+GBXtqm7B SjAit4FLWjGIrAsV+Lm/pbBzMjtO2p4Y1wpLqO5Rc7aMxdEgyA70tWd7AOIlyE7e w/YnDs6BF10KNLvI3BH+0Assl+W6ht7PyykIcNU680WqyV28E0M1kbnN9vR+7w8E BNHxqCaeV41PwoB641XAl0AQTbqZaVH0paiyVwUij8YOqJHqwQbXrN9SQwct0gsg PIAxiX1p9WNxjLwKv+icUWZLuZ+nZ6wCVYwGD4nd5B7zSNagO7Mdv5CORAMaygs= =4PLP -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/jasonwang/tags/net-pull-request' into staging # gpg: Signature made Thu 04 Nov 2021 11:42:00 PM EDT # gpg: using RSA key EF04965B398D6211 # gpg: Good signature from "Jason Wang (Jason Wang on RedHat) <jasowang@redhat.com>" [marginal] # gpg: WARNING: This key is not certified with sufficiently trusted signatures! # gpg: It is not certain that the signature belongs to the owner. # Primary key fingerprint: 215D 46F4 8246 689E C77F 3562 EF04 965B 398D 6211 * remotes/jasonwang/tags/net-pull-request: Fix virtio-net-pci* "vectors" compat e1000: fix tx re-entrancy problem Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
e4d96a7eb8
|
@ -56,7 +56,7 @@ GlobalProperty hw_compat_5_2[] = {
|
||||||
{ "ICH9-LPC", "smm-compat", "on"},
|
{ "ICH9-LPC", "smm-compat", "on"},
|
||||||
{ "PIIX4_PM", "smm-compat", "on"},
|
{ "PIIX4_PM", "smm-compat", "on"},
|
||||||
{ "virtio-blk-device", "report-discard-granularity", "off" },
|
{ "virtio-blk-device", "report-discard-granularity", "off" },
|
||||||
{ "virtio-net-pci", "vectors", "3"},
|
{ "virtio-net-pci-base", "vectors", "3"},
|
||||||
};
|
};
|
||||||
const size_t hw_compat_5_2_len = G_N_ELEMENTS(hw_compat_5_2);
|
const size_t hw_compat_5_2_len = G_N_ELEMENTS(hw_compat_5_2);
|
||||||
|
|
||||||
|
|
|
@ -107,6 +107,7 @@ struct E1000State_st {
|
||||||
e1000x_txd_props props;
|
e1000x_txd_props props;
|
||||||
e1000x_txd_props tso_props;
|
e1000x_txd_props tso_props;
|
||||||
uint16_t tso_frames;
|
uint16_t tso_frames;
|
||||||
|
bool busy;
|
||||||
} tx;
|
} tx;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
@ -763,6 +764,11 @@ start_xmit(E1000State *s)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (s->tx.busy) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
s->tx.busy = true;
|
||||||
|
|
||||||
while (s->mac_reg[TDH] != s->mac_reg[TDT]) {
|
while (s->mac_reg[TDH] != s->mac_reg[TDT]) {
|
||||||
base = tx_desc_base(s) +
|
base = tx_desc_base(s) +
|
||||||
sizeof(struct e1000_tx_desc) * s->mac_reg[TDH];
|
sizeof(struct e1000_tx_desc) * s->mac_reg[TDH];
|
||||||
|
@ -789,6 +795,7 @@ start_xmit(E1000State *s)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
s->tx.busy = false;
|
||||||
set_ics(s, 0, cause);
|
set_ics(s, 0, cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue