Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1273903 > unrolled thread

[V5 PATCH 4/4] x86/apic: Introduce apic_extnmi boot option

Started byHidehiro Kawai <hidehiro.kawai.ez@hitachi.com>
First post2015-11-20 10:50 +0100
Last post2015-11-25 16:40 +0100
Articles 3 — 3 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [V5 PATCH 4/4] x86/apic: Introduce apic_extnmi boot option Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com> - 2015-11-20 10:50 +0100
    Re: [V5 PATCH 4/4] x86/apic: Introduce apic_extnmi boot option Borislav Petkov <bp@alien8.de> - 2015-11-25 12:50 +0100
      RE: [V5 PATCH 4/4] x86/apic: Introduce apic_extnmi boot option 河合英宏 / KAWAI,HIDEHIRO   <hidehiro.kawai.ez@hitachi.com> - 2015-11-25 16:40 +0100

#1273903 — [V5 PATCH 4/4] x86/apic: Introduce apic_extnmi boot option

FromHidehiro Kawai <hidehiro.kawai.ez@hitachi.com>
Date2015-11-20 10:50 +0100
Subject[V5 PATCH 4/4] x86/apic: Introduce apic_extnmi boot option
Message-ID<qwQum-5rq-17@gated-at.bofh.it>
This patch introduces new boot option, apic_extnmi:

 apic_extnmi={ bsp | all | none}

The default value is "bsp" and this is the current behavior; only
BSP receives external NMI.  "all" allows external NMIs to be
broadcast to all CPUs.  This would raise the success rate of panic
on NMI when BSP hangs up in NMI context or the external NMI is
swallowed by other NMI handlers on BSP.  If you specified "none",
any CPUs don't receive external NMIs.  This is useful for dump
capture kernel so that it wouldn't be shot down while saving a
crash dump.

V5:
- Rename the option from "noextnmi" to "apic_extnmi"
- Add apic_extnmi=all feature
- Fix the wrong documentation about "noextnmi" (apic_extnmi=none)

Signed-off-by: Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Jonathan Corbet <corbet@lwn.net>
---
 Documentation/kernel-parameters.txt |    9 +++++++++
 arch/x86/include/asm/apic.h         |    5 +++++
 arch/x86/kernel/apic/apic.c         |   31 ++++++++++++++++++++++++++++++-
 3 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index f8aae63..ceed3bc 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -472,6 +472,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
 			Change the amount of debugging information output
 			when initialising the APIC and IO-APIC components.
 
+	apic_extnmi=	[APIC,X86] External NMI delivery setting
+			Format: { bsp (default) | all | none }
+			bsp:  External NMI is delivered to only CPU 0
+			all:  External NMIs are broadcast to all CPUs as a
+			      backup of CPU 0
+			none: External NMI is masked for all CPUs. This is
+			      useful so that a dump capture kernel won't be
+			      shot down by NMI
+
 	autoconf=	[IPV6]
 			See Documentation/networking/ipv6.txt.
 
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
index 7f62ad4..c80f6b6 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
@@ -23,6 +23,11 @@
 #define APIC_VERBOSE 1
 #define APIC_DEBUG   2
 
+/* Macros for apic_extnmi which controls external NMI masking */
+#define APIC_EXTNMI_BSP		0 /* Default */
+#define APIC_EXTNMI_ALL		1
+#define APIC_EXTNMI_NONE	2
+
 /*
  * Define the default level of output to be very little
  * This can be turned up by using apic=verbose for more
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index 2f69e3b..a2a8074 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -82,6 +82,12 @@ physid_mask_t phys_cpu_present_map;
 static unsigned int disabled_cpu_apicid __read_mostly = BAD_APICID;
 
 /*
+ * This variable controls which CPUs receive external NMIs.  By default,
+ * external NMIs are delivered to only BSP.
+ */
+static int apic_extnmi = APIC_EXTNMI_BSP;
+
+/*
  * Map cpu index to physical APIC ID
  */
 DEFINE_EARLY_PER_CPU_READ_MOSTLY(u16, x86_cpu_to_apicid, BAD_APICID);
@@ -1161,6 +1167,8 @@ void __init init_bsp_APIC(void)
 	value = APIC_DM_NMI;
 	if (!lapic_is_integrated())		/* 82489DX */
 		value |= APIC_LVT_LEVEL_TRIGGER;
