From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59152) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VAEDy-0007U4-DG for qemu-devel@nongnu.org; Fri, 16 Aug 2013 03:13:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VAEDt-0007IE-Bd for qemu-devel@nongnu.org; Fri, 16 Aug 2013 03:13:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:65086) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VAEDt-0007I5-3l for qemu-devel@nongnu.org; Fri, 16 Aug 2013 03:13:25 -0400 Message-ID: <520DD1A7.5090005@redhat.com> Date: Fri, 16 Aug 2013 09:15:51 +0200 From: Laszlo Ersek MIME-Version: 1.0 References: <1374527256-27631-1-git-send-email-lersek@redhat.com> In-Reply-To: <1374527256-27631-1-git-send-email-lersek@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 0/8] OptsVisitor: support / flatten integer ranges for repeating options List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Michael Roth , Luiz Capitulino Ping then, for 1.7 :) (Don't stone me, I don't have the slightest clue about the 1.7 backlog. I'm fine with this being tacked to the end, just don't let it fall through the cracks.) Thanks Laszlo On 07/22/13 23:07, Laszlo Ersek wrote: > rfc->v1: > - addressed Paolo's comments for patches 1 and 2, > - patches 7 and 8 are new (unit tests), > - updated the cover letter to take native lists into account, plus > cleaned it up. > > Consider the following QAPI schema fragment, for the purpose of command > line parsing with OptsVisitor: > > { 'union': 'NumaOptions', > 'data': { > 'node': 'NumaNodeOptions', > 'mem' : 'NumaMemOptions' }} > > { 'type': 'NumaNodeOptions', > 'data': { > '*nodeid': 'int', > '*cpus' : ['uint16'] }} > > { 'type': 'NumaMemOptions', > 'data': { > '*nodeid': 'int', > '*size' : 'size' }} > > (Commit eb7ee2cb ("qapi: introduce OptsVisitor") had originally > documented OptsVisitor's general schema requirements for parsing > repeated options such that the list element type had to be a struct with > one mandatory scalar field. Accordingly, the RFC version of this series > required for interval flattening that this underlying scalar type be an > integer type. However, since commit a678e26c ("qapi: pad GenericList > value fields to 64 bits") we've had reliable native lists; OptsVisitor > turns out to support them automatically.) > > OptsVisitor already accepts the following command line with the above > schema: > > -numa node,nodeid=3,cpus=0,cpus=1,cpus=2,cpus=6,cpus=7,cpus=8 > > Paolo suggested in > > that OptsVisitor should allow the following shortcut: > > -numa node,nodeid=3,cpus=0-2,cpus=6-8 > > and that the code processing the "cpus" list should encounter all six > elements (0, 1, 2, 6, 7, 8) individually. > > The series implements this feature. Both signed and unsigned values and > intervals are supported in general: > > * 0 (zero) > * 1-5 (one to five) > * 4-4 (four to four, range with one element) > * -2 (minus two) > * -5-8 (minus five to plus eight) > * -9--6 (minus nine to minus six) > > The restrictions imposed by the native list element's signedness and > size (in the above schema example, 'uint16') are enforced element-wise > as usual. That is, for 'uint16', the command line option > > -numa node,nodeid=3,cpus=65534-65537 > > is equivalent to > > -numa node,nodeid=3,cpus=65534,cpus=65535,cpus=65536,cpus=65537 > > and visit_type_uint16() [qapi/qapi-visit-core.c] will catch the first > element (= 65536) that has been parsed by opts_type_int() but cannot be > represented as 'uint16'. > > Laszlo Ersek (8): > OptsVisitor: introduce basic list modes > OptsVisitor: introduce list modes for interval flattening > OptsVisitor: opts_type_int(): recognize intervals when LM_IN_PROGRESS > OptsVisitor: rebase opts_type_uint64() to parse_uint_full() > OptsVisitor: opts_type_uint64(): recognize intervals when > LM_IN_PROGRESS > OptsVisitor: don't try to flatten overlong integer ranges > add "test-int128" to .gitignore > OptsVisitor: introduce unit tests, with test cases for range > flattening > > tests/Makefile | 6 +- > qapi-schema-test.json | 15 +++ > include/qapi/opts-visitor.h | 6 + > qapi/opts-visitor.c | 184 ++++++++++++++++++++++++----- > tests/test-opts-visitor.c | 275 +++++++++++++++++++++++++++++++++++++++++++ > .gitignore | 2 + > 6 files changed, 456 insertions(+), 32 deletions(-) > create mode 100644 tests/test-opts-visitor.c > >