aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2024-12-02 12:31:39 +0000
committerPeter Maydell <peter.maydell@linaro.org>2024-12-02 12:31:39 +0000
commit412df552860f196f0dd51f5cd621ce721705caa5 (patch)
treeb7ba9041f83f03d90e2a740afa7212fe8237f073
parent72b88908d12ee9347d13539c7dd9a252625158d1 (diff)
parente6214fd6d48e704ed3aed6ea2053a9756d0ca13f (diff)
downloadqemu-412df552860f196f0dd51f5cd621ce721705caa5.zip
qemu-412df552860f196f0dd51f5cd621ce721705caa5.tar.gz
qemu-412df552860f196f0dd51f5cd621ce721705caa5.tar.bz2
Merge tag 'chr-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging
chardev patch queue # -----BEGIN PGP SIGNATURE----- # # iQJQBAABCAA6FiEEh6m9kz+HxgbSdvYt2ujhCXWWnOUFAmdNp4EcHG1hcmNhbmRy # ZS5sdXJlYXVAcmVkaGF0LmNvbQAKCRDa6OEJdZac5WsaD/92DwK0nKM7HqbqQOHN # lR715V8ve16+mWYZnWA4jQvclFUigg0Xbxl6d6adsK5QnW2nDGgjf3cXsCngUx7K # jNCmynQrpmUx7a7BRgXylEl5zN/HLeVvk2Qb4Jg8EAkRK0utK1Aerlx6CV2fzbR/ # zDslP+C7ELk9evNwWx6PZRgeOii0sL7lto67J4a5Iri2IU4yi9zI/irEIxeE4cDT # P3KFXYsgbm86VC6HaOBWw5+d5JyPr2hVHxvKMpI4YNyU/f2RHdhfqgsLS1gms2Yz # JBuh8DpIq0E+rdQp4ofH5SBPuOFxg7SgDFAyqgHerDd4uAwUafyOfAEVy2hpZmNT # 3JlavSMb2SFhWboMUu9B+gRHC+sc7YCoPZEhaIaciW3XaC/S1JJi/fvB8gcugBDs # lgTUIDEsXLMcgXaFNKbRXpuLG5eXRnzaQ4Y9Gr/3yEvY8eSZ6+x3EDwSMGfg/Ta1 # OW+h09AvWfJR5eZ13x+5CCMFRs8RgQN/D+mxYt3cZ/SdNSBci/4By54IGEgGCCM8 # xoTAqcd2kbpHg2S/MTx7O7OPNC38TbUaOWDR6u0qO0ZXqZA6OdlC+g/Z1uu7ZMqA # FkOTQZuDDgOOhpsmLy4v3nKmFBQNJAPVyfph88DE1QyrU5nVCS55lyTy/ZH2hayL # RCVbI20jrgEJoi44EFdFu6QP/Q== # =0vex # -----END PGP SIGNATURE----- # gpg: Signature made Mon 02 Dec 2024 12:26:41 GMT # gpg: using RSA key 87A9BD933F87C606D276F62DDAE8E10975969CE5 # gpg: issuer "marcandre.lureau@redhat.com" # gpg: Good signature from "Marc-André Lureau <marcandre.lureau@redhat.com>" [full] # gpg: aka "Marc-André Lureau <marcandre.lureau@gmail.com>" [full] # Primary key fingerprint: 87A9 BD93 3F87 C606 D276 F62D DAE8 E109 7596 9CE5 * tag 'chr-pull-request' of https://gitlab.com/marcandre.lureau/qemu: chardev/char-mux: make boolean bit check instead of find_next_bit() chardev/char-mux: shift unsigned long to avoid 32-bit overflow Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--chardev/char-mux.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/chardev/char-mux.c b/chardev/char-mux.c
index bda5c45..e13042d 100644
--- a/chardev/char-mux.c
+++ b/chardev/char-mux.c
@@ -316,6 +316,8 @@ bool mux_chr_attach_frontend(MuxChardev *d, CharBackend *b,
{
unsigned int bit;
+ QEMU_BUILD_BUG_ON(MAX_MUX > (sizeof(d->mux_bitset) * BITS_PER_BYTE));
+
bit = find_next_zero_bit(&d->mux_bitset, MAX_MUX, 0);
if (bit >= MAX_MUX) {
error_setg(errp,
@@ -325,7 +327,7 @@ bool mux_chr_attach_frontend(MuxChardev *d, CharBackend *b,
return false;
}
- d->mux_bitset |= (1 << bit);
+ d->mux_bitset |= (1ul << bit);
d->backends[bit] = b;
*tag = bit;
@@ -334,15 +336,12 @@ bool mux_chr_attach_frontend(MuxChardev *d, CharBackend *b,
bool mux_chr_detach_frontend(MuxChardev *d, unsigned int tag)
{
- unsigned int bit;
-
- bit = find_next_bit(&d->mux_bitset, MAX_MUX, tag);
- if (bit != tag) {
+ if (!(d->mux_bitset & (1ul << tag))) {
return false;
}
- d->mux_bitset &= ~(1 << bit);
- d->backends[bit] = NULL;
+ d->mux_bitset &= ~(1ul << tag);
+ d->backends[tag] = NULL;
return true;
}
@@ -351,7 +350,7 @@ void mux_set_focus(Chardev *chr, unsigned int focus)
{
MuxChardev *d = MUX_CHARDEV(chr);
- assert(find_next_bit(&d->mux_bitset, MAX_MUX, focus) == focus);
+ assert(d->mux_bitset & (1ul << focus));
if (d->focus != -1) {
mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_OUT);