+	if (apic_extnmi == APIC_EXTNMI_NONE)
+		value |= APIC_LVT_MASKED;
 	apic_write(APIC_LVT1, value);
 }
 
@@ -1380,7 +1388,8 @@ void setup_local_APIC(void)
 	/*
 	 * only the BP should see the LINT1 NMI signal, obviously.
 	 */
-	if (!cpu)
+	if ((!cpu && apic_extnmi != APIC_EXTNMI_NONE) ||
+	    apic_extnmi == APIC_EXTNMI_ALL)
 		value = APIC_DM_NMI;
 	else
 		value = APIC_DM_NMI | APIC_LVT_MASKED;
@@ -2548,3 +2557,23 @@ static int __init apic_set_disabled_cpu_apicid(char *arg)
 	return 0;
 }
 early_param("disable_cpu_apicid", apic_set_disabled_cpu_apicid);
+
+static int __init apic_set_extnmi(char *arg)
+{
+	if (!arg)
+		return -EINVAL;
+
+	if (strcmp("all", arg) == 0)
+		apic_extnmi = APIC_EXTNMI_ALL;
+	else if (strcmp("none", arg) == 0)
+		apic_extnmi = APIC_EXTNMI_NONE;
+	else if (strcmp("bsp", arg) == 0)
+		apic_extnmi = APIC_EXTNMI_BSP;
+	else {
+		pr_warn("Unknown external NMI delivery mode `%s' is ignored\n",
+			arg);
+	}
+
+	return 0;
+}
+early_param("apic_extnmi", apic_set_extnmi);


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1277269

FromBorislav Petkov <bp@alien8.de>
Date2015-11-25 12:50 +0100
Message-ID<qyGKd-5Jh-3@gated-at.bofh.it>
In reply to#1273903
On Fri, Nov 20, 2015 at 06:36:50PM +0900, Hidehiro Kawai wrote:
> This patch introduces new boot option, apic_extnmi:
> 
>  apic_extnmi={ bsp | all | none}
> 
> The default value is "bsp" and this is the current behavior; only
> BSP receives external NMI.  "all" allows external NMIs to be
> broadcast to all CPUs.  This would raise the success rate of panic
> on NMI when BSP hangs up in NMI context or the external NMI is
> swallowed by other NMI handlers on BSP.  If you specified "none",
> any CPUs don't receive external NMIs.  This is useful for dump
> capture kernel so that it wouldn't be shot down while saving a
> crash dump.
> 
> V5:
> - Rename the option from "noextnmi" to "apic_extnmi"
> - Add apic_extnmi=all feature
> - Fix the wrong documentation about "noextnmi" (apic_extnmi=none)
> 
> Signed-off-by: Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: "H. Peter Anvin" <hpa@zytor.com>
> Cc: Jonathan Corbet <corbet@lwn.net>
> ---
>  Documentation/kernel-parameters.txt |    9 +++++++++
>  arch/x86/include/asm/apic.h         |    5 +++++
>  arch/x86/kernel/apic/apic.c         |   31 ++++++++++++++++++++++++++++++-
>  3 files changed, 44 insertions(+), 1 deletion(-)
> 
> diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
> index f8aae63..ceed3bc 100644
> --- a/Documentation/kernel-parameters.txt
> +++ b/Documentation/kernel-parameters.txt
> @@ -472,6 +472,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
>  			Change the amount of debugging information output
>  			when initialising the APIC and IO-APIC components.
>  
> +	apic_extnmi=	[APIC,X86] External NMI delivery setting
> +			Format: { bsp (default) | all | none }
> +			bsp:  External NMI is delivered to only CPU 0

							only to

