From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755342AbcDGAJu (ORCPT ); Wed, 6 Apr 2016 20:09:50 -0400 Received: from mail.kernel.org ([198.145.29.136]:55526 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754627AbcDGAHA (ORCPT ); Wed, 6 Apr 2016 20:07:00 -0400 From: "Luis R. Rodriguez" To: bp@alien8.de, hpa@zytor.com, tglx@linutronix.de, mingo@redhat.com, rusty@rustcorp.com.au Cc: x86@kernel.org, linux-kernel@vger.kernel.org, luto@amacapital.net, boris.ostrovsky@oracle.com, david.vrabel@citrix.com, konrad.wilk@oracle.com, xen-devel@lists.xensource.com, lguest@lists.ozlabs.org, andriy.shevchenko@linux.intel.com, jlee@suse.com, glin@suse.com, matt@codeblueprint.co.uk, andrew.cooper3@citrix.com, "Luis R. Rodriguez" Subject: [PATCH v4 04/14] x86/rtc: replace paravirt rtc check with platform legacy quirk Date: Wed, 6 Apr 2016 17:06:24 -0700 Message-Id: <1459987594-5434-5-git-send-email-mcgrof@kernel.org> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1459987594-5434-1-git-send-email-mcgrof@kernel.org> References: <1459987594-5434-1-git-send-email-mcgrof@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We have 4 types of x86 platforms that disable RTC: * Intel MID * Lguest - uses paravirt * Xen dom-U - uses paravirt * x86 on legacy systems annotated with an ACPI legacy flag We can consolidate all of these into a platform specific legacy quirk set early in boot through i386_start_kernel() and through x86_64_start_reservations(). This deals with the RTC quirks which we can rely on through the hardware subarch, the ACPI check can be dealt with separately. v2: split the subarch check from the ACPI check, clarify on the ACPI change commit log why ordering works Suggested-by: Ingo Molnar Signed-off-by: Luis R. Rodriguez --- arch/x86/Makefile | 1 + arch/x86/include/asm/paravirt.h | 6 ------ arch/x86/include/asm/paravirt_types.h | 5 ----- arch/x86/include/asm/processor.h | 1 - arch/x86/include/asm/x86_init.h | 13 +++++++++++++ arch/x86/kernel/Makefile | 6 +++++- arch/x86/kernel/head32.c | 2 ++ arch/x86/kernel/head64.c | 1 + arch/x86/kernel/platform-quirks.c | 18 ++++++++++++++++++ arch/x86/kernel/rtc.c | 7 ++----- arch/x86/lguest/boot.c | 1 - arch/x86/xen/enlighten.c | 3 --- 12 files changed, 42 insertions(+), 22 deletions(-) create mode 100644 arch/x86/kernel/platform-quirks.c diff --git a/arch/x86/Makefile b/arch/x86/Makefile index 4086abca0b32..f9ed8a7ce2b6 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -209,6 +209,7 @@ endif head-y := arch/x86/kernel/head_$(BITS).o head-y += arch/x86/kernel/head$(BITS).o head-y += arch/x86/kernel/head.o +head-y += arch/x86/kernel/platform-quirks.o libs-y += arch/x86/lib/ diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index 601f1b8f9961..6c7a4a192032 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h @@ -20,12 +20,6 @@ static inline int paravirt_enabled(void) return pv_info.paravirt_enabled; } -static inline int paravirt_has_feature(unsigned int feature) -{ - WARN_ON_ONCE(!pv_info.paravirt_enabled); - return (pv_info.features & feature); -} - static inline void load_sp0(struct tss_struct *tss, struct thread_struct *thread) { diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h index e8c2326478c8..6acc1b26cf40 100644 --- a/arch/x86/include/asm/paravirt_types.h +++ b/arch/x86/include/asm/paravirt_types.h @@ -70,14 +70,9 @@ struct pv_info { #endif int paravirt_enabled; - unsigned int features; /* valid only if paravirt_enabled is set */ const char *name; }; -#define paravirt_has(x) paravirt_has_feature(PV_SUPPORTED_##x) -/* Supported features */ -#define PV_SUPPORTED_RTC (1<<0) - struct pv_init_ops { /* * Patch may replace one of the defined code sequences with diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index 9264476f3d57..0c70c7daa6b8 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h @@ -474,7 +474,6 @@ static inline unsigned long current_top_of_stack(void) #else #define __cpuid native_cpuid #define paravirt_enabled() 0 -#define paravirt_has(x) 0 static inline void load_sp0(struct tss_struct *tss, struct thread_struct *thread) diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h index 1ae89a2721d6..27d5c3fe5198 100644 --- a/arch/x86/include/asm/x86_init.h +++ b/arch/x86/include/asm/x86_init.h @@ -142,6 +142,15 @@ struct x86_cpuinit_ops { struct timespec; /** + * struct x86_legacy_features - legacy x86 features + * + * @rtc: this device has a CMOS real-time clock present + */ +struct x86_legacy_features { + int rtc; +}; + +/** * struct x86_platform_ops - platform specific runtime functions * @calibrate_tsc: calibrate TSC * @get_wallclock: get time from HW clock like RTC etc. @@ -152,6 +161,7 @@ struct timespec; * @save_sched_clock_state: save state for sched_clock() on suspend * @restore_sched_clock_state: restore state for sched_clock() on resume * @apic_post_init: adjust apic if neeeded + * @legacy: legacy features */ struct x86_platform_ops { unsigned long (*calibrate_tsc)(void); @@ -165,6 +175,7 @@ struct x86_platform_ops { void (*save_sched_clock_state)(void); void (*restore_sched_clock_state)(void); void (*apic_post_init)(void); + struct x86_legacy_features legacy; }; struct pci_dev; @@ -186,6 +197,8 @@ extern struct x86_cpuinit_ops x86_cpuinit; extern struct x86_platform_ops x86_platform; extern struct x86_msi_ops x86_msi; extern struct x86_io_apic_ops x86_io_apic_ops; + +extern void x86_early_init_platform_quirks(void); extern void x86_init_noop(void); extern void x86_init_uint_noop(unsigned int unused); diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 89f8ade0bc7c..7a9e44d935de 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -2,7 +2,11 @@ # Makefile for the linux kernel. # -extra-y := head_$(BITS).o head$(BITS).o head.o vmlinux.lds +extra-y := head_$(BITS).o +extra-y += head$(BITS).o +extra-y += head.o +extra-y += platform-quirks.o +extra-y += vmlinux.lds CPPFLAGS_vmlinux.lds += -U$(UTS_MACHINE) diff --git a/arch/x86/kernel/head32.c b/arch/x86/kernel/head32.c index 2911ef3a9f1c..d784bb547a9d 100644 --- a/arch/x86/kernel/head32.c +++ b/arch/x86/kernel/head32.c @@ -34,6 +34,8 @@ asmlinkage __visible void __init i386_start_kernel(void) cr4_init_shadow(); sanitize_boot_params(&boot_params); + x86_early_init_platform_quirks(); + /* Call the subarch specific early setup function */ switch (boot_params.hdr.hardware_subarch) { case X86_SUBARCH_INTEL_MID: diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c index 1f4422d5c8d0..b72fb0b71dd1 100644 --- a/arch/x86/kernel/head64.c +++ b/arch/x86/kernel/head64.c @@ -182,6 +182,7 @@ void __init x86_64_start_reservations(char *real_mode_data) if (!boot_params.hdr.version) copy_bootdata(__va(real_mode_data)); + x86_early_init_platform_quirks(); reserve_ebda_region(); switch (boot_params.hdr.hardware_subarch) { diff --git a/arch/x86/kernel/platform-quirks.c b/arch/x86/kernel/platform-quirks.c new file mode 100644 index 000000000000..1b114ac5996f --- /dev/null +++ b/arch/x86/kernel/platform-quirks.c @@ -0,0 +1,18 @@ +#include +#include + +#include +#include + +void __init x86_early_init_platform_quirks(void) +{ + x86_platform.legacy.rtc = 1; + + switch (boot_params.hdr.hardware_subarch) { + case X86_SUBARCH_XEN: + case X86_SUBARCH_LGUEST: + case X86_SUBARCH_INTEL_MID: + x86_platform.legacy.rtc = 0; + break; + } +} diff --git a/arch/x86/kernel/rtc.c b/arch/x86/kernel/rtc.c index 4af8d063fb36..62c48da3889d 100644 --- a/arch/x86/kernel/rtc.c +++ b/arch/x86/kernel/rtc.c @@ -14,6 +14,7 @@ #include #include #include +#include #ifdef CONFIG_X86_32 /* @@ -188,10 +189,6 @@ static __init int add_rtc_cmos(void) if (of_have_populated_dt()) return 0; - /* Intel MID platforms don't have ioport rtc */ - if (intel_mid_identify_cpu()) - return -ENODEV; - #ifdef CONFIG_ACPI if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_CMOS_RTC) { /* This warning can likely go away again in a year or two. */ @@ -200,7 +197,7 @@ static __init int add_rtc_cmos(void) } #endif - if (paravirt_enabled() && !paravirt_has(RTC)) + if (!x86_platform.legacy.rtc) return -ENODEV; platform_device_register(&rtc_device); diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index fd57d3ae7e16..f5497ee5fd2f 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c @@ -1414,7 +1414,6 @@ __init void lguest_init(void) pv_info.kernel_rpl = 1; /* Everyone except Xen runs with this set. */ pv_info.shared_kernel_pmd = 1; - pv_info.features = 0; /* * We set up all the lguest overrides for sensitive operations. These diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 40487f1ecb4c..7449f268d687 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c @@ -1192,7 +1192,6 @@ static const struct pv_info xen_info __initconst = { #ifdef CONFIG_X86_64 .extra_user_64bit_cs = FLAT_USER_CS64, #endif - .features = 0, .name = "Xen", }; @@ -1525,8 +1524,6 @@ asmlinkage __visible void __init xen_start_kernel(void) /* Install Xen paravirt ops */ pv_info = xen_info; - if (xen_initial_domain()) - pv_info.features |= PV_SUPPORTED_RTC; pv_init_ops = xen_init_ops; if (!xen_pvh_domain()) { pv_cpu_ops = xen_cpu_ops; -- 2.7.2 From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Luis R. Rodriguez" Subject: [PATCH v4 04/14] x86/rtc: replace paravirt rtc check with platform legacy quirk Date: Wed, 6 Apr 2016 17:06:24 -0700 Message-ID: <1459987594-5434-5-git-send-email-mcgrof@kernel.org> References: <1459987594-5434-1-git-send-email-mcgrof@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1459987594-5434-1-git-send-email-mcgrof@kernel.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: bp@alien8.de, hpa@zytor.com, tglx@linutronix.de, mingo@redhat.com, rusty@rustcorp.com.au Cc: xen-devel@lists.xensource.com, matt@codeblueprint.co.uk, andrew.cooper3@citrix.com, x86@kernel.org, linux-kernel@vger.kernel.org, luto@amacapital.net, jlee@suse.com, "Luis R. Rodriguez" , lguest@lists.ozlabs.org, glin@suse.com, david.vrabel@citrix.com, boris.ostrovsky@oracle.com, andriy.shevchenko@linux.intel.com List-Id: xen-devel@lists.xenproject.org V2UgaGF2ZSA0IHR5cGVzIG9mIHg4NiBwbGF0Zm9ybXMgdGhhdCBkaXNhYmxlIFJUQzoKCiAgKiBJ bnRlbCBNSUQKICAqIExndWVzdCAtIHVzZXMgcGFyYXZpcnQKICAqIFhlbiBkb20tVSAtIHVzZXMg cGFyYXZpcnQKICAqIHg4NiBvbiBsZWdhY3kgc3lzdGVtcyBhbm5vdGF0ZWQgd2l0aCBhbiBBQ1BJ IGxlZ2FjeSBmbGFnCgpXZSBjYW4gY29uc29saWRhdGUgYWxsIG9mIHRoZXNlIGludG8gYSBwbGF0 Zm9ybSBzcGVjaWZpYyBsZWdhY3kKcXVpcmsgc2V0IGVhcmx5IGluIGJvb3QgdGhyb3VnaCBpMzg2 X3N0YXJ0X2tlcm5lbCgpIGFuZCB0aHJvdWdoCng4Nl82NF9zdGFydF9yZXNlcnZhdGlvbnMoKS4g VGhpcyBkZWFscyB3aXRoIHRoZSBSVEMgcXVpcmtzIHdoaWNoCndlIGNhbiByZWx5IG9uIHRocm91 Z2ggdGhlIGhhcmR3YXJlIHN1YmFyY2gsIHRoZSBBQ1BJIGNoZWNrIGNhbgpiZSBkZWFsdCB3aXRo IHNlcGFyYXRlbHkuCgp2Mjogc3BsaXQgdGhlIHN1YmFyY2ggY2hlY2sgZnJvbSB0aGUgQUNQSSBj aGVjaywgY2xhcmlmeQogICAgb24gdGhlIEFDUEkgY2hhbmdlIGNvbW1pdCBsb2cgd2h5IG9yZGVy aW5nIHdvcmtzCgpTdWdnZXN0ZWQtYnk6IEluZ28gTW9sbmFyIDxtaW5nb0BrZXJuZWwub3JnPgpT aWduZWQtb2ZmLWJ5OiBMdWlzIFIuIFJvZHJpZ3VleiA8bWNncm9mQGtlcm5lbC5vcmc+Ci0tLQog YXJjaC94ODYvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIGFyY2gveDg2L2lu Y2x1ZGUvYXNtL3BhcmF2aXJ0LmggICAgICAgfCAgNiAtLS0tLS0KIGFyY2gveDg2L2luY2x1ZGUv YXNtL3BhcmF2aXJ0X3R5cGVzLmggfCAgNSAtLS0tLQogYXJjaC94ODYvaW5jbHVkZS9hc20vcHJv Y2Vzc29yLmggICAgICB8ICAxIC0KIGFyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggICAg ICAgfCAxMyArKysrKysrKysrKysrCiBhcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgICAgICAgICAg ICAgIHwgIDYgKysrKystCiBhcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMgICAgICAgICAgICAgIHwg IDIgKysKIGFyY2gveDg2L2tlcm5lbC9oZWFkNjQuYyAgICAgICAgICAgICAgfCAgMSArCiBhcmNo L3g4Ni9rZXJuZWwvcGxhdGZvcm0tcXVpcmtzLmMgICAgIHwgMTggKysrKysrKysrKysrKysrKysr CiBhcmNoL3g4Ni9rZXJuZWwvcnRjLmMgICAgICAgICAgICAgICAgIHwgIDcgKystLS0tLQogYXJj aC94ODYvbGd1ZXN0L2Jvb3QuYyAgICAgICAgICAgICAgICB8ICAxIC0KIGFyY2gveDg2L3hlbi9l bmxpZ2h0ZW4uYyAgICAgICAgICAgICAgfCAgMyAtLS0KIDEyIGZpbGVzIGNoYW5nZWQsIDQyIGlu c2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2 L2tlcm5lbC9wbGF0Zm9ybS1xdWlya3MuYwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L01ha2VmaWxl IGIvYXJjaC94ODYvTWFrZWZpbGUKaW5kZXggNDA4NmFiY2EwYjMyLi5mOWVkOGE3Y2UyYjYgMTAw NjQ0Ci0tLSBhL2FyY2gveDg2L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC0y MDksNiArMjA5LDcgQEAgZW5kaWYKIGhlYWQteSA6PSBhcmNoL3g4Ni9rZXJuZWwvaGVhZF8kKEJJ VFMpLm8KIGhlYWQteSArPSBhcmNoL3g4Ni9rZXJuZWwvaGVhZCQoQklUUykubwogaGVhZC15ICs9 IGFyY2gveDg2L2tlcm5lbC9oZWFkLm8KK2hlYWQteSArPSBhcmNoL3g4Ni9rZXJuZWwvcGxhdGZv cm0tcXVpcmtzLm8KIAogbGlicy15ICArPSBhcmNoL3g4Ni9saWIvCiAKZGlmZiAtLWdpdCBhL2Fy Y2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJh dmlydC5oCmluZGV4IDYwMWYxYjhmOTk2MS4uNmM3YTRhMTkyMDMyIDEwMDY0NAotLS0gYS9hcmNo L3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Bh cmF2aXJ0LmgKQEAgLTIwLDEyICsyMCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhcmF2aXJ0X2Vu YWJsZWQodm9pZCkKIAlyZXR1cm4gcHZfaW5mby5wYXJhdmlydF9lbmFibGVkOwogfQogCi1zdGF0 aWMgaW5saW5lIGludCBwYXJhdmlydF9oYXNfZmVhdHVyZSh1bnNpZ25lZCBpbnQgZmVhdHVyZSkK LXsKLQlXQVJOX09OX09OQ0UoIXB2X2luZm8ucGFyYXZpcnRfZW5hYmxlZCk7Ci0JcmV0dXJuIChw dl9pbmZvLmZlYXR1cmVzICYgZmVhdHVyZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2Fk X3NwMChzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzLAogCQkJICAgICBzdHJ1Y3QgdGhyZWFkX3N0cnVj dCAqdGhyZWFkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRf dHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKaW5kZXggZThj MjMyNjQ3OGM4Li42YWNjMWIyNmNmNDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNt L3BhcmF2aXJ0X3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlw ZXMuaApAQCAtNzAsMTQgKzcwLDkgQEAgc3RydWN0IHB2X2luZm8gewogI2VuZGlmCiAKIAlpbnQg cGFyYXZpcnRfZW5hYmxlZDsKLQl1bnNpZ25lZCBpbnQgZmVhdHVyZXM7CSAgLyogdmFsaWQgb25s eSBpZiBwYXJhdmlydF9lbmFibGVkIGlzIHNldCAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CiB9Owog Ci0jZGVmaW5lIHBhcmF2aXJ0X2hhcyh4KSBwYXJhdmlydF9oYXNfZmVhdHVyZShQVl9TVVBQT1JU RURfIyN4KQotLyogU3VwcG9ydGVkIGZlYXR1cmVzICovCi0jZGVmaW5lIFBWX1NVUFBPUlRFRF9S VEMgICAgICAgICgxPDwwKQotCiBzdHJ1Y3QgcHZfaW5pdF9vcHMgewogCS8qCiAJICogUGF0Y2gg bWF5IHJlcGxhY2Ugb25lIG9mIHRoZSBkZWZpbmVkIGNvZGUgc2VxdWVuY2VzIHdpdGgKZGlmZiAt LWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVk ZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggOTI2NDQ3NmYzZDU3Li4wYzcwYzdkYWE2YjggMTAwNjQ0 Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveDg2L2lu Y2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC00NzQsNyArNDc0LDYgQEAgc3RhdGljIGlubGluZSB1 bnNpZ25lZCBsb25nIGN1cnJlbnRfdG9wX29mX3N0YWNrKHZvaWQpCiAjZWxzZQogI2RlZmluZSBf X2NwdWlkCQkJbmF0aXZlX2NwdWlkCiAjZGVmaW5lIHBhcmF2aXJ0X2VuYWJsZWQoKQkwCi0jZGVm aW5lIHBhcmF2aXJ0X2hhcyh4KSAJMAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9zcDAoc3Ry dWN0IHRzc19zdHJ1Y3QgKnRzcywKIAkJCSAgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFk KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaCBiL2FyY2gveDg2 L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKaW5kZXggMWFlODlhMjcyMWQ2Li4yN2Q1YzNmZTUxOTgg MTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKKysrIGIvYXJjaC94 ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaApAQCAtMTQyLDYgKzE0MiwxNSBAQCBzdHJ1Y3QgeDg2 X2NwdWluaXRfb3BzIHsKIHN0cnVjdCB0aW1lc3BlYzsKIAogLyoqCisgKiBzdHJ1Y3QgeDg2X2xl Z2FjeV9mZWF0dXJlcyAtIGxlZ2FjeSB4ODYgZmVhdHVyZXMKKyAqCisgKiBAcnRjOiB0aGlzIGRl dmljZSBoYXMgYSBDTU9TIHJlYWwtdGltZSBjbG9jayBwcmVzZW50CisgKi8KK3N0cnVjdCB4ODZf bGVnYWN5X2ZlYXR1cmVzIHsKKwlpbnQgcnRjOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgeDg2X3Bs YXRmb3JtX29wcyAtIHBsYXRmb3JtIHNwZWNpZmljIHJ1bnRpbWUgZnVuY3Rpb25zCiAgKiBAY2Fs aWJyYXRlX3RzYzoJCWNhbGlicmF0ZSBUU0MKICAqIEBnZXRfd2FsbGNsb2NrOgkJZ2V0IHRpbWUg ZnJvbSBIVyBjbG9jayBsaWtlIFJUQyBldGMuCkBAIC0xNTIsNiArMTYxLDcgQEAgc3RydWN0IHRp bWVzcGVjOwogICogQHNhdmVfc2NoZWRfY2xvY2tfc3RhdGU6CXNhdmUgc3RhdGUgZm9yIHNjaGVk X2Nsb2NrKCkgb24gc3VzcGVuZAogICogQHJlc3RvcmVfc2NoZWRfY2xvY2tfc3RhdGU6CXJlc3Rv cmUgc3RhdGUgZm9yIHNjaGVkX2Nsb2NrKCkgb24gcmVzdW1lCiAgKiBAYXBpY19wb3N0X2luaXQ6 CQlhZGp1c3QgYXBpYyBpZiBuZWVlZGVkCisgKiBAbGVnYWN5OgkJCWxlZ2FjeSBmZWF0dXJlcwog ICovCiBzdHJ1Y3QgeDg2X3BsYXRmb3JtX29wcyB7CiAJdW5zaWduZWQgbG9uZyAoKmNhbGlicmF0 ZV90c2MpKHZvaWQpOwpAQCAtMTY1LDYgKzE3NSw3IEBAIHN0cnVjdCB4ODZfcGxhdGZvcm1fb3Bz IHsKIAl2b2lkICgqc2F2ZV9zY2hlZF9jbG9ja19zdGF0ZSkodm9pZCk7CiAJdm9pZCAoKnJlc3Rv cmVfc2NoZWRfY2xvY2tfc3RhdGUpKHZvaWQpOwogCXZvaWQgKCphcGljX3Bvc3RfaW5pdCkodm9p ZCk7CisJc3RydWN0IHg4Nl9sZWdhY3lfZmVhdHVyZXMgbGVnYWN5OwogfTsKIAogc3RydWN0IHBj aV9kZXY7CkBAIC0xODYsNiArMTk3LDggQEAgZXh0ZXJuIHN0cnVjdCB4ODZfY3B1aW5pdF9vcHMg eDg2X2NwdWluaXQ7CiBleHRlcm4gc3RydWN0IHg4Nl9wbGF0Zm9ybV9vcHMgeDg2X3BsYXRmb3Jt OwogZXh0ZXJuIHN0cnVjdCB4ODZfbXNpX29wcyB4ODZfbXNpOwogZXh0ZXJuIHN0cnVjdCB4ODZf aW9fYXBpY19vcHMgeDg2X2lvX2FwaWNfb3BzOworCitleHRlcm4gdm9pZCB4ODZfZWFybHlfaW5p dF9wbGF0Zm9ybV9xdWlya3Modm9pZCk7CiBleHRlcm4gdm9pZCB4ODZfaW5pdF9ub29wKHZvaWQp OwogZXh0ZXJuIHZvaWQgeDg2X2luaXRfdWludF9ub29wKHVuc2lnbmVkIGludCB1bnVzZWQpOwog CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwv TWFrZWZpbGUKaW5kZXggODlmOGFkZTBiYzdjLi43YTllNDRkOTM1ZGUgMTAwNjQ0Ci0tLSBhL2Fy Y2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAg LTIsNyArMiwxMSBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KICMKIAotZXh0 cmEteSAgICAgICAgICAgICAgICA6PSBoZWFkXyQoQklUUykubyBoZWFkJChCSVRTKS5vIGhlYWQu byB2bWxpbnV4LmxkcworZXh0cmEteQk6PSBoZWFkXyQoQklUUykubworZXh0cmEteQkrPSBoZWFk JChCSVRTKS5vCitleHRyYS15CSs9IGhlYWQubworZXh0cmEteQkrPSBwbGF0Zm9ybS1xdWlya3Mu bworZXh0cmEteQkrPSB2bWxpbnV4LmxkcwogCiBDUFBGTEFHU192bWxpbnV4LmxkcyArPSAtVSQo VVRTX01BQ0hJTkUpCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYyBiL2Fy Y2gveDg2L2tlcm5lbC9oZWFkMzIuYwppbmRleCAyOTExZWYzYTlmMWMuLmQ3ODRiYjU0N2E5ZCAx MDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCisrKyBiL2FyY2gveDg2L2tlcm5l bC9oZWFkMzIuYwpAQCAtMzQsNiArMzQsOCBAQCBhc21saW5rYWdlIF9fdmlzaWJsZSB2b2lkIF9f aW5pdCBpMzg2X3N0YXJ0X2tlcm5lbCh2b2lkKQogCWNyNF9pbml0X3NoYWRvdygpOwogCXNhbml0 aXplX2Jvb3RfcGFyYW1zKCZib290X3BhcmFtcyk7CiAKKwl4ODZfZWFybHlfaW5pdF9wbGF0Zm9y bV9xdWlya3MoKTsKKwogCS8qIENhbGwgdGhlIHN1YmFyY2ggc3BlY2lmaWMgZWFybHkgc2V0dXAg ZnVuY3Rpb24gKi8KIAlzd2l0Y2ggKGJvb3RfcGFyYW1zLmhkci5oYXJkd2FyZV9zdWJhcmNoKSB7 CiAJY2FzZSBYODZfU1VCQVJDSF9JTlRFTF9NSUQ6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJu ZWwvaGVhZDY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKaW5kZXggMWY0NDIyZDVjOGQw Li5iNzJmYjBiNzFkZDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYworKysg Yi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKQEAgLTE4Miw2ICsxODIsNyBAQCB2b2lkIF9faW5p dCB4ODZfNjRfc3RhcnRfcmVzZXJ2YXRpb25zKGNoYXIgKnJlYWxfbW9kZV9kYXRhKQogCWlmICgh Ym9vdF9wYXJhbXMuaGRyLnZlcnNpb24pCiAJCWNvcHlfYm9vdGRhdGEoX192YShyZWFsX21vZGVf ZGF0YSkpOwogCisJeDg2X2Vhcmx5X2luaXRfcGxhdGZvcm1fcXVpcmtzKCk7CiAJcmVzZXJ2ZV9l YmRhX3JlZ2lvbigpOwogCiAJc3dpdGNoIChib290X3BhcmFtcy5oZHIuaGFyZHdhcmVfc3ViYXJj aCkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BsYXRmb3JtLXF1aXJrcy5jIGIvYXJj aC94ODYva2VybmVsL3BsYXRmb3JtLXF1aXJrcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uMWIxMTRhYzU5OTZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYv a2VybmVsL3BsYXRmb3JtLXF1aXJrcy5jCkBAIC0wLDAgKzEsMTggQEAKKyNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vc2V0 dXAuaD4KKyNpbmNsdWRlIDxhc20vYmlvc19lYmRhLmg+CisKK3ZvaWQgX19pbml0IHg4Nl9lYXJs eV9pbml0X3BsYXRmb3JtX3F1aXJrcyh2b2lkKQoreworCXg4Nl9wbGF0Zm9ybS5sZWdhY3kucnRj ID0gMTsKKworCXN3aXRjaCAoYm9vdF9wYXJhbXMuaGRyLmhhcmR3YXJlX3N1YmFyY2gpIHsKKwlj YXNlIFg4Nl9TVUJBUkNIX1hFTjoKKwljYXNlIFg4Nl9TVUJBUkNIX0xHVUVTVDoKKwljYXNlIFg4 Nl9TVUJBUkNIX0lOVEVMX01JRDoKKwkJeDg2X3BsYXRmb3JtLmxlZ2FjeS5ydGMgPSAwOworCQli cmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMgYi9hcmNoL3g4 Ni9rZXJuZWwvcnRjLmMKaW5kZXggNGFmOGQwNjNmYjM2Li42MmM0OGRhMzg4OWQgMTAwNjQ0Ci0t LSBhL2FyY2gveDg2L2tlcm5lbC9ydGMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKQEAg LTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pbnRl bC1taWQuaD4KICNpbmNsdWRlIDxhc20vcnRjLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAK ICNpZmRlZiBDT05GSUdfWDg2XzMyCiAvKgpAQCAtMTg4LDEwICsxODksNiBAQCBzdGF0aWMgX19p bml0IGludCBhZGRfcnRjX2Ntb3Modm9pZCkKIAlpZiAob2ZfaGF2ZV9wb3B1bGF0ZWRfZHQoKSkK IAkJcmV0dXJuIDA7CiAKLQkvKiBJbnRlbCBNSUQgcGxhdGZvcm1zIGRvbid0IGhhdmUgaW9wb3J0 IHJ0YyAqLwotCWlmIChpbnRlbF9taWRfaWRlbnRpZnlfY3B1KCkpCi0JCXJldHVybiAtRU5PREVW OwotCiAjaWZkZWYgQ09ORklHX0FDUEkKIAlpZiAoYWNwaV9nYmxfRkFEVC5ib290X2ZsYWdzICYg QUNQSV9GQURUX05PX0NNT1NfUlRDKSB7CiAJCS8qIFRoaXMgd2FybmluZyBjYW4gbGlrZWx5IGdv IGF3YXkgYWdhaW4gaW4gYSB5ZWFyIG9yIHR3by4gKi8KQEAgLTIwMCw3ICsxOTcsNyBAQCBzdGF0 aWMgX19pbml0IGludCBhZGRfcnRjX2Ntb3Modm9pZCkKIAl9CiAjZW5kaWYKIAotCWlmIChwYXJh dmlydF9lbmFibGVkKCkgJiYgIXBhcmF2aXJ0X2hhcyhSVEMpKQorCWlmICgheDg2X3BsYXRmb3Jt LmxlZ2FjeS5ydGMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lz dGVyKCZydGNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xndWVzdC9ib290LmMgYi9h cmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCmluZGV4IGZkNTdkM2FlN2UxNi4uZjU0OTdlZTVmZDJmIDEw MDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCisrKyBiL2FyY2gveDg2L2xndWVzdC9i b290LmMKQEAgLTE0MTQsNyArMTQxNCw2IEBAIF9faW5pdCB2b2lkIGxndWVzdF9pbml0KHZvaWQp CiAJcHZfaW5mby5rZXJuZWxfcnBsID0gMTsKIAkvKiBFdmVyeW9uZSBleGNlcHQgWGVuIHJ1bnMg d2l0aCB0aGlzIHNldC4gKi8KIAlwdl9pbmZvLnNoYXJlZF9rZXJuZWxfcG1kID0gMTsKLQlwdl9p bmZvLmZlYXR1cmVzID0gMDsKIAogCS8qCiAJICogV2Ugc2V0IHVwIGFsbCB0aGUgbGd1ZXN0IG92 ZXJyaWRlcyBmb3Igc2Vuc2l0aXZlIG9wZXJhdGlvbnMuICBUaGVzZQpkaWZmIC0tZ2l0IGEvYXJj aC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IDQw NDg3ZjFlY2I0Yy4uNzQ0OWYyNjhkNjg3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdo dGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC0xMTkyLDcgKzExOTIsNiBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2luZm8geGVuX2luZm8gX19pbml0Y29uc3QgPSB7CiAj aWZkZWYgQ09ORklHX1g4Nl82NAogCS5leHRyYV91c2VyXzY0Yml0X2NzID0gRkxBVF9VU0VSX0NT NjQsCiAjZW5kaWYKLQkuZmVhdHVyZXMgPSAwLAogCS5uYW1lID0gIlhlbiIsCiB9OwogCkBAIC0x NTI1LDggKzE1MjQsNiBAQCBhc21saW5rYWdlIF9fdmlzaWJsZSB2b2lkIF9faW5pdCB4ZW5fc3Rh cnRfa2VybmVsKHZvaWQpCiAKIAkvKiBJbnN0YWxsIFhlbiBwYXJhdmlydCBvcHMgKi8KIAlwdl9p bmZvID0geGVuX2luZm87Ci0JaWYgKHhlbl9pbml0aWFsX2RvbWFpbigpKQotCQlwdl9pbmZvLmZl YXR1cmVzIHw9IFBWX1NVUFBPUlRFRF9SVEM7CiAJcHZfaW5pdF9vcHMgPSB4ZW5faW5pdF9vcHM7 CiAJaWYgKCF4ZW5fcHZoX2RvbWFpbigpKSB7CiAJCXB2X2NwdV9vcHMgPSB4ZW5fY3B1X29wczsK LS0gCjIuNy4yCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8v bGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK