qemu qdev

http://wiki.qemu.org/Features/QDevCleanup


All devices should have a DeviceState associated with them. Otherwise, there's really no point in having qdev at all.

We have lots of devices today that don't have DeviceState's associated with them because the have a separate qdev representation with a reference to the non-DeviceState object.

We have non-DeviceState objects because otherwise we end up with an inheritance diamond. We have this problem because we want to have relationships like: DeviceState <- SystemDeviceState <- ISADevice <- ISASerialDevice.

But ISASerialDevice is not the only type of serial device. You can also have a SystemSerialDevice that's directly attached to the System bus. That means you'd have to have:

SerialDevice -> ISASerialDevice -> SystemDeviceState -> DeviceState
-> SystemSerialDevice -> SystemDeviceState -> DeviceState

Which is a classic MI diamond. The only way to resolve this modelling problem is to split out the common code and rely on a has-a relationship instead of an is-a. That gives you:

ISASerialDevice->SystemDeviceState->DeviceState
SystemSerialDevice->SystemDeviceState->DeviceState

ISASerialDevice has-a SerialDevice
SystemSerialDevice has-a SerialDevice

And since we want SerialDevice inherit from a DeviceState (recall, all devices should have DeviceStates):

SerialDevice->DeviceState

No more MI diamond and all devices have DeviceStates. Coincidentally, it matches more closely how hardware works..

Generally speaking, any time we have one device that needs to sit on multiple busses, we're going to have to model it in this fashion.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值