On 26.06.19 14:39, Sam Eiderman wrote: > Add an interface to provide direct logical CHS values for boot devices. > We will use this interface in the next commits. > > Reviewed-by: Karl Heubaum > Reviewed-by: Arbel Moshe > Signed-off-by: Sam Eiderman > --- > bootdevice.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ > include/sysemu/sysemu.h | 3 +++ > 2 files changed, 58 insertions(+) I’ve got a couple of “undelivered mail returned to sender” mails for Sam recently, but anyway... > diff --git a/bootdevice.c b/bootdevice.c > index 1d225202f9..bc5e1c2de4 100644 > --- a/bootdevice.c > +++ b/bootdevice.c > @@ -343,3 +343,58 @@ void device_add_bootindex_property(Object *obj, int32_t *bootindex, > /* initialize devices' bootindex property to -1 */ > object_property_set_int(obj, -1, name, NULL); > } > + > +typedef struct FWLCHSEntry FWLCHSEntry; > + > +struct FWLCHSEntry { > + QTAILQ_ENTRY(FWLCHSEntry) link; > + DeviceState *dev; > + char *suffix; > + uint32_t lcyls; > + uint32_t lheads; > + uint32_t lsecs; > +}; > + > +static QTAILQ_HEAD(, FWLCHSEntry) fw_lchs = > + QTAILQ_HEAD_INITIALIZER(fw_lchs); > + > +void add_boot_device_lchs(DeviceState *dev, const char *suffix, > + uint32_t lcyls, uint32_t lheads, uint32_t lsecs) > +{ > + FWLCHSEntry *node; > + > + if (!lcyls && !lheads && !lsecs) { > + return; > + } > + > + assert(dev != NULL || suffix != NULL); It doesn’t look like any caller actually passes a NULL @dev, so why not drop the @suffix part? > + node = g_malloc0(sizeof(FWLCHSEntry)); > + node->suffix = g_strdup(suffix); > + node->dev = dev; > + node->lcyls = lcyls; > + node->lheads = lheads; > + node->lsecs = lsecs; > + > + QTAILQ_INSERT_TAIL(&fw_lchs, node, link); > +} > + > +void del_boot_device_lchs(DeviceState *dev, const char *suffix) > +{ > + FWLCHSEntry *i; > + > + if (dev == NULL) { > + return; > + } > + > + QTAILQ_FOREACH(i, &fw_lchs, link) { > + if ((!suffix || !g_strcmp0(i->suffix, suffix)) && > + i->dev == dev) { (Furthermore, it’d be impossible to remove an FWLCHSEntry with .dev == NULL.) Max > + QTAILQ_REMOVE(&fw_lchs, i, link); > + g_free(i->suffix); > + g_free(i); > + > + break; > + } > + } > +}