[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] Morph cpu_reset -> device_reset
From: |
Peter Crosthwaite |
Subject: |
Re: [Qemu-devel] Morph cpu_reset -> device_reset |
Date: |
Mon, 15 Jul 2013 20:45:14 +1000 |
Hi Andreas,
On Mon, Jul 15, 2013 at 7:55 PM, Andreas Färber <address@hidden> wrote:
> Hi Peter,
>
> Am 15.07.2013 06:02, schrieb Peter Crosthwaite:
>> A while ago, TYPE_CPU was refactored to by a child of TYPE_DEVICE. As
>> something of a hangover though, CPU has a separate reset fn to device.
>> This means
>>
>> device_reset(DEVICE(my_cpu));
>>
>> doesn't actually work as a reset. Should we fix this by getting rif of
>> cpu_reset and just using the device reset API for cpu reset?
>
> This question has come up a number of times, cf. the archives. For one,
> CPU reset is a mess with most CPUs not registering reset handlers of
> their own like devices do but having machines do that and piggy-back
> some machine-specific initialization, possibly even relying on execution
> order of reset handlers.
So some architectures are going to be a lot easier than others and if
this is considered the right thing to do, we can convert some of easy
ones and scratch our heads later re the machine quirks. I can speak
for Microblaze as being as easy one. ARM doesn't look that scary
either - and thats the one I want to convert for my application.
> For another, some forms of Soft Reset (e.g.,
> kdump on s390x) will require to reset devices only but not CPUs -
> currently qdev_devices_reset() calls all reset handlers, not just
> devices as the name might imply.
>
> For now you can reset a CPU via
>
> cpu_reset(CPU(my_cpu));
>
So my application is clock controllers, which have a uniform reset
mechanism. I want to avoid having to give my clock controller CPU
awareness for the sake of being able to do a reset. Infact, I dont
event want my controller know what its resetting, all it gets is a
link to a TYPE_DEVICE which it can then reset. Not possible with CPUs
unless you:
if (object_dynamic_cast(my_dev, TYPE_CPU))
cpu_reset(...);
else
device_reset(...);
Regards,
Peter
> and if you have a good suggestion to clean this up, that will be
> appreciated. So far, a CPUClass method (1:1) and Notifiers (1:n) were
> the ideas that I brought up.
>
> Regards,
> Andreas
>
> --
> SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
> GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
>