> +			all:  External NMIs are broadcast to all CPUs as a
> +			      backup of CPU 0
> +			none: External NMI is masked for all CPUs. This is
> +			      useful so that a dump capture kernel won't be
> +			      shot down by NMI
> +
>  	autoconf=	[IPV6]
>  			See Documentation/networking/ipv6.txt.
>  
> diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
> index 7f62ad4..c80f6b6 100644
> --- a/arch/x86/include/asm/apic.h
> +++ b/arch/x86/include/asm/apic.h
> @@ -23,6 +23,11 @@
>  #define APIC_VERBOSE 1
>  #define APIC_DEBUG   2
>  
> +/* Macros for apic_extnmi which controls external NMI masking */
> +#define APIC_EXTNMI_BSP		0 /* Default */
> +#define APIC_EXTNMI_ALL		1
> +#define APIC_EXTNMI_NONE	2
> +
>  /*
>   * Define the default level of output to be very little
>   * This can be turned up by using apic=verbose for more
> diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
> index 2f69e3b..a2a8074 100644
> --- a/arch/x86/kernel/apic/apic.c
> +++ b/arch/x86/kernel/apic/apic.c
> @@ -82,6 +82,12 @@ physid_mask_t phys_cpu_present_map;
>  static unsigned int disabled_cpu_apicid __read_mostly = BAD_APICID;
>  
>  /*
> + * This variable controls which CPUs receive external NMIs.  By default,
> + * external NMIs are delivered to only BSP.

				  only to the BSP.

> + */
> +static int apic_extnmi = APIC_EXTNMI_BSP;
> +
> +/*
>   * Map cpu index to physical APIC ID
>   */
>  DEFINE_EARLY_PER_CPU_READ_MOSTLY(u16, x86_cpu_to_apicid, BAD_APICID);
> @@ -1161,6 +1167,8 @@ void __init init_bsp_APIC(void)
>  	value = APIC_DM_NMI;
>  	if (!lapic_is_integrated())		/* 82489DX */
>  		value |= APIC_LVT_LEVEL_TRIGGER;
> +	if (apic_extnmi == APIC_EXTNMI_NONE)
> +		value |= APIC_LVT_MASKED;
>  	apic_write(APIC_LVT1, value);
>  }
>  
> @@ -1380,7 +1388,8 @@ void setup_local_APIC(void)
>  	/*
>  	 * only the BP should see the LINT1 NMI signal, obviously.
>  	 */

That comment needs adjusting.

