[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 28/32] smbus: Fix spd_data_generate() for number of banks > 2
From: |
Markus Armbruster |
Subject: |
[PULL 28/32] smbus: Fix spd_data_generate() for number of banks > 2 |
Date: |
Wed, 29 Apr 2020 09:20:44 +0200 |
spd_data_generate() splits @ram_size bytes into @nbanks RAM banks of
1 << sz_log2 MiB each, like this:
size = ram_size >> 20; /* work in terms of megabytes */
[...]
nbanks = 1;
while (sz_log2 > max_log2 && nbanks < 8) {
sz_log2--;
nbanks++;
}
Each iteration halves the size of a bank, and increments the number of
banks. Wrong: it should double the number of banks.
The bug goes back all the way to commit b296b664ab "smbus: Add a
helper to generate SPD EEPROM data".
It can't bite because spd_data_generate()'s current users pass only
@ram_size that result in *zero* iterations:
machine RAM size #banks type bank size
fulong2e 256 MiB 1 DDR 256 MiB
sam460ex 2048 MiB 1 DDR2 2048 MiB
1024 MiB 1 DDR2 1024 MiB
512 MiB 1 DDR2 512 MiB
256 MiB 1 DDR2 256 MiB
128 MiB 1 SDR 128 MiB
64 MiB 1 SDR 64 MiB
32 MiB 1 SDR 32 MiB
Apply the obvious, minimal fix. I admit I'm tempted to rip out the
unused (and obviously untested) feature instead, because YAGNI.
Note that this is not the final result, as spd_data_generate() next
increases #banks from 1 to 2 if possible. This is done "to avoid a
bug in MIPS Malta firmware". We don't even use this function with
machine type malta. *Shrug*
Signed-off-by: Markus Armbruster <address@hidden>
Message-Id: <address@hidden>
---
hw/i2c/smbus_eeprom.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c
index 07fbbf87f1..e199fc8678 100644
--- a/hw/i2c/smbus_eeprom.c
+++ b/hw/i2c/smbus_eeprom.c
@@ -229,7 +229,7 @@ uint8_t *spd_data_generate(enum sdram_type type, ram_addr_t
ram_size)
nbanks = 1;
while (sz_log2 > max_log2 && nbanks < 8) {
sz_log2--;
- nbanks++;
+ nbanks *= 2;
}
assert(size == (1ULL << sz_log2) * nbanks);
--
2.21.1
- [PULL 20/32] io: Fix qio_channel_socket_close() error handling, (continued)
- [PULL 20/32] io: Fix qio_channel_socket_close() error handling, Markus Armbruster, 2020/04/29
- [PULL 31/32] libqos: Give get_machine_allocator() internal linkage, Markus Armbruster, 2020/04/29
- [PULL 07/32] qemu-option: Avoid has_help_option() in qemu_opts_parse_noisily(), Markus Armbruster, 2020/04/29
- [PULL 19/32] xen/pt: Fix flawed conversion to realize(), Markus Armbruster, 2020/04/29
- [PULL 32/32] qemu-option: pass NULL rather than 0 to the id of qemu_opts_set(), Markus Armbruster, 2020/04/29
- [PULL 08/32] qemu-img: Factor out accumulate_options() helper, Markus Armbruster, 2020/04/29
- [PULL 24/32] qga: Fix qmp_guest_suspend_{disk, ram}() error handling, Markus Armbruster, 2020/04/29
- [PULL 25/32] sam460ex: Suppress useless warning on -m 32 and -m 64, Markus Armbruster, 2020/04/29
- [PULL 27/32] bamboo, sam460ex: Tidy up error message for unsupported RAM size, Markus Armbruster, 2020/04/29
- [PULL 16/32] fdc: Fix fallback=auto error handling, Markus Armbruster, 2020/04/29
- [PULL 28/32] smbus: Fix spd_data_generate() for number of banks > 2,
Markus Armbruster <=
- [PULL 11/32] cryptodev: Fix cryptodev_builtin_cleanup() error API violation, Markus Armbruster, 2020/04/29
- [PULL 01/32] various: Remove suspicious '\' character outside of #define in C code, Markus Armbruster, 2020/04/29
- [PULL 26/32] smbus: Fix spd_data_generate() error API violation, Markus Armbruster, 2020/04/29
- [PULL 17/32] bochs-display: Fix vgamem=SIZE error handling, Markus Armbruster, 2020/04/29
- [PULL 23/32] qga: Fix qmp_guest_get_memory_blocks() error handling, Markus Armbruster, 2020/04/29
- [PULL 30/32] fuzz: Simplify how we compute available machines and types, Markus Armbruster, 2020/04/29
- [PULL 15/32] arm/virt: Fix virt_machine_device_plug_cb() error API violation, Markus Armbruster, 2020/04/29
- [PULL 29/32] Makefile: Drop unused, broken target recurse-fuzz, Markus Armbruster, 2020/04/29
- [PULL 21/32] migration/colo: Fix qmp_xen_colo_do_checkpoint() error handling, Markus Armbruster, 2020/04/29
- [PULL 13/32] cpus: Fix configure_icount() error API violation, Markus Armbruster, 2020/04/29