[libvirt] [PATCH V2 1/5] Add public API virDomainSendSysrq

Chun Yan Liu cyliu at suse.com
Tue Dec 16 06:51:15 UTC 2014



>>> On 12/15/2014 at 11:27 AM, in message
<548EC58D0200006600084AF9 at soto.provo.novell.com>, "Chun Yan Liu"
<cyliu at suse.com> wrote: 

>  
>>>> On 12/12/2014 at 05:35 PM, in message <20141212093545.GD136165 at orkuz.home>, 
> Jiri Denemark <jdenemar at redhat.com> wrote:  
> > On Fri, Dec 12, 2014 at 10:18:36 +0100, Peter Krempa wrote:  
> > > On 12/12/14 10:04, Chunyan Liu wrote:  
> > > > Add public API virDomainSendSysrq for sending SysRequest key.  
> > > >   
> > > > Signed-off-by: Chunyan Liu <cyliu at suse.com>  
> > > > ---  
> > > >  include/libvirt/libvirt-domain.h |  3 +++  
> > > >  src/driver-hypervisor.h          |  4 ++++  
> > > >  src/libvirt-domain.c             | 38   
> > ++++++++++++++++++++++++++++++++++++++  
> > > >  src/libvirt_public.syms          |  1 +  
> > > >  4 files changed, 46 insertions(+)  
> > > >   
> > >   
> > > [...]  
> > >   
> > > > diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c  
> > > > index cb76d8c..4658fd7 100644  
> > > > --- a/src/libvirt-domain.c  
> > > > +++ b/src/libvirt-domain.c  
> > > > @@ -11192,3 +11192,41 @@ virDomainFSInfoFree(virDomainFSInfoPtr info)  
> > > >          VIR_FREE(info->devAlias[i]);  
> > > >      VIR_FREE(info->devAlias);  
> > > >  }  
> > > > +  
> > > > +  
> > > > +/**  
> > > > + * virDomainSendSysrq:  
> > > > + * @domain:    pointer to domain object, or NULL for Domain0  
> > > > + * @key:    SysRq key, like h, c, ...  
> > > > + *  
> > > > + * Send SysRq key to the guest.  
> > > > + *  
> > > > + * Returns 0 in case of success, -1 in case of failure.  
> > > > + */  
> > > > +int  
> > > > +virDomainSendSysrq(virDomainPtr domain, const char *key)  
> > >   
> > > The new API should definitely have a 'flags' argument although it may be  
> > > unused for now.  
> >   
> > Moreover, passing a single character by reference sounds pretty strange,  
> > why not just "char key"? 
>  
> I tried to define as 'char key', but meet some trouble in remote protocol, 
> +struct remote_domain_send_sysrq_args { 
> +    remote_nonnull_domain dom; 
> +    char key; 
> +}; 
> will report 'char key' as unsupported type. 

Any ideas here?

With 'char key' in remote_protocol.x, it'll report:
"unhandled type for argument value: char key; at ./rpc/gendispatch.pl line 1234."
I didn't find a way to avoid that, that's why I turned to use 'char *key' (a string, and
when calling libxl API, pass key[0]).


> 
> > Moreover, wouldn't it be better to provide an  
> > enum of possible values with meaningful names (rather than keys), such  
> > as  
> >   
> > typedef enum {  
> >     VIR_DOMAIN_SYSRQ_REBOOT,  
> >     VIR_DOMAIN_SYSRQ_CRASH,  
> >     VIR_DOMAIN_SYSRQ_OOM_KILL,  
> >     VIR_DOMAIN_SYSRQ_SYNC,  
> >     ...  
> > } virDomainSysrqCommand;  
> >   
> > This way, virDomainSendSysrq(dom, VIR_DOMAIN_SYSRQ_OOM_KILL, 0) would be  
> > pretty self-explaining. The prototype would have to change to  
>  
> Mainly because xen/libxl API both accept letter as parameter directly, so  
> define 
> enum will need to map enum to letter before calling xen/libxl API. 
>  
> Chunyan 
>  
> >   
> > int virDomainSendSysrq(virDomainPtr domain,  
> >                        int command, /* one of virDomainSysrqCommand */  
> >                        unsigned int flags);  
> >   
> > Jirka  
> >   
> >   
>  
>  
>  
> -- 
> libvir-list mailing list 
> libvir-list at redhat.com 
> https://www.redhat.com/mailman/listinfo/libvir-list 
>  
>  





More information about the libvir-list mailing list