> -	if (!cpu)
> +	if ((!cpu && apic_extnmi != APIC_EXTNMI_NONE) ||
> +	    apic_extnmi == APIC_EXTNMI_ALL)
>  		value = APIC_DM_NMI;
>  	else
>  		value = APIC_DM_NMI | APIC_LVT_MASKED;
> @@ -2548,3 +2557,23 @@ static int __init apic_set_disabled_cpu_apicid(char *arg)
>  	return 0;
>  }
>  early_param("disable_cpu_apicid", apic_set_disabled_cpu_apicid);
> +
> +static int __init apic_set_extnmi(char *arg)
> +{
> +	if (!arg)
> +		return -EINVAL;
> +
> +	if (strcmp("all", arg) == 0)

	if (!strncmp("all", arg, 3))

ditto for the rest

> +		apic_extnmi = APIC_EXTNMI_ALL;
> +	else if (strcmp("none", arg) == 0)
> +		apic_extnmi = APIC_EXTNMI_NONE;
> +	else if (strcmp("bsp", arg) == 0)
> +		apic_extnmi = APIC_EXTNMI_BSP;
> +	else {
> +		pr_warn("Unknown external NMI delivery mode `%s' is ignored\n",

s/is //

Also, if there's no other delivery mode which makes sense, you can do:

	pr_warn("Unknown external NMI delivery mode `%s', defaulting to	'bsp'\n", arg);
	apic_extnmi = APIC_EXTNMI_BSP;

Btw, you can let the pr_warn line be longer than 80 cols.

And if you don't default, you need

		return -EINVAL;

here.

-- 
Regards/Gruss,
    Boris.

ECO tip #101: Trim your mails when you reply.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1277484

From河合英宏 / KAWAI,HIDEHIRO <hidehiro.kawai.ez@hitachi.com>
Date2015-11-25 16:40 +0100
Message-ID<qyKkN-87J-7@gated-at.bofh.it>
In reply to#1277269
PiBPbiBGcmksIE5vdiAyMCwgMjAxNSBhdCAwNjozNjo1MFBNICswOTAwLCBIaWRlaGlybyBLYXdh
aSB3cm90ZToNCj4gPiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IGJvb3Qgb3B0aW9uLCBhcGlj
X2V4dG5taToNCj4gPg0KPiA+ICBhcGljX2V4dG5taT17IGJzcCB8IGFsbCB8IG5vbmV9DQo+ID4N
Cj4gPiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiYnNwIiBhbmQgdGhpcyBpcyB0aGUgY3VycmVudCBi
ZWhhdmlvcjsgb25seQ0KPiA+IEJTUCByZWNlaXZlcyBleHRlcm5hbCBOTUkuICAiYWxsIiBhbGxv
d3MgZXh0ZXJuYWwgTk1JcyB0byBiZQ0KPiA+IGJyb2FkY2FzdCB0byBhbGwgQ1BVcy4gIFRoaXMg
d291bGQgcmFpc2UgdGhlIHN1Y2Nlc3MgcmF0ZSBvZiBwYW5pYw0KPiA+IG9uIE5NSSB3aGVuIEJT
UCBoYW5ncyB1cCBpbiBOTUkgY29udGV4dCBvciB0aGUgZXh0ZXJuYWwgTk1JIGlzDQo+ID4gc3dh
bGxvd2VkIGJ5IG90aGVyIE5NSSBoYW5kbGVycyBvbiBCU1AuICBJZiB5b3Ugc3BlY2lmaWVkICJu
b25lIiwNCj4gPiBhbnkgQ1BVcyBkb24ndCByZWNlaXZlIGV4dGVybmFsIE5NSXMuICBUaGlzIGlz
IHVzZWZ1bCBmb3IgZHVtcA0KPiA+IGNhcHR1cmUga2VybmVsIHNvIHRoYXQgaXQgd291bGRuJ3Qg
YmUgc2hvdCBkb3duIHdoaWxlIHNhdmluZyBhDQo+ID4gY3Jhc2ggZHVtcC4NCj4gPg0KPiA+IFY1
Og0KPiA+IC0gUmVuYW1lIHRoZSBvcHRpb24gZnJvbSAibm9leHRubWkiIHRvICJhcGljX2V4dG5t
aSINCj4gPiAtIEFkZCBhcGljX2V4dG5taT1hbGwgZmVhdHVyZQ0KPiA+IC0gRml4IHRoZSB3cm9u
ZyBkb2N1bWVudGF0aW9uIGFib3V0ICJub2V4dG5taSIgKGFwaWNfZXh0bm1pPW5vbmUpDQo+ID4N
Cj4gPiBTaWduZWQtb2ZmLWJ5OiBIaWRlaGlybyBLYXdhaSA8aGlkZWhpcm8ua2F3YWkuZXpAaGl0
YWNoaS5jb20+DQo+ID4gQ2M6IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPg0K
PiA+IENjOiBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4NCj4gPiBDYzogIkguIFBldGVy
IEFudmluIiA8aHBhQHp5dG9yLmNvbT4NCj4gPiBDYzogSm9uYXRoYW4gQ29yYmV0IDxjb3JiZXRA
bHduLm5ldD4NCj4gPiAtLS0NCj4gPiAgRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50
eHQgfCAgICA5ICsrKysrKysrKw0KPiA+ICBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggICAg
ICAgICB8ICAgIDUgKysrKysNCj4gPiAgYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jICAgICAg
ICAgfCAgIDMxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gPiAgMyBmaWxlcyBj
aGFuZ2VkLCA0NCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+ID4NCj4gPiBkaWZmIC0t
Z2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9u
L2tlcm5lbC1wYXJhbWV0ZXJzLnR4dA0KPiA+IGluZGV4IGY4YWFlNjMuLmNlZWQzYmMgMTAwNjQ0
DQo+ID4gLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQNCj4gPiArKysg
Yi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dA0KPiA+IEBAIC00NzIsNiArNDcy
LDE1IEBAIGJ5dGVzIHJlc3BlY3RpdmVseS4gU3VjaCBsZXR0ZXIgc3VmZml4ZXMgY2FuIGFsc28g
YmUgZW50aXJlbHkgb21pdHRlZC4NCj4gPiAgCQkJQ2hhbmdlIHRoZSBhbW91bnQgb2YgZGVidWdn
aW5nIGluZm9ybWF0aW9uIG91dHB1dA0KPiA+ICAJCQl3aGVuIGluaXRpYWxpc2luZyB0aGUgQVBJ
QyBhbmQgSU8tQVBJQyBjb21wb25lbnRzLg0KPiA+DQo+ID4gKwlhcGljX2V4dG5taT0JW0FQSUMs
WDg2XSBFeHRlcm5hbCBOTUkgZGVsaXZlcnkgc2V0dGluZw0KPiA+ICsJCQlGb3JtYXQ6IHsgYnNw
IChkZWZhdWx0KSB8IGFsbCB8IG5vbmUgfQ0KPiA+ICsJCQlic3A6ICBFeHRlcm5hbCBOTUkgaXMg
ZGVsaXZlcmVkIHRvIG9ubHkgQ1BVIDANCj4gDQo+IAkJCQkJCQlvbmx5IHRvDQoNClRoYW5rcyBm
b3IgdGhhIGNvcnJlY3Rpb24uDQoNCj4gDQo+ID4gKwkJCWFsbDogIEV4dGVybmFsIE5NSXMgYXJl
IGJyb2FkY2FzdCB0byBhbGwgQ1BVcyBhcyBhDQo+ID4gKwkJCSAgICAgIGJhY2t1cCBvZiBDUFUg
MA0KPiA+ICsJCQlub25lOiBFeHRlcm5hbCBOTUkgaXMgbWFza2VkIGZvciBhbGwgQ1BVcy4gVGhp
cyBpcw0KPiA+ICsJCQkgICAgICB1c2VmdWwgc28gdGhhdCBhIGR1bXAgY2FwdHVyZSBrZXJuZWwg
d29uJ3QgYmUNCj4gPiArCQkJICAgICAgc2hvdCBkb3duIGJ5IE5NSQ0KPiA+ICsNCj4gPiAgCWF1
dG9jb25mPQlbSVBWNl0NCj4gPiAgCQkJU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcHY2
LnR4dC4NCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgg
Yi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgNCj4gPiBpbmRleCA3ZjYyYWQ0Li5jODBmNmI2
IDEwMDY0NA0KPiA+IC0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaA0KPiA+ICsrKyBi
L2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaA0KPiA+IEBAIC0yMyw2ICsyMywxMSBAQA0KPiA+
ICAjZGVmaW5lIEFQSUNfVkVSQk9TRSAxDQo+ID4gICNkZWZpbmUgQVBJQ19ERUJVRyAgIDINCj4g
Pg0KPiA+ICsvKiBNYWNyb3MgZm9yIGFwaWNfZXh0bm1pIHdoaWNoIGNvbnRyb2xzIGV4dGVybmFs
IE5NSSBtYXNraW5nICovDQo+ID4gKyNkZWZpbmUgQVBJQ19FWFROTUlfQlNQCQkwIC8qIERlZmF1
bHQgKi8NCj4gPiArI2RlZmluZSBBUElDX0VYVE5NSV9BTEwJCTENCj4gPiArI2RlZmluZSBBUElD
X0VYVE5NSV9OT05FCTINCj4gPiArDQo+ID4gIC8qDQo+ID4gICAqIERlZmluZSB0aGUgZGVmYXVs
dCBsZXZlbCBvZiBvdXRwdXQgdG8gYmUgdmVyeSBsaXR0bGUNCj4gPiAgICogVGhpcyBjYW4gYmUg
dHVybmVkIHVwIGJ5IHVzaW5nIGFwaWM9dmVyYm9zZSBmb3IgbW9yZQ0KPiA+IGRpZmYgLS1naXQg
YS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGlj
LmMNCj4gPiBpbmRleCAyZjY5ZTNiLi5hMmE4MDc0IDEwMDY0NA0KPiA+IC0tLSBhL2FyY2gveDg2
L2tlcm5lbC9hcGljL2FwaWMuYw0KPiA+ICsrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMu
Yw0KPiA+IEBAIC04Miw2ICs4MiwxMiBAQCBwaHlzaWRfbWFza190IHBoeXNfY3B1X3ByZXNlbnRf
bWFwOw0KPiA+ICBzdGF0aWMgdW5zaWduZWQgaW50IGRpc2FibGVkX2NwdV9hcGljaWQgX19yZWFk
X21vc3RseSA9IEJBRF9BUElDSUQ7DQo+ID4NCj4gPiAgLyoNCj4gPiArICogVGhpcyB2YXJpYWJs
ZSBjb250cm9scyB3aGljaCBDUFVzIHJlY2VpdmUgZXh0ZXJuYWwgTk1Jcy4gIEJ5IGRlZmF1bHQs
DQo+ID4gKyAqIGV4dGVybmFsIE5NSXMgYXJlIGRlbGl2ZXJlZCB0byBvbmx5IEJTUC4NCj4gDQo+
IAkJCQkgIG9ubHkgdG8gdGhlIEJTUC4NCg0KLi4uYW5kIGFnYWluLg0KDQo+IA0KPiA+ICsgKi8N
Cj4gPiArc3RhdGljIGludCBhcGljX2V4dG5taSA9IEFQSUNfRVhUTk1JX0JTUDsNCj4gPiArDQo+
ID4gKy8qDQo+ID4gICAqIE1hcCBjcHUgaW5kZXggdG8gcGh5c2ljYWwgQVBJQyBJRA0KPiA+ICAg
Ki8NCj4gPiAgREVGSU5FX0VBUkxZX1BFUl9DUFVfUkVBRF9NT1NUTFkodTE2LCB4ODZfY3B1X3Rv
X2FwaWNpZCwgQkFEX0FQSUNJRCk7DQo+ID4gQEAgLTExNjEsNiArMTE2Nyw4IEBAIHZvaWQgX19p
bml0IGluaXRfYnNwX0FQSUModm9pZCkNCj4gPiAgCXZhbHVlID0gQVBJQ19ETV9OTUk7DQo+ID4g
IAlpZiAoIWxhcGljX2lzX2ludGVncmF0ZWQoKSkJCS8qIDgyNDg5RFggKi8NCj4gPiAgCQl2YWx1
ZSB8PSBBUElDX0xWVF9MRVZFTF9UUklHR0VSOw0KPiA+ICsJaWYgKGFwaWNfZXh0bm1pID09IEFQ
SUNfRVhUTk1JX05PTkUpDQo+ID4gKwkJdmFsdWUgfD0gQVBJQ19MVlRfTUFTS0VEOw0KPiA+ICAJ
YXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsNCj4gPiAgfQ0KPiA+DQo+ID4gQEAgLTEzODAs
NyArMTM4OCw4IEBAIHZvaWQgc2V0dXBfbG9jYWxfQVBJQyh2b2lkKQ0KPiA+ICAJLyoNCj4gPiAg
CSAqIG9ubHkgdGhlIEJQIHNob3VsZCBzZWUgdGhlIExJTlQxIE5NSSBzaWduYWwsIG9idmlvdXNs
eS4NCj4gPiAgCSAqLw0KPiANCj4gVGhhdCBjb21tZW50IG5lZWRzIGFkanVzdGluZy4NCg0KT0ss
IEknbGwgZG8gdGhhdC4NCg0KPiANCj4gPiAtCWlmICghY3B1KQ0KPiA+ICsJaWYgKCghY3B1ICYm
IGFwaWNfZXh0bm1pICE9IEFQSUNfRVhUTk1JX05PTkUpIHx8DQo+ID4gKwkgICAgYXBpY19leHRu
bWkgPT0gQVBJQ19FWFROTUlfQUxMKQ0KPiA+ICAJCXZhbHVlID0gQVBJQ19ETV9OTUk7DQo+ID4g
IAllbHNlDQo+ID4gIAkJdmFsdWUgPSBBUElDX0RNX05NSSB8IEFQSUNfTFZUX01BU0tFRDsNCj4g
PiBAQCAtMjU0OCwzICsyNTU3LDIzIEBAIHN0YXRpYyBpbnQgX19pbml0IGFwaWNfc2V0X2Rpc2Fi
bGVkX2NwdV9hcGljaWQoY2hhciAqYXJnKQ0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0NCj4gPiAg
ZWFybHlfcGFyYW0oImRpc2FibGVfY3B1X2FwaWNpZCIsIGFwaWNfc2V0X2Rpc2FibGVkX2NwdV9h
cGljaWQpOw0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX2luaXQgYXBpY19zZXRfZXh0bm1pKGNo
YXIgKmFyZykNCj4gPiArew0KPiA+ICsJaWYgKCFhcmcpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7
DQo+ID4gKw0KPiA+ICsJaWYgKHN0cmNtcCgiYWxsIiwgYXJnKSA9PSAwKQ0KPiANCj4gCWlmICgh
c3RybmNtcCgiYWxsIiwgYXJnLCAzKSkNCj4gDQo+IGRpdHRvIGZvciB0aGUgcmVzdA0KDQpJJ2xs
IGZpeCB0aGVtLg0KDQo+ID4gKwkJYXBpY19leHRubWkgPSBBUElDX0VYVE5NSV9BTEw7DQo+ID4g
KwllbHNlIGlmIChzdHJjbXAoIm5vbmUiLCBhcmcpID09IDApDQo+ID4gKwkJYXBpY19leHRubWkg
PSBBUElDX0VYVE5NSV9OT05FOw0KPiA+ICsJZWxzZSBpZiAoc3RyY21wKCJic3AiLCBhcmcpID09
IDApDQo+ID4gKwkJYXBpY19leHRubWkgPSBBUElDX0VYVE5NSV9CU1A7DQo+ID4gKwllbHNlIHsN
Cj4gPiArCQlwcl93YXJuKCJVbmtub3duIGV4dGVybmFsIE5NSSBkZWxpdmVyeSBtb2RlIGAlcycg
aXMgaWdub3JlZFxuIiwNCj4gDQo+IHMvaXMgLy8NCg0KSSdsbCBmaXggaXQsIHRoYW5rcy4NCg0K
PiBBbHNvLCBpZiB0aGVyZSdzIG5vIG90aGVyIGRlbGl2ZXJ5IG1vZGUgd2hpY2ggbWFrZXMgc2Vu
c2UsIHlvdSBjYW4gZG86DQo+IA0KPiAJcHJfd2FybigiVW5rbm93biBleHRlcm5hbCBOTUkgZGVs
aXZlcnkgbW9kZSBgJXMnLCBkZWZhdWx0aW5nIHRvCSdic3AnXG4iLCBhcmcpOw0KPiAJYXBpY19l
eHRubWkgPSBBUElDX0VYVE5NSV9CU1A7DQoNCkkgaW50ZW5kZWQgdG8ga2VlcCB0aGUgcHJldmlv
dXMgb3IgaW5pdGlhbCB2YWx1ZSBvZiBhcGljX2V4dG5taQ0KYmVjYXVzZSBib290IG9wdGlvbiBj
YW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLiBJZiBhIHVzZXIgZG8NCnRoYXQsIG1ha2lu
ZyB0aGUgbGFzdCB2YWxpZCB2YWx1ZSBlZmZlY3RpdmUgd291bGQgYmUgbmF0dXJhbCBtYW5uZXIu
DQpUaGlzIGlzIHVuY2xlYXIgcGFydCBvZiBib290IG9wdGlvbiBhcyBJbmdvIHBvaW50ZWQsIGJ1
dC4uLg0KDQo+IEJ0dywgeW91IGNhbiBsZXQgdGhlIHByX3dhcm4gbGluZSBiZSBsb25nZXIgdGhh
biA4MCBjb2xzLg0KDQpJIGxpa2UgODAgY29scyBiZWNhdXNlIEknbSB3b3JraW5nIHdpdGggbXVs
dGlwbGUgODAtY29sIHRlcm1pbmFscy4gOi0pDQoNCj4gQW5kIGlmIHlvdSBkb24ndCBkZWZhdWx0
LCB5b3UgbmVlZA0KPiANCj4gCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IGhlcmUuDQoNCllvdSBh
cmUgcmlnaHQuICBJdCBzZWVtcyB0aGF0IEkgZGVsZXRlZCBpdCB3aGlsZSBtb2RpZnlpbmcNCmFy
b3VuZCB0aGUgY29kZS4NCg0KUmVnYXJkcywNCi0tDQpIaWRlaGlybyBLYXdhaQ0KSGl0YWNoaSwg
THRkLiBSZXNlYXJjaCAmIERldmVsb3BtZW50IEdyb3VwDQoNCg==
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web