From: Anthony Liguori <anthony@codemonkey.ws>
To: Anthony Liguori <aliguori@us.ibm.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 00/27] qom: add QEMU Object Model type hierarchy to qdev
Date: Tue, 20 Dec 2011 10:55:22 -0600 [thread overview]
Message-ID: <4EF0BDFA.7060600@codemonkey.ws> (raw)
In-Reply-To: <1324399916-21315-1-git-send-email-aliguori@us.ibm.com>
[-- Attachment #1: Type: text/plain, Size: 1332 bytes --]
On 12/20/2011 10:51 AM, Anthony Liguori wrote:
> This is series 2/4 of the QOM refactoring. These series are divided up based
> on the major scripted code conversions.
Dang, this should have been an RFC, apologies.
>
> This series makes qdev a proper Object and converts qdev's type inheritance to
> QOM inheritance.
>
> The first half of the series are manual cleanups/refactorings. The second half
> is mostly scripted conversion, separated out into reviewable and bisectable
> chunks.
>
> There are a number of patches prefixed with 'not-for-upstream'. As is not
> surprising with a refactoring like this, it turned up some interesting corner
> cases. Part of the purpose of this RFC is to get some feedback on how to best
> handle these cases.
>
> I've tested this series extensively for the pc target including bisectability.
> I've tested this series extensively for the pc target including bisectability.
> I have not tested any other targets yet so your mileage may vary.
>
> This is also available at:
>
> https://github.com/aliguori/qemu/tree/qom-upstream.5
>
> For full context, the whole tree is located at:
>
> https://github.com/aliguori/qemu/commits/qom-rebase.6
>
> I'll reply to this note with a code of the patch monkey script I used for much
> of this series.
Attached here.
Regards,
Anthony Liguori
>
[-- Attachment #2: patch-monkey.py --]
[-- Type: text/x-python, Size: 2707 bytes --]
import sys
info = 'SSISlaveInfo'
klass = 'SSISlaveClass'
cast = 'SSI_SLAVE_CLASS'
lines = sys.stdin.read().split('\n')
i = 0
while i < len(lines):
line = lines[i]
i += 1
if line.startswith('static %s ' % info):
if not line.endswith('info = {'):
raise Exception('Cannot process this form "%s"' % line)
name = line.split()[2][:-5]
items = []
processed_lines = []
while i < len(lines) and lines[i] != '};':
line = lines[i]
i += 1
processed_lines.append(line)
if line.strip() == '' or line.strip().startswith('/*'):
continue
try:
key, value = map(lambda x: x.strip(), line.split('=', 1))
if value.endswith(','):
value = value[:-1]
except:
sys.stdout.write('\n'.join(processed_lines))
raise
if key == '.qdev.props' and value.startswith('('):
properties = []
while i < len(lines) and lines[i].strip() not in ['},', '}']:
line = lines[i]
i += 1
line = line.strip()
if line.endswith(','):
line = line[:-1]
properties.append(line)
if i == len(lines):
raise Exception('Cannot find end of properties')
i += 1
value = properties
items.append((key, value))
if i == len(lines):
raise Exception('Cannot find end of type info')
i += 1
props = filter(lambda (x,y): x == '.qdev.props', items)
if len(props) and type(props[0][1]) == list:
print 'static Property %s_properties[] = {' % name
for prop in props[0][1]:
print ' %s,' % prop
print '};'
print
print '''static void %s_class_init(ObjectClass *klass, void *data)
{
%s *k = %s(klass);
''' % (name, klass, cast)
for key, value in items:
if key.startswith('.qdev.'):
continue
print ' k->%s = %s;' % (key[1:], value)
print '''}
static DeviceInfo %s_info = {''' % name
for key, value in items:
if not key.startswith('.qdev.'):
continue
if key == '.qdev.props' and type(value) == list:
print ' .props = %s_properties,' % name
else:
print ' %s = %s,' % (key[5:], value)
print ' .class_init = %s_class_init,' % (name)
print '};'
elif i < len(lines):
print line
prev parent reply other threads:[~2011-12-20 16:55 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-20 16:51 [Qemu-devel] [PATCH 00/27] qom: add QEMU Object Model type hierarchy to qdev Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 01/27] qom: add the base Object class Anthony Liguori
2011-12-21 13:35 ` Paolo Bonzini
2011-12-21 14:35 ` Anthony Liguori
2011-12-21 15:28 ` Paolo Bonzini
2011-12-22 17:25 ` Kevin O'Connor
2011-12-22 17:41 ` Anthony Liguori
2011-12-22 18:00 ` Kevin O'Connor
2011-12-22 19:57 ` Anthony Liguori
2012-01-02 23:01 ` Andreas Färber
2012-01-03 0:56 ` Anthony Liguori
2011-12-22 20:25 ` Paolo Bonzini
2012-01-02 17:59 ` Paolo Bonzini
2012-01-03 1:18 ` Anthony Liguori
2012-01-03 8:57 ` Paolo Bonzini
2011-12-20 16:51 ` [Qemu-devel] [PATCH 02/27] qdev: integrate with QEMU Object Model Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 03/27] qdev: move qdev->info to class Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 04/27] qdev: don't access name through info Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 05/27] qdev: use a wrapper to access reset and promote reset to a class method Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 06/27] pci: check for an initialized QOM object instead of looking for an info link Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 07/27] qdev: add a interface to register subclasses Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 08/27] qdev: add class_init to DeviceInfo Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 09/27] qdev: prepare source tree for code conversion Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 10/27] not-for-upstream: disable non-qdev pci devices Anthony Liguori
2012-01-02 22:55 ` Andreas Färber
2012-01-03 0:55 ` Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 11/27] isa: convert to QEMU Object Model Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 12/27] usb: " Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 13/27] ccid: " Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 14/27] ssi: " Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 15/27] i2c: rename i2c_slave -> I2CSlave Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 16/27] i2c: smbus: convert to QEMU Object Model Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 17/27] hda-codec: " Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 18/27] ide: " Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 19/27] scsi: " Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 20/27] not-for-upstream: spapr: break default console Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 21/27] spapr: convert to QEMU Object Model Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 22/27] not-for-upstream: virtio-serial: stub out a strange hack Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 23/27] virtio-serial: convert to QEMU Object Model Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 24/27] grackle: remove broken pci device Anthony Liguori
2012-01-02 22:41 ` Andreas Färber
2012-01-03 0:53 ` Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 25/27] unin_pci: remove phantom qdev devices in unin_pci Anthony Liguori
2012-01-02 22:44 ` Andreas Färber
2011-12-20 16:51 ` [Qemu-devel] [PATCH 26/27] pci: convert to QEMU Object Model Anthony Liguori
2011-12-20 16:51 ` [Qemu-devel] [PATCH 27/27] sysbus: " Anthony Liguori
2011-12-20 16:55 ` Anthony Liguori [this message]
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=4EF0BDFA.7060600@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=aliguori@us.ibm.com \
--cc=armbru@redhat.com \
--cc=pbonzini@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).