All of lore.kernel.org
 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 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.