All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: Blue Swirl <blauwirbel@gmail.com>,
	"Liu >> \"Liu, Jinsong\"" <jinsong.liu@intel.com>,
	qemu-devel <qemu-devel@nongnu.org>,
	Markus Armbruster <armbru@redhat.com>,
	Paul Brook <paul@codesourcery.com>
Subject: Re: [Qemu-devel] [PATCH v2 0/7] APIC/IOAPIC cleanup
Date: Sun, 22 Aug 2010 23:28:21 +0300	[thread overview]
Message-ID: <4C718865.7010807@redhat.com> (raw)
In-Reply-To: <4C6ECBB7.7060608@codemonkey.ws>

  On 08/20/2010 09:38 PM, Anthony Liguori wrote:
>> While that might be useful, I don't quite see what makes CPUs so special
>> that they need to be kept out of qdev.  Could be just my ignorance, of
>> course.
>
> CPUs have special relationships with things like memory in QEMU.  You 
> can argue that a device is anything with pins and that CPUs are just 
> like any other chip. 

We're not modelling chips!  If we declare something a device, we do it 
because it's functionally a device.  It could be part of a chip, or 
spread along multiple chips.

> But do we really want to model memory chipsets, a north and south 
> bridge, and long with cache hierarchies?

We do model devices within the north and south bridges.  The aggregation 
into two chips is largely meaningless from a functional point of view, 
as are cache hierarchies.

> It's the trade off between a functional simulator and a cycle accurate 
> simulator.
>

Exactly.  A cpu is a functional unit since it's hot-pluggable and has 
user-visible state.  A north bridge is not hot-pluggable and has no 
user-visible state (apart from its component devices).  A PCI device 
does not have user visible state (except as an aggregation of 
functions), but it is hot-pluggable, thus it should be modelled.

> If we wanted to add per-device locking based on putting a lock in 
> DeviceState that was acquired and released whenever you executed a 
> PIO, how would you do that today?
>
> You would convert cpu_register_ioport_* to take a DeviceState in 
> serial_init_core.  Sure, you could add a layer of indirection in 
> ISASerialDevice, but what about timers?  We would want to implement 
> device based timers to do the same thing but again, when we register 
> the timers we don't have a DeviceState.
>
> All device callbacks should be based on DeviceState * pointers which 
> means if we want to share device code between multiple interfaces (be 
> it ISA, PCI, or a SysBus device), we need to have a bus in between.

How can you do that?  Do you mean that a timer calls 
DeviceState::ops->timer(DeviceState *)?  How do you handle multiple 
timers then?

Much better to call a traditional callback which then uses 
container_of() to locate its state.

-- 
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.

  reply	other threads:[~2010-08-22 20:28 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-12 21:14 [Qemu-devel] [PATCH v2 0/7] APIC/IOAPIC cleanup Blue Swirl
2010-06-13 16:56 ` [Qemu-devel] " Jan Kiszka
2010-06-13 17:03   ` Andreas Färber
2010-06-13 17:53     ` Blue Swirl
2010-06-13 18:17       ` Andreas Färber
2010-06-13 17:49   ` Blue Swirl
2010-08-19 19:33 ` [Qemu-devel] " Anthony Liguori
2010-08-19 20:09   ` Blue Swirl
2010-08-19 20:49     ` Anthony Liguori
2010-08-19 21:21       ` Blue Swirl
2010-08-19 21:51         ` Anthony Liguori
2010-08-19 22:52           ` malc
2010-08-20  1:01             ` Anthony Liguori
2010-08-20 10:00               ` malc
2010-08-20  8:42           ` [Qemu-devel] " Paolo Bonzini
2010-08-20 17:01           ` [Qemu-devel] " Markus Armbruster
2010-08-20 18:38             ` Anthony Liguori
2010-08-22 20:28               ` Avi Kivity [this message]
2010-08-22 21:02                 ` Anthony Liguori
2010-08-23  5:46                   ` Avi Kivity
2010-08-23 13:23                     ` Anthony Liguori
2010-08-23 13:42                       ` Avi Kivity
2010-08-23 13:48                         ` Anthony Liguori
2010-08-23 14:00                           ` Avi Kivity
2010-08-23 14:26                             ` Anthony Liguori
2010-08-23 14:32                               ` Avi Kivity
2010-08-23 14:47                                 ` Anthony Liguori
2010-08-23 15:10                                   ` Markus Armbruster
2010-08-23 16:05                                     ` Anthony Liguori
2010-08-23 17:36                                       ` Markus Armbruster
2010-08-23 17:47                                         ` Anthony Liguori
2010-08-23 18:24                                       ` [Qemu-devel] " Jan Kiszka
2010-08-23 18:29                                         ` Anthony Liguori
2010-08-23 15:14                                   ` [Qemu-devel] " Avi Kivity
2010-08-23 16:02                                     ` Anthony Liguori
2010-08-24  9:51                                       ` Avi Kivity
2010-08-20 19:26           ` Blue Swirl
2010-08-20 10:35       ` [Qemu-devel] " Jan Kiszka
2010-08-22  9:37       ` [Qemu-devel] " Avi Kivity
2010-08-22 18:52         ` Anthony Liguori
2010-08-22 19:44           ` Avi Kivity
2010-08-22 20:03             ` Anthony Liguori
2010-08-22 20:33               ` Avi Kivity
2010-08-22 21:06                 ` Anthony Liguori
2010-08-23  5:49                   ` Avi Kivity
2010-08-23  9:09                     ` [Qemu-devel] " Jan Kiszka
2010-08-23  9:25                       ` Avi Kivity
2010-08-23 10:11                         ` Alexander Graf
2010-08-23 10:15                           ` Avi Kivity
2010-08-23 10:18                             ` Alexander Graf
2010-08-23 10:25                               ` Avi Kivity
2010-08-22 21:07             ` [Qemu-devel] " Anthony Liguori
2010-08-23  5:48               ` Avi Kivity
2010-08-22  9:13   ` Avi Kivity

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C718865.7010807@redhat.com \
    --to=avi@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=armbru@redhat.com \
    --cc=blauwirbel@gmail.com \
    --cc=jinsong.liu@intel.com \
    --cc=paul@codesourcery.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.