On Mon, 3 Apr 2017, Vikas Shivappa wrote:
>  
>  /**
> + * struct rdt_domain - group of cpus sharing an RDT resource
> + * @list:    all instances of this resource
> + * @id:              unique id for this instance
> + * @cpu_mask:        which cpus share this resource
> + * @ctrl_val:        array of cache or mem ctrl values (indexed by CLOSID)
> + * @new_cbm: new cbm value to be loaded
> + * @have_new_cbm: did user provide new_cbm for this domain

The version which you removed below has the kernel-doc comments correct ....

> +/**
>   * struct rdt_resource - attributes of an RDT resource
>   * @enabled:                 Is this feature enabled on this machine
>   * @capable:                 Is this feature available on this machine
> @@ -78,6 +109,16 @@ struct rftype {
>   * @data_width:              Character width of data when displaying
>   * @min_cbm_bits:            Minimum number of consecutive bits to be set
>   *                           in a cache bit mask
> + * @msr_update:              Function pointer to update QOS MSRs
> + * @max_delay:                       Max throttle delay. Delay is the 
> hardware
> + *                           understandable value for memory bandwidth.
> + * @min_bw:                  Minimum memory bandwidth percentage user
> + *                           can request
> + * @bw_gran:                 Granularity at which the memory bandwidth
> + *                           is allocated
> + * @delay_linear:            True if memory b/w delay is in linear scale
> + * @mb_map:                  Mapping of memory b/w percentage to
> + *                           memory b/w delay values
>   * @domains:                 All domains for this resource
>   * @msr_base:                        Base MSR address for CBMs
>   * @cache_level:             Which cache level defines scope of this domain
> @@ -94,6 +135,14 @@ struct rdt_resource {
>       int                     min_cbm_bits;
>       u32                     default_ctrl;
>       int                     data_width;
> +     void (*msr_update)      (struct rdt_domain *d, struct msr_param *m,
> +                              struct rdt_resource *r);
> +     u32                     max_delay;
> +     u32                     min_bw;
> +     u32                     bw_gran;
> +     u32                     delay_linear;
> +     u32                     *mb_map;

I don't know what other weird controls will be added over time, but we are
probably better off to have

struct cache_ctrl {
        int             cbm_len;
        int             min_cbm_bits;
};

struct mba_ctrl {
        u32                     max_delay;
        u32                     min_bw;
        u32                     bw_gran;
        u32                     delay_linear;
        u32                     *mb_map;
};

and in then in struct rdt_resource:

       <common fields>
       union {
                struct cache_ctrl       foo;
                struct mba_ctrl         bla;
        } ctrl;


That avoids that rdt_resource becomes a hodgepodge of unrelated or even
contradicting fields.

Hmm?

Thanks,

        tglx

Reply via email to