All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@suse.com>
To: Juergen Gross <jgross@suse.com>
Cc: sstabellini@kernel.org, wei.liu2@citrix.com,
	George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com,
	ian.jackson@eu.citrix.com, tim@xen.org, julien.grall@arm.com,
	xen-devel@lists.xenproject.org, dgdegra@tycho.nsa.gov
Subject: Re: [PATCH v8 13/15] xen: make grant resource limits per domain
Date: Wed, 20 Sep 2017 04:34:04 -0600	[thread overview]
Message-ID: <59C2603C020000780017D561@prv-mh.provo.novell.com> (raw)
In-Reply-To: <20170920063430.9105-14-jgross@suse.com>

>>> On 20.09.17 at 08:34, <jgross@suse.com> wrote:
> --- a/xen/common/compat/grant_table.c
> +++ b/xen/common/compat/grant_table.c
> @@ -157,21 +157,14 @@ int compat_grant_table_op(unsigned int cmd,
>                  unsigned int max_frame_list_size_in_page =
>                      (COMPAT_ARG_XLAT_SIZE - sizeof(*nat.setup)) /
>                      sizeof(*nat.setup->frame_list.p);
> -                if ( max_frame_list_size_in_page < max_grant_frames )

The latest here, but perhaps even earlier I think max_grant_frames
should become static, so one can be reasonably certain that all other
references are gone.

> @@ -290,8 +293,8 @@ num_act_frames_from_sha_frames(const unsigned int num)
>      return DIV_ROUND_UP(num * sha_per_page, ACGNT_PER_PAGE);
>  }
>  
> -#define max_nr_active_grant_frames \
> -    num_act_frames_from_sha_frames(max_grant_frames)
> +#define max_nr_active_grant_frames(gt) \
> +    num_act_frames_from_sha_frames(gt->max_grant_frames)

Parentheses around gt please.

> @@ -1718,8 +1724,9 @@ gnttab_grow_table(struct domain *d, unsigned int req_nr_frames)
>      ASSERT(gt->active);
>  
>      if ( req_nr_frames < INITIAL_NR_GRANT_FRAMES )
> -        req_nr_frames = INITIAL_NR_GRANT_FRAMES;
> -    ASSERT(req_nr_frames <= max_grant_frames);
> +        req_nr_frames = min_t(unsigned int, INITIAL_NR_GRANT_FRAMES,
> +                                            gt->max_grant_frames);

Perhaps give the INITIAL_NR_GRANT_FRAMES value a U suffix
instead of using min_t() here?

