mirror of https://gitlab.com/qemu-project/qemu
spapr_drc: convert to trace framework instead of DPRINTF
Signed-off-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
f366e729f9
commit
24ac7755d7
|
@ -20,20 +20,7 @@
|
||||||
#include "qapi/visitor.h"
|
#include "qapi/visitor.h"
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "hw/ppc/spapr.h" /* for RTAS return codes */
|
#include "hw/ppc/spapr.h" /* for RTAS return codes */
|
||||||
|
#include "trace.h"
|
||||||
/* #define DEBUG_SPAPR_DRC */
|
|
||||||
|
|
||||||
#ifdef DEBUG_SPAPR_DRC
|
|
||||||
#define DPRINTF(fmt, ...) \
|
|
||||||
do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
|
|
||||||
#define DPRINTFN(fmt, ...) \
|
|
||||||
do { DPRINTF(fmt, ## __VA_ARGS__); fprintf(stderr, "\n"); } while (0)
|
|
||||||
#else
|
|
||||||
#define DPRINTF(fmt, ...) \
|
|
||||||
do { } while (0)
|
|
||||||
#define DPRINTFN(fmt, ...) \
|
|
||||||
do { } while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define DRC_CONTAINER_PATH "/dr-connector"
|
#define DRC_CONTAINER_PATH "/dr-connector"
|
||||||
#define DRC_INDEX_TYPE_SHIFT 28
|
#define DRC_INDEX_TYPE_SHIFT 28
|
||||||
|
@ -69,7 +56,7 @@ static uint32_t set_isolation_state(sPAPRDRConnector *drc,
|
||||||
{
|
{
|
||||||
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
|
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
|
||||||
|
|
||||||
DPRINTFN("drc: %x, set_isolation_state: %x", get_index(drc), state);
|
trace_spapr_drc_set_isolation_state(get_index(drc), state);
|
||||||
|
|
||||||
if (state == SPAPR_DR_ISOLATION_STATE_UNISOLATED) {
|
if (state == SPAPR_DR_ISOLATION_STATE_UNISOLATED) {
|
||||||
/* cannot unisolate a non-existant resource, and, or resources
|
/* cannot unisolate a non-existant resource, and, or resources
|
||||||
|
@ -94,11 +81,11 @@ static uint32_t set_isolation_state(sPAPRDRConnector *drc,
|
||||||
*/
|
*/
|
||||||
if (drc->awaiting_release) {
|
if (drc->awaiting_release) {
|
||||||
if (drc->configured) {
|
if (drc->configured) {
|
||||||
DPRINTFN("finalizing device removal");
|
trace_spapr_drc_set_isolation_state_finalizing(get_index(drc));
|
||||||
drck->detach(drc, DEVICE(drc->dev), drc->detach_cb,
|
drck->detach(drc, DEVICE(drc->dev), drc->detach_cb,
|
||||||
drc->detach_cb_opaque, NULL);
|
drc->detach_cb_opaque, NULL);
|
||||||
} else {
|
} else {
|
||||||
DPRINTFN("deferring device removal on unconfigured device\n");
|
trace_spapr_drc_set_isolation_state_deferring(get_index(drc));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
drc->configured = false;
|
drc->configured = false;
|
||||||
|
@ -110,7 +97,7 @@ static uint32_t set_isolation_state(sPAPRDRConnector *drc,
|
||||||
static uint32_t set_indicator_state(sPAPRDRConnector *drc,
|
static uint32_t set_indicator_state(sPAPRDRConnector *drc,
|
||||||
sPAPRDRIndicatorState state)
|
sPAPRDRIndicatorState state)
|
||||||
{
|
{
|
||||||
DPRINTFN("drc: %x, set_indicator_state: %x", get_index(drc), state);
|
trace_spapr_drc_set_indicator_state(get_index(drc), state);
|
||||||
drc->indicator_state = state;
|
drc->indicator_state = state;
|
||||||
return RTAS_OUT_SUCCESS;
|
return RTAS_OUT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -120,7 +107,7 @@ static uint32_t set_allocation_state(sPAPRDRConnector *drc,
|
||||||
{
|
{
|
||||||
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
|
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
|
||||||
|
|
||||||
DPRINTFN("drc: %x, set_allocation_state: %x", get_index(drc), state);
|
trace_spapr_drc_set_allocation_state(get_index(drc), state);
|
||||||
|
|
||||||
if (state == SPAPR_DR_ALLOCATION_STATE_USABLE) {
|
if (state == SPAPR_DR_ALLOCATION_STATE_USABLE) {
|
||||||
/* if there's no resource/device associated with the DRC, there's
|
/* if there's no resource/device associated with the DRC, there's
|
||||||
|
@ -137,7 +124,7 @@ static uint32_t set_allocation_state(sPAPRDRConnector *drc,
|
||||||
drc->allocation_state = state;
|
drc->allocation_state = state;
|
||||||
if (drc->awaiting_release &&
|
if (drc->awaiting_release &&
|
||||||
drc->allocation_state == SPAPR_DR_ALLOCATION_STATE_UNUSABLE) {
|
drc->allocation_state == SPAPR_DR_ALLOCATION_STATE_UNUSABLE) {
|
||||||
DPRINTFN("finalizing device removal");
|
trace_spapr_drc_set_allocation_state_finalizing(get_index(drc));
|
||||||
drck->detach(drc, DEVICE(drc->dev), drc->detach_cb,
|
drck->detach(drc, DEVICE(drc->dev), drc->detach_cb,
|
||||||
drc->detach_cb_opaque, NULL);
|
drc->detach_cb_opaque, NULL);
|
||||||
} else if (drc->allocation_state == SPAPR_DR_ALLOCATION_STATE_USABLE) {
|
} else if (drc->allocation_state == SPAPR_DR_ALLOCATION_STATE_USABLE) {
|
||||||
|
@ -167,12 +154,11 @@ static const void *get_fdt(sPAPRDRConnector *drc, int *fdt_start_offset)
|
||||||
|
|
||||||
static void set_configured(sPAPRDRConnector *drc)
|
static void set_configured(sPAPRDRConnector *drc)
|
||||||
{
|
{
|
||||||
DPRINTFN("drc: %x, set_configured", get_index(drc));
|
trace_spapr_drc_set_configured(get_index(drc));
|
||||||
|
|
||||||
if (drc->isolation_state != SPAPR_DR_ISOLATION_STATE_UNISOLATED) {
|
if (drc->isolation_state != SPAPR_DR_ISOLATION_STATE_UNISOLATED) {
|
||||||
/* guest should be not configuring an isolated device */
|
/* guest should be not configuring an isolated device */
|
||||||
DPRINTFN("drc: %x, set_configured: skipping isolated device",
|
trace_spapr_drc_set_configured_skipping(get_index(drc));
|
||||||
get_index(drc));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
drc->configured = true;
|
drc->configured = true;
|
||||||
|
@ -222,7 +208,7 @@ static uint32_t entity_sense(sPAPRDRConnector *drc, sPAPRDREntitySense *state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINTFN("drc: %x, entity_sense: %x", get_index(drc), state);
|
trace_spapr_drc_entity_sense(get_index(drc), *state);
|
||||||
return RTAS_OUT_SUCCESS;
|
return RTAS_OUT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -336,7 +322,7 @@ static void prop_get_fdt(Object *obj, Visitor *v, const char *name,
|
||||||
static void attach(sPAPRDRConnector *drc, DeviceState *d, void *fdt,
|
static void attach(sPAPRDRConnector *drc, DeviceState *d, void *fdt,
|
||||||
int fdt_start_offset, bool coldplug, Error **errp)
|
int fdt_start_offset, bool coldplug, Error **errp)
|
||||||
{
|
{
|
||||||
DPRINTFN("drc: %x, attach", get_index(drc));
|
trace_spapr_drc_attach(get_index(drc));
|
||||||
|
|
||||||
if (drc->isolation_state != SPAPR_DR_ISOLATION_STATE_ISOLATED) {
|
if (drc->isolation_state != SPAPR_DR_ISOLATION_STATE_ISOLATED) {
|
||||||
error_setg(errp, "an attached device is still awaiting release");
|
error_setg(errp, "an attached device is still awaiting release");
|
||||||
|
@ -389,7 +375,7 @@ static void detach(sPAPRDRConnector *drc, DeviceState *d,
|
||||||
spapr_drc_detach_cb *detach_cb,
|
spapr_drc_detach_cb *detach_cb,
|
||||||
void *detach_cb_opaque, Error **errp)
|
void *detach_cb_opaque, Error **errp)
|
||||||
{
|
{
|
||||||
DPRINTFN("drc: %x, detach", get_index(drc));
|
trace_spapr_drc_detach(get_index(drc));
|
||||||
|
|
||||||
drc->detach_cb = detach_cb;
|
drc->detach_cb = detach_cb;
|
||||||
drc->detach_cb_opaque = detach_cb_opaque;
|
drc->detach_cb_opaque = detach_cb_opaque;
|
||||||
|
@ -415,21 +401,21 @@ static void detach(sPAPRDRConnector *drc, DeviceState *d,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (drc->isolation_state != SPAPR_DR_ISOLATION_STATE_ISOLATED) {
|
if (drc->isolation_state != SPAPR_DR_ISOLATION_STATE_ISOLATED) {
|
||||||
DPRINTFN("awaiting transition to isolated state before removal");
|
trace_spapr_drc_awaiting_isolated(get_index(drc));
|
||||||
drc->awaiting_release = true;
|
drc->awaiting_release = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (drc->type != SPAPR_DR_CONNECTOR_TYPE_PCI &&
|
if (drc->type != SPAPR_DR_CONNECTOR_TYPE_PCI &&
|
||||||
drc->allocation_state != SPAPR_DR_ALLOCATION_STATE_UNUSABLE) {
|
drc->allocation_state != SPAPR_DR_ALLOCATION_STATE_UNUSABLE) {
|
||||||
DPRINTFN("awaiting transition to unusable state before removal");
|
trace_spapr_drc_awaiting_unusable(get_index(drc));
|
||||||
drc->awaiting_release = true;
|
drc->awaiting_release = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (drc->awaiting_allocation) {
|
if (drc->awaiting_allocation) {
|
||||||
drc->awaiting_release = true;
|
drc->awaiting_release = true;
|
||||||
DPRINTFN("awaiting allocation to complete before removal");
|
trace_spapr_drc_awaiting_allocation(get_index(drc));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,7 +446,7 @@ static void reset(DeviceState *d)
|
||||||
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
|
sPAPRDRConnectorClass *drck = SPAPR_DR_CONNECTOR_GET_CLASS(drc);
|
||||||
sPAPRDREntitySense state;
|
sPAPRDREntitySense state;
|
||||||
|
|
||||||
DPRINTFN("drc reset: %x", drck->get_index(drc));
|
trace_spapr_drc_reset(drck->get_index(drc));
|
||||||
/* immediately upon reset we can safely assume DRCs whose devices
|
/* immediately upon reset we can safely assume DRCs whose devices
|
||||||
* are pending removal can be safely removed, and that they will
|
* are pending removal can be safely removed, and that they will
|
||||||
* subsequently be left in an ISOLATED state. move the DRC to this
|
* subsequently be left in an ISOLATED state. move the DRC to this
|
||||||
|
@ -502,7 +488,7 @@ static void realize(DeviceState *d, Error **errp)
|
||||||
gchar *child_name;
|
gchar *child_name;
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
|
||||||
DPRINTFN("drc realize: %x", drck->get_index(drc));
|
trace_spapr_drc_realize(drck->get_index(drc));
|
||||||
/* NOTE: we do this as part of realize/unrealize due to the fact
|
/* NOTE: we do this as part of realize/unrealize due to the fact
|
||||||
* that the guest will communicate with the DRC via RTAS calls
|
* that the guest will communicate with the DRC via RTAS calls
|
||||||
* referencing the global DRC index. By unlinking the DRC
|
* referencing the global DRC index. By unlinking the DRC
|
||||||
|
@ -513,7 +499,7 @@ static void realize(DeviceState *d, Error **errp)
|
||||||
root_container = container_get(object_get_root(), DRC_CONTAINER_PATH);
|
root_container = container_get(object_get_root(), DRC_CONTAINER_PATH);
|
||||||
snprintf(link_name, sizeof(link_name), "%x", drck->get_index(drc));
|
snprintf(link_name, sizeof(link_name), "%x", drck->get_index(drc));
|
||||||
child_name = object_get_canonical_path_component(OBJECT(drc));
|
child_name = object_get_canonical_path_component(OBJECT(drc));
|
||||||
DPRINTFN("drc child name: %s", child_name);
|
trace_spapr_drc_realize_child(drck->get_index(drc), child_name);
|
||||||
object_property_add_alias(root_container, link_name,
|
object_property_add_alias(root_container, link_name,
|
||||||
drc->owner, child_name, &err);
|
drc->owner, child_name, &err);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -521,7 +507,7 @@ static void realize(DeviceState *d, Error **errp)
|
||||||
object_unref(OBJECT(drc));
|
object_unref(OBJECT(drc));
|
||||||
}
|
}
|
||||||
g_free(child_name);
|
g_free(child_name);
|
||||||
DPRINTFN("drc realize complete");
|
trace_spapr_drc_realize_complete(drck->get_index(drc));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unrealize(DeviceState *d, Error **errp)
|
static void unrealize(DeviceState *d, Error **errp)
|
||||||
|
@ -532,7 +518,7 @@ static void unrealize(DeviceState *d, Error **errp)
|
||||||
char name[256];
|
char name[256];
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
|
||||||
DPRINTFN("drc unrealize: %x", drck->get_index(drc));
|
trace_spapr_drc_unrealize(drck->get_index(drc));
|
||||||
root_container = container_get(object_get_root(), DRC_CONTAINER_PATH);
|
root_container = container_get(object_get_root(), DRC_CONTAINER_PATH);
|
||||||
snprintf(name, sizeof(name), "%x", drck->get_index(drc));
|
snprintf(name, sizeof(name), "%x", drck->get_index(drc));
|
||||||
object_property_del(root_container, name, &err);
|
object_property_del(root_container, name, &err);
|
||||||
|
|
|
@ -35,6 +35,27 @@ spapr_iommu_ddw_create(uint64_t buid, uint32_t cfgaddr, uint64_t pg_size, uint64
|
||||||
spapr_iommu_ddw_remove(uint32_t liobn) "liobn=%"PRIx32
|
spapr_iommu_ddw_remove(uint32_t liobn) "liobn=%"PRIx32
|
||||||
spapr_iommu_ddw_reset(uint64_t buid, uint32_t cfgaddr) "buid=%"PRIx64" addr=%"PRIx32
|
spapr_iommu_ddw_reset(uint64_t buid, uint32_t cfgaddr) "buid=%"PRIx64" addr=%"PRIx32
|
||||||
|
|
||||||
|
# hw/ppc/spapr_drc.c
|
||||||
|
spapr_drc_set_isolation_state(uint32_t index, int state) "drc: 0x%"PRIx32", state: %"PRIx32
|
||||||
|
spapr_drc_set_isolation_state_finalizing(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_set_isolation_state_deferring(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_set_indicator_state(uint32_t index, int state) "drc: 0x%"PRIx32", state: 0x%x"
|
||||||
|
spapr_drc_set_allocation_state(uint32_t index, int state) "drc: 0x%"PRIx32", state: 0x%x"
|
||||||
|
spapr_drc_set_allocation_state_finalizing(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_set_configured(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_set_configured_skipping(uint32_t index) "drc: 0x%"PRIx32", isolated device"
|
||||||
|
spapr_drc_entity_sense(uint32_t index, int state) "drc: 0x%"PRIx32", state: 0x%x"
|
||||||
|
spapr_drc_attach(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_detach(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_awaiting_isolated(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_awaiting_unusable(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_awaiting_allocation(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_reset(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_realize(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_realize_child(uint32_t index, char *childname) "drc: 0x%"PRIx32", child name: %s"
|
||||||
|
spapr_drc_realize_complete(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
spapr_drc_unrealize(uint32_t index) "drc: 0x%"PRIx32
|
||||||
|
|
||||||
# hw/ppc/ppc.c
|
# hw/ppc/ppc.c
|
||||||
ppc_tb_adjust(uint64_t offs1, uint64_t offs2, int64_t diff, int64_t seconds) "adjusted from 0x%"PRIx64" to 0x%"PRIx64", diff %"PRId64" (%"PRId64"s)"
|
ppc_tb_adjust(uint64_t offs1, uint64_t offs2, int64_t diff, int64_t seconds) "adjusted from 0x%"PRIx64" to 0x%"PRIx64", diff %"PRId64" (%"PRId64"s)"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue