On 14.02.2013, at 07:32, Scott Wood wrote:
> +DeviceState *kvm_openpic_create(BusState *bus, int model)
> +{
> + KVMState *s = kvm_state;
> + DeviceState *dev;
> + struct kvm_create_device cd = {0};
> + int ret;
> +
> + if (!kvm_check_extension(s, KVM_CAP_DEVICE_CTRL)) {
> + return NULL;
> + }
> +
> + switch (model) {
> + case OPENPIC_MODEL_FSL_MPIC_20:
> + cd.type = KVM_DEV_TYPE_FSL_MPIC_20;
> + break;
> +
> + case OPENPIC_MODEL_FSL_MPIC_42:
> + cd.type = KVM_DEV_TYPE_FSL_MPIC_42;
> + break;
> +
> + default:
> + qemu_log_mask(LOG_UNIMP, "%s: unknown openpic model %d\n",
> + __func__, model);
> + return NULL;
> + }
> +
> + ret = kvm_vm_ioctl(s, KVM_CREATE_DEVICE, &cd);
> + if (ret < 0) {
> + fprintf(stderr, "%s: can't create device %d: %s\n",
__func__, cd.type,
> + strerror(errno));
> + return NULL;
> + }
Can't all the stuff above here just simply go into the qdev init
function?
> /* MPIC */
> mpic = g_new(qemu_irq, 256);
> - dev = qdev_create(NULL, "openpic");
> - qdev_prop_set_uint32(dev, "nb_cpus", smp_cpus);
> - qdev_prop_set_uint32(dev, "model", params->mpic_version);
> +
> + if (kvm_irqchip_wanted()) {
> + dev = kvm_openpic_create(NULL, params->mpic_version);
This really should be just a
dev = qdev_create(NULL, kvm_irqchip_wanted() ? "kvm-openpic" :
"openpic");
The logic whether an in-kernel irqchip is available belongs into the
default setting of kvm_irqchip_wanted.