Skip to content

Commit

Permalink
accel: introduce AccelClass.global_props
Browse files Browse the repository at this point in the history
Introduce this new field for the accelerator classes so that each
specific accelerator in the future can register its own global
properties to be used further by the system. It works just like how the
old machine compatible properties do, but only tailored for
accelerators.

Introduce register_compat_props_array() for it. Export it so that it may
be used in other codes as well in the future.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <1498536619-14548-3-git-send-email-peterx@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
  • Loading branch information
xzpeter authored and Juan Quintela committed Jun 28, 2017
1 parent 60d7cac commit 9ffea09
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 0 deletions.
6 changes: 6 additions & 0 deletions accel/accel.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,12 @@ void configure_accelerator(MachineState *ms)
}
}

void accel_register_compat_props(AccelState *accel)
{
AccelClass *class = ACCEL_GET_CLASS(accel);
register_compat_props_array(class->global_props);
}

static void register_accel_types(void)
{
type_register_static(&accel_type);
Expand Down
7 changes: 7 additions & 0 deletions hw/core/qdev-properties.c
Original file line number Diff line number Diff line change
Expand Up @@ -1098,6 +1098,13 @@ void register_compat_prop(const char *driver,
qdev_prop_register_global(p);
}

void register_compat_props_array(GlobalProperty *prop)
{
for (; prop && prop->driver; prop++) {
register_compat_prop(prop->driver, prop->property, prop->value);
}
}

void qdev_prop_register_global_list(GlobalProperty *props)
{
int i;
Expand Down
6 changes: 6 additions & 0 deletions include/hw/qdev-properties.h
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,12 @@ void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
*/
void register_compat_prop(const char *driver, const char *property,
const char *value);
/*
* register_compat_props_array(): using register_compat_prop(), which
* only registers internal global properties (which has lower priority
* than user-provided global properties)
*/
void register_compat_props_array(GlobalProperty *prop);

/**
* qdev_property_add_static:
Expand Down
11 changes: 11 additions & 0 deletions include/sysemu/accel.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#define HW_ACCEL_H

#include "qom/object.h"
#include "hw/qdev-properties.h"

typedef struct AccelState {
/*< private >*/
Expand All @@ -40,6 +41,14 @@ typedef struct AccelClass {
int (*available)(void);
int (*init_machine)(MachineState *ms);
bool *allowed;
/*
* Array of global properties that would be applied when specific
* accelerator is chosen. It works like MachineClass.compat_props
* but it's for accelerators not machines. Accelerator-provided
* global properties may be overridden by machine-type
* compat_props or user-provided global properties.
*/
GlobalProperty *global_props;
} AccelClass;

#define TYPE_ACCEL "accel"
Expand All @@ -57,5 +66,7 @@ typedef struct AccelClass {
extern int tcg_tb_size;

void configure_accelerator(MachineState *ms);
/* Register accelerator specific global properties */
void accel_register_compat_props(AccelState *accel);

#endif
1 change: 1 addition & 0 deletions vl.c
Original file line number Diff line number Diff line change
Expand Up @@ -4571,6 +4571,7 @@ int main(int argc, char **argv, char **envp)
exit (i == 1 ? 1 : 0);
}

accel_register_compat_props(current_machine->accelerator);
machine_register_compat_props(current_machine);

qemu_opts_foreach(qemu_find_opts("global"),
Expand Down

0 comments on commit 9ffea09

Please sign in to comment.