mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
hw/i2c/pmbus_device: Fix modifying QOM class internals from instance
QOM object instance should not modify its class state (because all other objects instanciated from this class get affected). Instead of modifying the PMBusDeviceClass 'device_num_pages' field the first time a instance is initialized (in pmbus_pages_alloc), introduce a new pmbus_pages_num() helper which returns the page number from the class without modifying the class state. The code logic become slighly simplified. Inspired-by: Bernhard Beschow <shentey@gmail.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20230523064408.57941-4-philmd@linaro.org>
This commit is contained in:
parent
0773885236
commit
f0e4588fd4
1 changed files with 10 additions and 7 deletions
|
@ -190,15 +190,18 @@ static void pmbus_quick_cmd(SMBusDevice *smd, uint8_t read)
|
|||
}
|
||||
}
|
||||
|
||||
static uint8_t pmbus_pages_num(PMBusDevice *pmdev)
|
||||
{
|
||||
const PMBusDeviceClass *k = PMBUS_DEVICE_GET_CLASS(pmdev);
|
||||
|
||||
/* some PMBus devices don't use the PAGE command, so they get 1 page */
|
||||
return k->device_num_pages ? : 1;
|
||||
}
|
||||
|
||||
static void pmbus_pages_alloc(PMBusDevice *pmdev)
|
||||
{
|
||||
/* some PMBus devices don't use the PAGE command, so they get 1 page */
|
||||
PMBusDeviceClass *k = PMBUS_DEVICE_GET_CLASS(pmdev);
|
||||
if (k->device_num_pages == 0) {
|
||||
k->device_num_pages = 1;
|
||||
}
|
||||
pmdev->num_pages = k->device_num_pages;
|
||||
pmdev->pages = g_new0(PMBusPage, k->device_num_pages);
|
||||
pmdev->num_pages = pmbus_pages_num(pmdev);
|
||||
pmdev->pages = g_new0(PMBusPage, pmdev->num_pages);
|
||||
}
|
||||
|
||||
void pmbus_check_limits(PMBusDevice *pmdev)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue