(Re-send because missing reply-to-all)

Really appreciate your time and valuable input Eric. I almost didn't submit
any patches, so there is quite a lot to learn about it.


I'd agree with you on this, but memsave/pmemsave function are using stdio,
thus I was trying to be consistent with them.


>  > +    if (!f) {
> > +        error_setg_file_open(errp, errno, filename);
> > +        return;
> > +    }
> > +
> > +    while (size != 0) {
> > +        l = fread(buf, 1, sizeof(buf), f);
> > +        if (l > size)
> > +            l = size;
>
> How about error handling as below, the same error handling is used by
memsave/pmemsave.

        l = fread(buf, 1, sizeof(buf), f);
        if (l ! = sizeof(buf)) {
            error_set(errp, QERR_IO_ERROR);
            goto eixt;
        }



> This is lousy at error detection.  Again, you should be using read(),
> not fread(), and properly erroring out on read failures rather than
> silently ignoring them.
>
>
> > +        .name       = "pmemload",
> > +        .args_type  = "val:l,size:i,filename:s",
>
> Would it make sense to put filename as the FIRST argument, with val and
> size as optional arguments (defaulting to reading in at address 0 and
> for the size determined by the length of the input file), rather than
> forcing the user to pass in a size up front?
>
> Same reason as above, I though it could be easier if pmemload takes the
same arguments as memsave/pmemsave.

Again, really thanks for your patient.

Best Regards


On Tue, Apr 8, 2014 at 12:42 PM, Eric Blake <ebl...@redhat.com> wrote:

> On 04/08/2014 01:30 PM, Baojun Wang wrote:
>
> Your subject line is extremely long.  In general, we strive for
> something less than 60 characters, so that 'git shortlog -30' can
> display the entire line in an 80-column terminal.  Also, the subject
> mentions pmemsave, but your commit mentions pmemload - it's very
> misleading to provide a patch where the commit message doesn't even
> mention the name of the command the patch is adding.  I would suggest a
> subject line of:
>
> qmp: add pmemload command
>
> > I found this could be useful to have qemu-softmmu as a cross debugger
> (launch
> > with -s -S command line option), then if we can have a command to load
> guest
> > physical memory, we can use cross gdb to do some target debug which gdb
> cannot
> > do directly.
> >
>
> Your patch is lacking a Signed-off-by designation, therefore we cannot
> accept it yet.
>
> > Many thanks to Eric Blake for review the patch.
>
> This comment may be useful to reviewers, but is not part of the commit
> itself, so it belongs better...
>
> >
> > ---
>
> ...here, after the --- separator.
>
>
> >
> > +void qmp_pmemload(int64_t addr, int64_t size, const char *filename,
> > +                  Error **errp)
> > +{
> > +    FILE *f;
> > +    uint32_t l;
> > +    uint8_t buf[1024];
> > +
> > +    f = fopen(filename, "rb");
>
> Rather than using fopen() and FILE* operations, I'd prefer you use
> qemu_open() and lower-level read() operations.  In particular, this will
> automatically make it possible for management applications to pass in
> '/dev/fdset/1' to reuse a file descriptor that they passed in to qemu,
> rather than forcing qemu to directly open the file.
>
> > +    if (!f) {
> > +        error_setg_file_open(errp, errno, filename);
> > +        return;
> > +    }
> > +
> > +    while (size != 0) {
> > +        l = fread(buf, 1, sizeof(buf), f);
> > +        if (l > size)
> > +            l = size;
>
> This is lousy at error detection.  Again, you should be using read(),
> not fread(), and properly erroring out on read failures rather than
> silently ignoring them.
>
>
> > +        .name       = "pmemload",
> > +        .args_type  = "val:l,size:i,filename:s",
>
> Would it make sense to put filename as the FIRST argument, with val and
> size as optional arguments (defaulting to reading in at address 0 and
> for the size determined by the length of the input file), rather than
> forcing the user to pass in a size up front?
>
> > +++ b/qapi-schema.json
> > @@ -1708,6 +1708,26 @@
> >    'data': {'val': 'int', 'size': 'int', 'filename': 'str'} }
> >
> >  ##
> > +# @pmemload:
> > +#
> > +# Load a portion of guest physical memory from a file.
> > +#
> > +# @val: the physical address of the guest to start from
> > +#
> > +# @size: the size of memory region to load
> > +#
> > +# @filename: the file to load the memory from as binary data
> > +#
> > +# Returns: Nothing on success
> > +#
> > +# Since: 2.1
> > +#
> > +# Notes: Errors were not reliably returned until 2.1
>
> Delete this line.  I guess I didn't make it clear in my first review
> that this line is bogus copy and paste.  You don't need it.  pmemsave
> needed it, because pmemsave went through some iterations where earlier
> versions were buggy.  But your pmemload command is brand new, and should
> not have bugs worth worrying about.
>
> --
> Eric Blake   eblake redhat com    +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
>
>

Reply via email to