On 08/10/2018 16:20, Tony Krowiak wrote: > On 09/27/2018 08:52 AM, Cornelia Huck wrote: >> On Thu, 27 Sep 2018 14:29:01 +0200 >> Thomas Huth <th...@redhat.com> wrote: >> >>> On 2018-09-27 00:54, Tony Krowiak wrote: >>>> From: Tony Krowiak <akrow...@linux.ibm.com> >>>> >>>> Introduces the base object model for virtualizing AP devices. >>>> >>>> Signed-off-by: Tony Krowiak <akrow...@linux.ibm.com> >>>> --- >> >>>> +typedef struct APBridge { >>>> + SysBusDevice sysbus_dev; >>>> + bool css_dev_path; >>> >>> What is this css_dev_path variable good for? I don't see it used in any >>> of the other patches? >>> If you don't need it, I think you could get rid of this struct completely? >> >> Huh, now I remember complaining about it before. Looks like a >> copy-and-paste from the css bridge; that variable is used for compat >> handling there (and should be ditched here). >> >>> >>>> +} APBridge; >>>> + >>>> +#define TYPE_AP_BRIDGE "ap-bridge" >>>> +#define AP_BRIDGE(obj) \ >>>> + OBJECT_CHECK(APBridge, (obj), TYPE_AP_BRIDGE) >>>> + >>>> +typedef struct APBus { >>>> + BusState parent_obj; >>>> +} APBus; >>>> + >>>> +#define TYPE_AP_BUS "ap-bus" >>>> +#define AP_BUS(obj) \ >>>> + OBJECT_CHECK(APBus, (obj), TYPE_AP_BUS) >>> >>> I think you could also get rid of AP_BRIDGE(), AP_BUS() and maybe even >>> struct APBus. >> >> If there's nothing interesting to put in these inherited structures, >> probably yes. >> >>> >>>> +void s390_init_ap(void); >>>> + >>>> +#endif >>>> diff --git a/include/hw/s390x/ap-device.h b/include/hw/s390x/ap-device.h >>>> new file mode 100644 >>>> index 000000000000..693df90cc041 >>>> --- /dev/null >>>> +++ b/include/hw/s390x/ap-device.h >>>> @@ -0,0 +1,38 @@ >>>> +/* >>>> + * Adjunct Processor (AP) matrix device interfaces >>>> + * >>>> + * Copyright 2018 IBM Corp. >>>> + * Author(s): Tony Krowiak <akrow...@linux.vnet.ibm.com> >>>> + * >>>> + * This work is licensed under the terms of the GNU GPL, version 2 or (at >>>> + * your option) any later version. See the COPYING file in the top-level >>>> + * directory. >>>> + */ >>>> +#ifndef HW_S390X_AP_DEVICE_H >>>> +#define HW_S390X_AP_DEVICE_H >>>> + >>>> +#define AP_DEVICE_TYPE "ap-device" >>>> + >>>> +typedef struct APDevice { >>>> + DeviceState parent_obj; >>>> +} APDevice; >>>> + >>>> +typedef struct APDeviceClass { >>>> + DeviceClass parent_class; >>>> +} APDeviceClass; >>>> + >>>> +static inline APDevice *to_ap_dev(DeviceState *dev) >>>> +{ >>>> + return container_of(dev, APDevice, parent_obj); >>>> +} >>>> + >>>> +#define AP_DEVICE(obj) \ >>>> + OBJECT_CHECK(APDevice, (obj), AP_DEVICE_TYPE) >>>> + >>>> +#define AP_DEVICE_GET_CLASS(obj) \ >>>> + OBJECT_GET_CLASS(APDeviceClass, (obj), AP_DEVICE_TYPE) >>>> + >>>> +#define AP_DEVICE_CLASS(klass) \ >>>> + OBJECT_CLASS_CHECK(APDeviceClass, (klass), AP_DEVICE_TYPE) >>> >>> Do you really need any of these definitions except AP_DEVICE_TYPE ? > > Yes, we need AP_DEVICE(obj) and struct APDevice; they are both used in > patch 5/6. We can probably get rid of AP_DEVICE_GET_CLASS(obj) and > AP_DEVICE_CLASS(klass), but aren't those typically included in all > QOM definitions?
Yes, we usually add all of them although only some might actually be used. (adding a new device usually looks like filling out a template) -- Thanks, David / dhildenb