public inbox for gentoo-alpha@lists.gentoo.org
 help / color / mirror / Atom feed
From: Jay Maynard <jmaynard@conmicro.cx>
To: gentoo-alpha@lists.gentoo.org
Cc: johnm@gentoo.org
Subject: [gentoo-alpha] sysctl_uac patch for 2.6.4
Date: Wed, 17 Mar 2004 15:20:09 -0600	[thread overview]
Message-ID: <20040317212009.GA4868@thebrain.conmicro.cx> (raw)

[-- Attachment #1: Type: text/plain, Size: 214 bytes --]

This patch applies to a Gentoo 2.6.4-r1 kernel as installed by "emerge
gentoo-dev-sources". It builds and appears to function on my box. As always,
more testing is in order.

John, I'll do the ebuild changes next.

[-- Attachment #2: sysctl_uac.patch --]
[-- Type: text/plain, Size: 5698 bytes --]

diff -Nur linux-2.6.4-gentoo-r1/arch/alpha/Kconfig linux-2.6.4-sysctl_uac/arch/alpha/Kconfig
--- linux-2.6.4-gentoo-r1/arch/alpha/Kconfig	2004-03-16 19:13:12.000000000 -0600
+++ linux-2.6.4-sysctl_uac/arch/alpha/Kconfig	2004-03-17 11:07:55.000000000 -0600
@@ -566,6 +566,32 @@
 
 	  Take the default (1) unless you want more control or more info.
 
+config ALPHA_UAC_SYSCTL
+	bool "Configure UAC policy via sysctl"
+	depends on SYSCTL
+	default y
+	---help---
+	  Configuring the UAC (unaligned access control) policy on a Linux
+	  system usually involves setting a compile time define. If you say
+	  Y here, you will be able to modify the UAC policy at runtime using
+	  the /proc interface.
+
+	  The UAC policy defines the action Linux should take when an
+	  unaligned memory access occurs. The action can include printing a
+	  warning message (NOPRINT), sending a signal to the offending
+	  program to help developers debug their applications (SIGBUS), or
+	  disabling the transparent fixing (NOFIX).
+
+	  The sysctls will be initialized to the compile-time defined UAC
+	  policy. You can change these manually, or with the sysctl(8)
+	  userspace utility.
+
+	  To disable the warning messages at runtime, you would use
+
+	    echo 1 > /proc/sys/kernel/uac/noprint
+
+	  This is pretty harmless. Say Y if you're not sure.
+
 source "drivers/pci/Kconfig"
 source "drivers/eisa/Kconfig"
 
diff -Nur linux-2.6.4-gentoo-r1/arch/alpha/kernel/traps.c linux-2.6.4-sysctl_uac/arch/alpha/kernel/traps.c
--- linux-2.6.4-gentoo-r1/arch/alpha/kernel/traps.c	2004-03-16 19:13:12.000000000 -0600
+++ linux-2.6.4-sysctl_uac/arch/alpha/kernel/traps.c	2004-03-17 13:44:42.000000000 -0600
@@ -15,6 +15,8 @@
 #include <linux/delay.h>
 #include <linux/smp_lock.h>
 #include <linux/module.h>
+#include <linux/sysctl.h>
+#include <linux/init.h>
 
 #include <asm/gentrap.h>
 #include <asm/uaccess.h>
@@ -33,6 +35,40 @@
 static int opDEC_checked = 0;
 static unsigned long opDEC_test_pc = 0;
 
+#ifdef CONFIG_ALPHA_UAC_SYSCTL
+static struct ctl_table_header *uac_sysctl_header;
+
+static int enabled_noprint = 0;
+static int enabled_sigbus = 0;
+static int enabled_nofix = 0;
+
+ctl_table uac_table[] = {
+	{KERN_UAC_NOPRINT, "noprint", &enabled_noprint, sizeof (int), 0644, NULL, &proc_dointvec},
+	{KERN_UAC_SIGBUS, "sigbus", &enabled_sigbus, sizeof (int), 0644, NULL, &proc_dointvec},
+	{KERN_UAC_NOFIX, "nofix", &enabled_nofix, sizeof (int), 0644, NULL, &proc_dointvec},
+        {0}
+};
+
+static int __init init_uac_sysctl(void)
+//static void init_uac_sysctl(void)
+{
+	/* Initialize sysctls with the #defined UAC policy */
+	enabled_noprint = (test_thread_flag (TIF_UAC_NOPRINT)) ? 1 : 0;
+        enabled_sigbus = (test_thread_flag (TIF_UAC_SIGBUS)) ? 1 : 0;
+	enabled_nofix = (test_thread_flag (TIF_UAC_NOFIX)) ? 1 : 0;
+
+	/* save this for later so we can clean up */	
+	uac_sysctl_header = register_sysctl_table(uac_table, 0);
+	return 0;
+}
+
+static void __exit exit_uac_sysctl(void)
+//static void exit_uac_sysctl(void)
+{
+	unregister_sysctl_table(uac_sysctl_header);
+}
+#endif
+
 static void
 opDEC_check(void)
 {
@@ -793,7 +829,11 @@
 	/* Check the UAC bits to decide what the user wants us to do
 	   with the unaliged access.  */
 
+#ifndef CONFIG_ALPHA_UAC_SYSCTL
 	if (!test_thread_flag (TIF_UAC_NOPRINT)) {
+#else  /* CONFIG_ALPHA_UAC_SYSCTL */
+	if (!(enabled_noprint)) {
+#endif /* CONFIG_ALPHA_UAC_SYSCTL */
 		if (cnt >= 5 && jiffies - last_time > 5*HZ) {
 			cnt = 0;
 		}
@@ -804,10 +844,18 @@
 		}
 		last_time = jiffies;
 	}
+#ifndef CONFIG_ALPHA_UAC_SYSCTL
 	if (test_thread_flag (TIF_UAC_SIGBUS))
+#else  /* CONFIG_ALPHA_UAC_SYSCTL */
+	if (enabled_sigbus)
+#endif /* CONFIG_ALPHA_UAC_SYSCTL */
 		goto give_sigbus;
 	/* Not sure why you'd want to use this, but... */
+#ifndef CONFIG_ALPHA_UAC_SYSCTL
 	if (test_thread_flag (TIF_UAC_NOFIX))
+#else  /* CONFIG_ALPHA_UAC_SYSCTL */
+	if (enabled_nofix)
+#endif /* CONFIG_ALPHA_UAC_SYSCTL */
 		return;
 
 	/* Don't bother reading ds in the access check since we already
@@ -1102,3 +1150,6 @@
 	if (implver() == IMPLVER_EV4)
 		opDEC_check();
 }
+
+__initcall(init_uac_sysctl);
+//module_exit(exit_uac_sysctl);
diff -Nur linux-2.6.4-gentoo-r1/include/linux/sysctl.h linux-2.6.4-sysctl_uac/include/linux/sysctl.h
--- linux-2.6.4-gentoo-r1/include/linux/sysctl.h	2004-03-16 19:13:12.000000000 -0600
+++ linux-2.6.4-sysctl_uac/include/linux/sysctl.h	2004-03-17 11:30:16.000000000 -0600
@@ -131,6 +131,7 @@
 	KERN_PRINTK_RATELIMIT_BURST=61,	/* int: tune printk ratelimiting */
 	KERN_PTY=62,		/* dir: pty driver */
 	KERN_NGROUPS_MAX=63,	/* int: NGROUPS_MAX */
+	KERN_UAC_POLICY=64,	/* int: Alpha unaligned access control policy flags */
 };
 
 
@@ -202,6 +203,15 @@
 	PTY_NR=2
 };
 
+/* /proc/sys/kernel/uac */
+enum
+{
+	/* UAC policy on Alpha */
+	KERN_UAC_NOPRINT=1,    /* int: printk() on unaligned access */
+	KERN_UAC_SIGBUS=2,     /* int: send SIGBUS on unaligned access */
+	KERN_UAC_NOFIX=3,      /* int: don't fix the unaligned access */
+};
+
 /* /proc/sys/bus/isa */
 enum
 {
diff -Nur linux-2.6.4-gentoo-r1/kernel/sysctl.c linux-2.6.4-sysctl_uac/kernel/sysctl.c
--- linux-2.6.4-gentoo-r1/kernel/sysctl.c	2004-03-16 19:13:12.000000000 -0600
+++ linux-2.6.4-sysctl_uac/kernel/sysctl.c	2004-03-17 11:50:03.000000000 -0600
@@ -139,6 +139,9 @@
 #ifdef CONFIG_UNIX98_PTYS
 extern ctl_table pty_table[];
 #endif
+#ifdef CONFIG_ALPHA_UAC_SYSCTL
+extern ctl_table uac_table[];
+#endif
 
 /* /proc declarations: */
 
@@ -615,6 +618,12 @@
 		.mode		= 0444,
 		.proc_handler	= &proc_dointvec,
 	},
+	{
+		.ctl_name	= KERN_UAC_POLICY,
+		.procname	= "uac",
+		.mode		= 0555,
+		.child		= uac_table,
+	},
 	{ .ctl_name = 0 }
 };
 


[-- Attachment #3: Type: text/plain, Size: 39 bytes --]

--
gentoo-alpha@gentoo.org mailing list

                 reply	other threads:[~2004-03-17 21:19 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20040317212009.GA4868@thebrain.conmicro.cx \
    --to=jmaynard@conmicro.cx \
    --cc=gentoo-alpha@lists.gentoo.org \
    --cc=johnm@gentoo.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox