qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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


      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).