From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Wei Wang <wei.w.wang@intel.com>,
jbeulich@suse.com, xen-devel@lists.xen.org
Subject: Re: [PATCH v5 1/9] x86/intel_pstate: add some calculation related support
Date: Thu, 17 Sep 2015 16:19:59 +0100 [thread overview]
Message-ID: <55FADA1F.8020703@citrix.com> (raw)
In-Reply-To: <1442197930-3738-2-git-send-email-wei.w.wang@intel.com>
On 14/09/15 03:32, Wei Wang wrote:
> The added calculation related functions will be used in the intel_pstate.c.
> They are copied from the Linux kernel(commit 2418f4f2, f3002134, eb18cba7).
>
> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
> ---
> xen/arch/x86/oprofile/op_model_athlon.c | 9 ----
> xen/include/asm-x86/div64.h | 79 +++++++++++++++++++++++++++++++++
> xen/include/xen/kernel.h | 23 ++++++++++
> 3 files changed, 102 insertions(+), 9 deletions(-)
>
> changes in v5:
> 1) add clamp(), a type checking variant of clamp_t();
> 2) remove the private copy of clamp() in op_model_athlon.c.
>
> diff --git a/xen/arch/x86/oprofile/op_model_athlon.c b/xen/arch/x86/oprofile/op_model_athlon.c
> index c0a81ed..4122eee 100644
> --- a/xen/arch/x86/oprofile/op_model_athlon.c
> +++ b/xen/arch/x86/oprofile/op_model_athlon.c
> @@ -103,15 +103,6 @@ static u64 ibs_op_ctl;
> #define IBS_FETCH_CODE 13
> #define IBS_OP_CODE 14
>
> -#define clamp(val, min, max) ({ \
> - typeof(val) __val = (val); \
> - typeof(min) __min = (min); \
> - typeof(max) __max = (max); \
> - (void) (&__val == &__min); \
> - (void) (&__val == &__max); \
> - __val = __val < __min ? __min: __val; \
> - __val > __max ? __max: __val; })
> -
> /*
> * 16-bit Linear Feedback Shift Register (LFSR)
> */
> diff --git a/xen/include/asm-x86/div64.h b/xen/include/asm-x86/div64.h
> index dd49f64..6ba03cb 100644
> --- a/xen/include/asm-x86/div64.h
> +++ b/xen/include/asm-x86/div64.h
> @@ -11,4 +11,83 @@
> __rem; \
> })
>
Comment to explain the functionality?
> +static inline uint64_t div_u64_rem(uint64_t dividend, uint32_t divisor,
> + uint32_t *remainder)
Alignment
> +{
> + *remainder = do_div(dividend, divisor);
> + return dividend;
> +}
> +
> +static inline uint64_t div_u64(uint64_t dividend, uint32_t divisor)
> +
> +/**
> * container_of - cast a member of a structure out to the containing structure
> *
> * @ptr: the pointer to the member.
Too many spaces before "divisor"
> +{
> + uint32_t remainder;
> +
> + return div_u64_rem(dividend, divisor, &remainder);
> +}
> +
> +/*
> + * div64_u64 - unsigned 64bit divide with 64bit divisor
> + * @dividend: 64bit dividend
> + * @divisor: 64bit divisor
Alignment also looks wonky here.
> + *
> + * This implementation is a modified version of the algorithm proposed
> + * by the book 'Hacker's Delight'. The original source and full proof
> + * can be found here and is available for use without restriction.
> + *
> + * 'http://www.hackersdelight.org/HDcode/newCode/divDouble.c.txt'
> + */
> +static inline uint64_t div64_u64(uint64_t dividend, uint64_t divisor)
> +{
> + uint32_t high = divisor >> 32;
> + uint64_t quot;
> +
> + if ( high == 0 )
> + quot = div_u64(dividend, divisor);
> + else
> + {
> + int n = 1 + fls(high);
> +
> + quot = div_u64(dividend >> n, divisor >> n);
> +
> + if ( quot != 0 )
> + quot--;
> + if ( (dividend - quot * divisor) >= divisor )
> + quot++;
> + }
> + return quot;
> +}
> +
Comment?
> +static inline int64_t div_s64_rem(int64_t dividend, int32_t divisor,
> + int32_t *remainder)
Alignment.
> +{
> + int64_t quotient;
> +
> + if ( dividend < 0 )
> + {
> + quotient = div_u64_rem(-dividend, ABS(divisor),
> + (uint32_t *)remainder);
Alignment.
> + *remainder = -*remainder;
> + if ( divisor > 0 )
> + quotient = -quotient;
> + }
> + else
> + {
> + quotient = div_u64_rem(dividend, ABS(divisor),
> + (uint32_t *)remainder);
Alignment.
> + if ( divisor < 0 )
> + quotient = -quotient;
> + }
> + return quotient;
> +}
> +
> +/*
> + * div_s64 - signed 64bit divide with 32bit divisor
> + */
> +static inline int64_t div_s64(int64_t dividend, int32_t divisor)
> +{
> + int32_t remainder;
> +
> + return div_s64_rem(dividend, divisor, &remainder);
> +}
> +
> #endif
> diff --git a/xen/include/xen/kernel.h b/xen/include/xen/kernel.h
> index 548b64d..9812698 100644
> --- a/xen/include/xen/kernel.h
> +++ b/xen/include/xen/kernel.h
> @@ -43,6 +43,29 @@
> #define MAX(x,y) ((x) > (y) ? (x) : (y))
>
> /**
> + * clamp - return a value clamped to a given range with strict typechecking
> + * @val: current value
> + * @lo: lowest allowable value
> + * @hi: highest allowable value
> + *
> + * This macro does strict typechecking of lo/hi to make sure they are of the
> + * same type as val. See the unnecessary pointer comparisons.
> + */
> +#define clamp(val, lo, hi) min((typeof(val))max(val, lo), hi)
This is a change of behaviour from the clamp() you removed, as this now
evaluates its arguments multiple times.
Please use a ({ }) style macro to avoid evaluating the arguments
multiple times.
> +
> +/*
> + * clamp_t - return a value clamped to a given range using a given type
> + * @type: the type of variable to use
> + * @val: current value
> + * @lo: minimum allowable value
> + * @hi: maximum allowable value
> + *
> + * This macro does no typechecking and uses temporary variables of type
> + * 'type' to make all the comparisons.
> + */
> +#define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi)
And here as well please.
~Andrew
next prev parent reply other threads:[~2015-09-17 15:19 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-14 2:32 [PATCH v5 0/9] Porting the intel_pstate driver to Xen Wei Wang
2015-09-14 2:32 ` [PATCH v5 1/9] x86/intel_pstate: add some calculation related support Wei Wang
2015-09-17 15:19 ` Andrew Cooper [this message]
2015-10-05 16:00 ` Jan Beulich
2015-09-14 2:32 ` [PATCH v5 2/9] x86/intel_pstate: APERF/MPERF feature detect Wei Wang
2015-09-17 15:26 ` Andrew Cooper
2015-10-05 16:14 ` Jan Beulich
2015-09-14 2:32 ` [PATCH v5 3/9] x86/intel_pstate: add a new driver interface, setpolicy() Wei Wang
2015-09-17 15:34 ` Andrew Cooper
2015-10-06 15:37 ` Jan Beulich
2015-09-14 2:32 ` [PATCH v5 4/9] x86/intel_pstate: relocate the driver register function Wei Wang
2015-09-17 15:38 ` Andrew Cooper
2015-09-21 13:13 ` Jan Beulich
2015-10-07 15:08 ` Jan Beulich
2015-09-14 2:32 ` [PATCH v5 5/9] x86/intel_pstate: changes in cpufreq_del_cpu for CPU offline Wei Wang
2015-09-17 15:43 ` Andrew Cooper
2015-10-07 15:28 ` Jan Beulich
2015-10-11 2:19 ` Wang, Wei W
2015-09-14 2:32 ` [PATCH v5 6/9] x86/intel_pstate: the main boby of the intel_pstate driver Wei Wang
2015-09-17 15:51 ` Andrew Cooper
2015-10-07 15:39 ` Jan Beulich
2015-09-14 2:32 ` [PATCH v5 7/9] x86/intel_pstate: add a booting param to select the driver to load Wei Wang
2015-09-17 16:08 ` Andrew Cooper
2015-09-21 13:15 ` Jan Beulich
2015-10-07 15:46 ` Jan Beulich
2015-10-23 8:09 ` Wang, Wei W
2015-10-23 8:16 ` Wang, Wei W
2015-10-23 8:18 ` Wang, Wei W
2015-10-23 8:35 ` Jan Beulich
2015-10-23 8:48 ` Wang, Wei W
2015-09-14 2:32 ` [PATCH v5 8/9] x86/intel_pstate: support the use of intel_pstate in pmstat.c Wei Wang
2015-10-07 16:10 ` Jan Beulich
2015-10-26 6:26 ` Wang, Wei W
2015-10-26 7:02 ` Jan Beulich
2015-10-26 7:59 ` Wang, Wei W
2015-10-26 9:40 ` Jan Beulich
2015-10-26 9:48 ` Wang, Wei W
2015-10-26 9:53 ` Jan Beulich
2015-10-26 10:19 ` Wang, Wei W
2015-10-26 10:35 ` Jan Beulich
2015-10-26 10:45 ` Wang, Wei W
2015-10-26 10:51 ` Jan Beulich
2015-10-26 11:03 ` Wang, Wei W
2015-09-14 2:32 ` [PATCH v5 9/9] tools: enable xenpm to control the intel_pstate driver Wei Wang
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=55FADA1F.8020703@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=jbeulich@suse.com \
--cc=wei.w.wang@intel.com \
--cc=xen-devel@lists.xen.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.