> @@ -1777,13 +1784,15 @@ active_alloc_failed:
>  
>  static long
>  gnttab_setup_table(
> -    XEN_GUEST_HANDLE_PARAM(gnttab_setup_table_t) uop, unsigned int count)
> +    XEN_GUEST_HANDLE_PARAM(gnttab_setup_table_t) uop, unsigned int count,
> +    unsigned int limit_max)
>  {
>      struct vcpu *curr = current;
>      struct gnttab_setup_table op;
>      struct domain *d = NULL;
>      struct grant_table *gt;
>      unsigned int i;
> +    long ret = 0;

Wouldn't int suffice here?

> @@ -1819,6 +1819,21 @@ gnttab_setup_table(
>      gt = d->grant_table;
>      grant_write_lock(gt);
>  
> +    if ( unlikely(op.nr_frames > gt->max_grant_frames) )
> +    {
> +        gdprintk(XENLOG_INFO, "Domain is limited to %d grant-table frames.\n",

%u and you also want to log the subject domain ID (which may not
be current's; same for the other log message below as well as the
similar one in gnttab_get_status_frames()).

> +                gt->max_grant_frames);
> +        op.status = GNTST_general_error;
> +        goto unlock;
> +    }
> +    if ( unlikely(limit_max < gt->max_grant_frames) )

With the check moved here it can be relaxed afaict: Code below
only writes op.nr_frames entries (same then again for
gnttab_get_status_frames()).

> @@ -1852,10 +1867,10 @@ gnttab_setup_table(
>      if ( d )
>          rcu_unlock_domain(d);
>  
> -    if ( unlikely(__copy_field_to_guest(uop, &op, status)) )
> +    if ( !ret && unlikely(__copy_field_to_guest(uop, &op, status)) )

I wonder whether it wouldn't be better to switch that check
producing -EINVAL to also report the failure in op.status, now
that it lives here (same then for gnttab_get_status_frames()
once again).

>  static long
>  gnttab_get_status_frames(XEN_GUEST_HANDLE_PARAM(gnttab_get_status_frames_t) uop,
> -                         int count)
> +                         int count, unsigned int limit_max)

Take the opportunity and switch count to unsigned int?

> @@ -3320,7 +3347,7 @@ do_grant_table_op(
>  
>      case GNTTABOP_setup_table:
>          rc = gnttab_setup_table(
> -            guest_handle_cast(uop, gnttab_setup_table_t), count);
> +            guest_handle_cast(uop, gnttab_setup_table_t), count, ~0);

UINT_MAX?

> @@ -3442,6 +3469,8 @@ grant_table_create(
>      /* Simple stuff. */
>      percpu_rwlock_resource_init(&t->lock, grant_rwlock);
>      spin_lock_init(&t->maptrack_lock);
> +    t->max_grant_frames = max_grant_frames;
> +    t->max_maptrack_frames = max_maptrack_frames;

This together with ...

> @@ -3655,7 +3686,11 @@ int grant_table_set_limits(struct domain *d, unsigned int grant_frames,
>  
>      /* Set limits. */
>      if ( !gt->active )
> +    {
> +        gt->max_grant_frames = grant_frames;
> +        gt->max_maptrack_frames = maptrack_frames;
>          ret = grant_table_init(gt);
> +    }

.. this raises the question of whether it is legal to decrease the
limits. There may be code depending on it only ever growing.
Additionally to take the input values without applying some
upper cap - while we have XSA-77, we still shouldn't introduce
new issues making disaggregation more unsafe. Perhaps the
global limits could serve as a cap here?

> --- a/xen/include/asm-arm/grant_table.h
> +++ b/xen/include/asm-arm/grant_table.h
> @@ -26,8 +26,8 @@ static inline int replace_grant_supported(void)
>      return 1;
>  }
>  
> -#define gnttab_init_arch(gt)                                             \
> -    ( ((gt)->arch.gfn = xzalloc_array(gfn_t, max_grant_frames)) == 0     \
> +#define gnttab_init_arch(gt)                                               \
> +    ( ((gt)->arch.gfn = xzalloc_array(gfn_t, (gt)->max_grant_frames)) == 0 \

Mind switching to use NULL at this occasion?

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  reply	other threads:[~2017-09-20 10:34 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-20  6:34 [PATCH v8 00/15] xen: better grant v2 support Juergen Gross
2017-09-20  6:34 ` [PATCH v8 01/15] xen: move XENMAPSPACE_grant_table code into grant_table.c Juergen Gross
2017-09-20 12:40   ` Julien Grall
2017-09-20  6:34 ` [PATCH v8 02/15] xen: clean up grant_table.h Juergen Gross
2017-09-20  6:34 ` [PATCH v8 03/15] xen: add new domctl hypercall to set grant table resource limits Juergen Gross
2017-09-20  8:26   ` Paul Durrant
2017-09-20  8:49     ` Jan Beulich
2017-09-20  6:34 ` [PATCH v8 04/15] xen: add function for obtaining highest possible memory address Juergen Gross
2017-09-20  8:57   ` Jan Beulich
     [not found]   ` <59C2499A020000780017D412@suse.com>
2017-09-20  8:58     ` Juergen Gross
2017-09-20  9:32       ` Jan Beulich
     [not found]       ` <59C251C8020000780017D4D7@suse.com>
2017-09-20  9:39         ` Juergen Gross
2017-09-20 12:51   ` Julien Grall
2017-09-20 13:08     ` Juergen Gross
2017-09-20 14:24       ` Julien Grall
2017-09-20 14:33         ` Juergen Gross
2017-09-20 17:15           ` Julien Grall
2017-09-21  4:18             ` Juergen Gross
2017-09-20  6:34 ` [PATCH v8 05/15] xen: add max possible mfn to struct xen_sysctl_physinfo Juergen Gross
2017-09-20  8:58   ` Jan Beulich
     [not found]   ` <59C249F3020000780017D415@suse.com>
2017-09-20  9:00     ` Juergen Gross
2017-09-20 12:53   ` Julien Grall
2017-09-20 13:06     ` Juergen Gross
2017-09-20  6:34 ` [PATCH v8 06/15] libxc: add libxc support for setting grant table resource limits Juergen Gross
2017-09-20  6:34 ` [PATCH v8 07/15] tools: set grant limits for xenstore stubdom Juergen Gross
2017-09-20  6:34 ` [PATCH v8 08/15] libxl: add max possible mfn to libxl_physinfo Juergen Gross
2017-09-20  6:34 ` [PATCH v8 09/15] xl: add global grant limit config items Juergen Gross
2017-09-20  6:34 ` [PATCH v8 10/15] libxl: add libxl support for setting grant table resource limits Juergen Gross
2017-09-20  6:34 ` [PATCH v8 11/15] xen: delay allocation of grant table sub structures Juergen Gross
2017-09-20  9:22   ` Jan Beulich
     [not found]   ` <59C24F80020000780017D473@suse.com>
2017-09-20  9:44     ` Juergen Gross
2017-09-20 10:02       ` Jan Beulich
     [not found]       ` <59C258D4020000780017D521@suse.com>
2017-09-20 10:05         ` Juergen Gross
2017-09-20  6:34 ` [PATCH v8 12/15] xen/arm: move arch specific grant table bits into grant_table.c Juergen Gross
2017-09-20  9:25   ` Jan Beulich
2017-09-20 14:34   ` Julien Grall
2017-09-21  4:36     ` Juergen Gross
2017-09-20  6:34 ` [PATCH v8 13/15] xen: make grant resource limits per domain Juergen Gross
2017-09-20 10:34   ` Jan Beulich [this message]
2017-09-20 14:37     ` Julien Grall
     [not found]   ` <59C2603C020000780017D561@suse.com>
2017-09-20 11:10     ` Juergen Gross
2017-09-20 11:48       ` Jan Beulich
     [not found]       ` <59C271B9020000780017D620@suse.com>
2017-09-20 12:44         ` Juergen Gross
2017-09-20 15:35           ` Jan Beulich
     [not found]           ` <59C2A6DE020000780017D874@suse.com>
2017-09-21  4:35             ` Juergen Gross
2017-09-21  6:15               ` Jan Beulich
     [not found]               ` <59C3751D020000780017DCB6@suse.com>
2017-09-21  7:53                 ` Juergen Gross
2017-09-21 11:31                   ` Jan Beulich
     [not found]                   ` <59C3BF28020000780017DE68@suse.com>
2017-09-21 11:39                     ` Juergen Gross
2017-09-21 11:48                       ` Jan Beulich
     [not found]                       ` <59C3C33E020000780017DEC3@suse.com>
2017-09-21 11:51                         ` Juergen Gross
2017-09-22  6:19                         ` Juergen Gross
2017-09-22  7:53                           ` Jan Beulich
     [not found]                           ` <59C4DD9B020000780017E575@suse.com>
2017-09-22  8:27                             ` Juergen Gross
2017-09-22  8:35                               ` Jan Beulich
     [not found]                               ` <59C4E78B020000780017E67D@suse.com>
2017-09-22  8:44                                 ` Juergen Gross
2017-09-22  8:51                                   ` Jan Beulich
2017-09-20  6:34 ` [PATCH v8 14/15] xen: make grant table limits boot parameters dom0 only Juergen Gross
2017-09-20 12:07   ` Jan Beulich
     [not found]   ` <59C27619020000780017D66F@suse.com>
2017-09-20 12:48     ` Juergen Gross
2017-09-20 15:36       ` Jan Beulich
     [not found]       ` <59C2A72D020000780017D881@suse.com>
2017-09-21  4:27         ` Juergen Gross
2017-09-21  6:16           ` Jan Beulich
2017-09-20  6:34 ` [PATCH v8 15/15] xen: add new Xen cpuid node for max address width info Juergen Gross
2017-09-20 12:18   ` Jan Beulich
     [not found]   ` <59C278A3020000780017D689@suse.com>
2017-09-20 12:58     ` Juergen Gross
2017-09-20 15:42       ` Jan Beulich
     [not found]       ` <59C2A880020000780017D8A2@suse.com>
2017-09-21  4:21         ` Juergen Gross
2017-09-20 13:00   ` Julien Grall

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=59C2603C020000780017D561@prv-mh.provo.novell.com \
    --to=jbeulich@suse.com \
    --cc=George.Dunlap@eu.citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=dgdegra@tycho.nsa.gov \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jgross@suse.com \
    --cc=julien.grall@arm.com \
    --cc=sstabellini@kernel.org \
    --cc=tim@xen.org \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.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.