[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 5/8] tmem: Move TMEM_CONTROL subop of tmem hypercall to sysctl.
>>> On 27.08.15 at 13:02, <konrad.wilk@xxxxxxxxxx> wrote: > @@ -2666,9 +2662,9 @@ long do_tmem_op(tmem_cli_op_t uops) > /* Acquire wirte lock for all command at first */ > write_lock(&tmem_rwlock); > > - if ( op.cmd == TMEM_CONTROL ) > + if ( op.cmd == TMEM_CONTROL_MOVED ) > { > - rc = do_tmem_control(&op); > + rc = -ENOSYS; As in other similar cases I'd prefer -EOPNOTSUPP here to prevent callers from implying the tmem hypercall as a whole is unimplemented. > --- a/xen/include/public/sysctl.h > +++ b/xen/include/public/sysctl.h > @@ -710,6 +710,48 @@ struct xen_sysctl_psr_cat_op { > typedef struct xen_sysctl_psr_cat_op xen_sysctl_psr_cat_op_t; > DEFINE_XEN_GUEST_HANDLE(xen_sysctl_psr_cat_op_t); > > +#define XEN_SYSCTL_TMEM_OP_ALL_CLIENTS 0xFFFFU > + > +#define XEN_SYSCTL_TMEM_OP_THAW 0 > +#define XEN_SYSCTL_TMEM_OP_FREEZE 1 > +#define XEN_SYSCTL_TMEM_OP_FLUSH 2 > +#define XEN_SYSCTL_TMEM_OP_DESTROY 3 > +#define XEN_SYSCTL_TMEM_OP_LIST 4 > +#define XEN_SYSCTL_TMEM_OP_SET_WEIGHT 5 > +#define XEN_SYSCTL_TMEM_OP_SET_CAP 6 > +#define XEN_SYSCTL_TMEM_OP_SET_COMPRESS 7 > +#define XEN_SYSCTL_TMEM_OP_QUERY_FREEABLE_MB 8 > +#define XEN_SYSCTL_TMEM_OP_SAVE_BEGIN 10 > +#define XEN_SYSCTL_TMEM_OP_SAVE_GET_VERSION 11 > +#define XEN_SYSCTL_TMEM_OP_SAVE_GET_MAXPOOLS 12 > +#define XEN_SYSCTL_TMEM_OP_SAVE_GET_CLIENT_WEIGHT 13 > +#define XEN_SYSCTL_TMEM_OP_SAVE_GET_CLIENT_CAP 14 > +#define XEN_SYSCTL_TMEM_OP_SAVE_GET_CLIENT_FLAGS 15 > +#define XEN_SYSCTL_TMEM_OP_SAVE_GET_POOL_FLAGS 16 > +#define XEN_SYSCTL_TMEM_OP_SAVE_GET_POOL_NPAGES 17 > +#define XEN_SYSCTL_TMEM_OP_SAVE_GET_POOL_UUID 18 > +#define XEN_SYSCTL_TMEM_OP_SAVE_GET_NEXT_PAGE 19 > +#define XEN_SYSCTL_TMEM_OP_SAVE_GET_NEXT_INV 20 > +#define XEN_SYSCTL_TMEM_OP_SAVE_END 21 > +#define XEN_SYSCTL_TMEM_OP_RESTORE_BEGIN 30 > +#define XEN_SYSCTL_TMEM_OP_RESTORE_PUT_PAGE 32 > +#define XEN_SYSCTL_TMEM_OP_RESTORE_FLUSH_PAGE 33 Perhaps better to have all these in tmem.h, to not clutter this header? > +struct xen_sysctl_tmem_op { > + uint32_t cmd; /* IN: XEN_SYSCTL_TMEM_OP_* . */ > + int32_t pool_id; /* IN: 0 by default unless _SAVE_*, RESTORE_* .*/ > + uint32_t cli_id; /* IN: client id, 0 for > XEN_SYSCTL_TMEM_QUERY_FREEABLE_MB > + for all others can be the domain id or > + XEN_SYSCTL_TMEM_OP_ALL_CLIENTS for all. */ > + uint32_t arg1; /* IN: If not applicable to command use 0. */ > + uint32_t arg2; /* IN: If not applicable to command use 0. */ > + uint8_t pad[4]; /* Padding so structure is the same under 32 and 64. > */ uint32_t please. And despite this being an (easily changeable) sysctl, verifying that it's zero on input would be nice. > --- a/xen/include/public/tmem.h > +++ b/xen/include/public/tmem.h > @@ -33,7 +33,7 @@ > #define TMEM_SPEC_VERSION 1 > > /* Commands to HYPERVISOR_tmem_op() */ > -#define TMEM_CONTROL 0 > +#define TMEM_CONTROL_MOVED 0 Perhaps say where it moved in a brief comment? > --- a/xen/xsm/flask/hooks.c > +++ b/xen/xsm/flask/hooks.c > @@ -761,6 +761,9 @@ static int flask_sysctl(int cmd) > case XEN_SYSCTL_tbuf_op: > return domain_has_xen(current->domain, XEN__TBUFCONTROL); > > + case XEN_SYSCTL_tmem_op: > + return domain_has_xen(current->domain, XEN__TMEM_CONTROL); > + > case XEN_SYSCTL_sched_id: > return domain_has_xen(current->domain, XEN__GETSCHEDULER); Hmm, these cases appear to be roughly sorted numerically, i.e. yours would normally go at the end. Despite the comments I see no reason for this (once adjusted where needed) not to go in for 4.6. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |