From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: Roman Kagan <rkagan@virtuozzo.com>,
"K. Y. Srinivasan" <kys@microsoft.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
Stephen Hemminger <sthemmin@microsoft.com>,
"Michael Kelley \(EOSG\)" <Michael.H.Kelley@microsoft.com>
Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Radim Krčmář" <rkrcmar@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"x86@kernel.org" <x86@kernel.org>
Subject: Re: [PATCH v2 1/4] x86/hyper-v: move synic/stimer control structures definitions to hyperv-tlfs.h
Date: Tue, 27 Nov 2018 14:10:49 +0100 [thread overview]
Message-ID: <87wooyk6na.fsf@vitty.brq.redhat.com> (raw)
In-Reply-To: <20181126200413.GA7852@rkaganb.sw.ru>
Roman Kagan <rkagan@virtuozzo.com> writes:
> [ Sorry for having missed v1 ]
>
> On Mon, Nov 26, 2018 at 04:47:29PM +0100, Vitaly Kuznetsov wrote:
>> We implement Hyper-V SynIC and synthetic timers in KVM too so there's some
>> room for code sharing.
>>
>> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
>> ---
>> arch/x86/include/asm/hyperv-tlfs.h | 69 ++++++++++++++++++++++++++++++
>> drivers/hv/hv.c | 2 +-
>> drivers/hv/hyperv_vmbus.h | 68 -----------------------------
>> 3 files changed, 70 insertions(+), 69 deletions(-)
>>
>> diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h
>> index 4139f7650fe5..b032c05cd3ee 100644
>> --- a/arch/x86/include/asm/hyperv-tlfs.h
>> +++ b/arch/x86/include/asm/hyperv-tlfs.h
>> @@ -731,6 +731,75 @@ struct hv_enlightened_vmcs {
>> #define HV_STIMER_AUTOENABLE (1ULL << 3)
>> #define HV_STIMER_SINT(config) (__u8)(((config) >> 16) & 0x0F)
>>
>> +/* Define synthetic interrupt controller flag constants. */
>> +#define HV_EVENT_FLAGS_COUNT (256 * 8)
>> +#define HV_EVENT_FLAGS_LONG_COUNT (256 / sizeof(unsigned long))
>> +
>> +/*
>> + * Synthetic timer configuration.
>> + */
>> +union hv_stimer_config {
>> + u64 as_uint64;
>> + struct {
>> + u64 enable:1;
>> + u64 periodic:1;
>> + u64 lazy:1;
>> + u64 auto_enable:1;
>> + u64 apic_vector:8;
>> + u64 direct_mode:1;
>> + u64 reserved_z0:3;
>> + u64 sintx:4;
>> + u64 reserved_z1:44;
>> + };
>> +};
>> +
>> +
>> +/* Define the synthetic interrupt controller event flags format. */
>> +union hv_synic_event_flags {
>> + unsigned long flags[HV_EVENT_FLAGS_LONG_COUNT];
>> +};
>> +
>> +/* Define SynIC control register. */
>> +union hv_synic_scontrol {
>> + u64 as_uint64;
>> + struct {
>> + u64 enable:1;
>> + u64 reserved:63;
>> + };
>> +};
>> +
>> +/* Define synthetic interrupt source. */
>> +union hv_synic_sint {
>> + u64 as_uint64;
>> + struct {
>> + u64 vector:8;
>> + u64 reserved1:8;
>> + u64 masked:1;
>> + u64 auto_eoi:1;
>> + u64 reserved2:46;
>> + };
>> +};
>> +
>> +/* Define the format of the SIMP register */
>> +union hv_synic_simp {
>> + u64 as_uint64;
>> + struct {
>> + u64 simp_enabled:1;
>> + u64 preserved:11;
>> + u64 base_simp_gpa:52;
>> + };
>> +};
>> +
>> +/* Define the format of the SIEFP register */
>> +union hv_synic_siefp {
>> + u64 as_uint64;
>> + struct {
>> + u64 siefp_enabled:1;
>> + u64 preserved:11;
>> + u64 base_siefp_gpa:52;
>> + };
>> +};
>> +
>> struct hv_vpset {
>> u64 format;
>> u64 valid_bank_mask;
>
> I personally tend to prefer masks over bitfields, so I'd rather do the
> consolidation in the opposite direction: use the definitions in
> hyperv-tlfs.h and replace those unions/bitfields elsewhere. (I vaguely
> remember posting such a patchset a couple of years ago but I lacked the
> motivation to complete it).
Are there any known advantages of using masks over bitfields or the
resulting binary code is the same? Assuming there are no I'd personally
prefer bitfields - not sure why but to me e.g.
(stimer->config.enabled && !stimer->config.direct_mode)
looks nicer than
(stimer->config & HV_STIMER_ENABLED && !(stimer->config & HV_STIMER_DIRECT))
+ there's no need to do shifts, e.g.
vector = stimer->config.apic_vector
looks cleaner that
vector = (stimer->config & HV_STIMER_APICVECTOR_MASK) >> HV_STIMER_APICVECTOR_SHIFT
... and we already use a few in hyperv-tlfs.h. I'm, however, flexible :-)
K. Y., Michael, Haiyang, Stephen - would you prefer to get rid of all
bitfields from hyperv-tlfs.h? If so I can work on a patchset. As to this
series, my understanding is that Paolo already queued it so in any case
this is going to be a separate effort (unless there are strong
objections of course).
Thanks!
--
Vitaly
next prev parent reply other threads:[~2018-11-27 13:10 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-26 15:47 [PATCH v2 0/4] x86/kvm/hyper-v: Implement Direct Mode for synthetic timers Vitaly Kuznetsov
2018-11-26 15:47 ` [PATCH v2 1/4] x86/hyper-v: move synic/stimer control structures definitions to hyperv-tlfs.h Vitaly Kuznetsov
2018-11-26 17:00 ` Michael Kelley
2018-11-26 20:04 ` Roman Kagan
2018-11-27 13:10 ` Vitaly Kuznetsov [this message]
2018-11-27 15:52 ` Michael Kelley
2018-11-27 16:32 ` Vitaly Kuznetsov
2018-11-27 18:48 ` Roman Kagan
2018-11-28 1:49 ` Nadav Amit
2018-11-28 10:37 ` Vitaly Kuznetsov
2018-11-28 13:07 ` Thomas Gleixner
2018-11-28 17:55 ` Nadav Amit
2018-11-29 11:36 ` Vitaly Kuznetsov
2018-11-29 19:22 ` Thomas Gleixner
2018-11-29 7:52 ` Roman Kagan
2018-11-28 8:40 ` Paolo Bonzini
2018-11-26 15:47 ` [PATCH v2 2/4] x86/kvm/hyper-v: use stimer config definition from hyperv-tlfs.h Vitaly Kuznetsov
2018-11-26 15:47 ` [PATCH v2 3/4] x86/kvm/hyper-v: direct mode for synthetic timers Vitaly Kuznetsov
2018-11-26 16:44 ` Paolo Bonzini
2018-11-26 17:14 ` Vitaly Kuznetsov
2018-11-27 8:37 ` Roman Kagan
2018-11-27 13:54 ` Paolo Bonzini
2018-11-27 19:05 ` Roman Kagan
2018-11-28 8:43 ` Paolo Bonzini
2018-11-27 8:21 ` Roman Kagan
2018-12-03 17:12 ` Roman Kagan
2018-12-04 12:36 ` Vitaly Kuznetsov
2018-12-10 12:06 ` Roman Kagan
2018-12-10 12:54 ` Vitaly Kuznetsov
2018-12-10 13:21 ` Roman Kagan
2018-12-10 14:53 ` Vitaly Kuznetsov
2018-11-26 15:47 ` [PATCH v2 4/4] x86/kvm/hyper-v: avoid open-coding stimer_mark_pending() in kvm_hv_notify_acked_sint() Vitaly Kuznetsov
2018-11-26 16:45 ` Paolo Bonzini
2018-11-27 8:49 ` Roman Kagan
2018-11-26 16:45 ` [PATCH v2 0/4] x86/kvm/hyper-v: Implement Direct Mode for synthetic timers Paolo Bonzini
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=87wooyk6na.fsf@vitty.brq.redhat.com \
--to=vkuznets@redhat.com \
--cc=Michael.H.Kelley@microsoft.com \
--cc=haiyangz@microsoft.com \
--cc=kvm@vger.kernel.org \
--cc=kys@microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=rkagan@virtuozzo.com \
--cc=rkrcmar@redhat.com \
--cc=sthemmin@microsoft.com \
--cc=x86@kernel.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.