Lines 102-107
static char * ireg_name[] = {"v0", "t0",
Link Here
|
102 |
"t10", "t11", "ra", "pv", "at", "gp", "sp", "zero"}; |
102 |
"t10", "t11", "ra", "pv", "at", "gp", "sp", "zero"}; |
103 |
#endif |
103 |
#endif |
104 |
|
104 |
|
|
|
105 |
#ifdef CONFIG_ALPHA_UAC_SYSCTL |
106 |
static struct ctl_table_header *uac_sysctl_header; |
107 |
|
108 |
/* /proc/sys/kernel/uac */ |
109 |
enum |
110 |
{ |
111 |
/* UAC policy on Alpha */ |
112 |
KERN_UAC_NOPRINT=1, /* int: printk() on unaligned access */ |
113 |
KERN_UAC_SIGBUS=2, /* int: send SIGBUS on unaligned access */ |
114 |
KERN_UAC_NOFIX=3, /* int: don't fix the unaligned access */ |
115 |
}; |
116 |
|
117 |
static int enabled_noprint = 0; |
118 |
static int enabled_sigbus = 0; |
119 |
static int enabled_nofix = 0; |
120 |
|
121 |
ctl_table uac_table[] = { |
122 |
{KERN_UAC_NOPRINT, "noprint", &enabled_noprint, sizeof (int), 0644, NULL, NULL, &proc_dointvec}, |
123 |
{KERN_UAC_SIGBUS, "sigbus", &enabled_sigbus, sizeof (int), 0644, NULL, NULL, &proc_dointvec}, |
124 |
{KERN_UAC_NOFIX, "nofix", &enabled_nofix, sizeof (int), 0644, NULL, NULL, &proc_dointvec}, |
125 |
{0} |
126 |
}; |
127 |
|
128 |
static int __init init_uac_sysctl(void) |
129 |
{ |
130 |
/* Initialize sysctls with the #defined UAC policy */ |
131 |
enabled_noprint = (test_thread_flag (TIF_UAC_NOPRINT)) ? 1 : 0; |
132 |
enabled_sigbus = (test_thread_flag (TIF_UAC_SIGBUS)) ? 1 : 0; |
133 |
enabled_nofix = (test_thread_flag (TIF_UAC_NOFIX)) ? 1 : 0; |
134 |
|
135 |
/* save this for later so we can clean up */ |
136 |
uac_sysctl_header = register_sysctl_table(uac_table); |
137 |
return 0; |
138 |
} |
139 |
|
140 |
static void __exit exit_uac_sysctl(void) |
141 |
{ |
142 |
unregister_sysctl_table(uac_sysctl_header); |
143 |
} |
144 |
#endif |
145 |
|
105 |
static void |
146 |
static void |
106 |
dik_show_code(unsigned int *pc) |
147 |
dik_show_code(unsigned int *pc) |
107 |
{ |
148 |
{ |
Lines 780-786
do_entUnaUser(void __user * va, unsigned
Link Here
|
780 |
/* Check the UAC bits to decide what the user wants us to do |
821 |
/* Check the UAC bits to decide what the user wants us to do |
781 |
with the unaliged access. */ |
822 |
with the unaliged access. */ |
782 |
|
823 |
|
|
|
824 |
#ifndef CONFIG_ALPHA_UAC_SYSCTL |
783 |
if (!test_thread_flag (TIF_UAC_NOPRINT)) { |
825 |
if (!test_thread_flag (TIF_UAC_NOPRINT)) { |
|
|
826 |
#else /* CONFIG_ALPHA_UAC_SYSCTL */ |
827 |
if (!(enabled_noprint)) { |
828 |
#endif /* CONFIG_ALPHA_UAC_SYSCTL */ |
784 |
if (cnt >= 5 && jiffies - last_time > 5*HZ) { |
829 |
if (cnt >= 5 && jiffies - last_time > 5*HZ) { |
785 |
cnt = 0; |
830 |
cnt = 0; |
786 |
} |
831 |
} |
Lines 791-800
do_entUnaUser(void __user * va, unsigned
Link Here
|
791 |
} |
836 |
} |
792 |
last_time = jiffies; |
837 |
last_time = jiffies; |
793 |
} |
838 |
} |
|
|
839 |
#ifndef CONFIG_ALPHA_UAC_SYSCTL |
794 |
if (test_thread_flag (TIF_UAC_SIGBUS)) |
840 |
if (test_thread_flag (TIF_UAC_SIGBUS)) |
|
|
841 |
#else /* CONFIG_ALPHA_UAC_SYSCTL */ |
842 |
if (enabled_sigbus) |
843 |
#endif /* CONFIG_ALPHA_UAC_SYSCTL */ |
795 |
goto give_sigbus; |
844 |
goto give_sigbus; |
796 |
/* Not sure why you'd want to use this, but... */ |
845 |
/* Not sure why you'd want to use this, but... */ |
|
|
846 |
#ifndef CONFIG_ALPHA_UAC_SYSCTL |
797 |
if (test_thread_flag (TIF_UAC_NOFIX)) |
847 |
if (test_thread_flag (TIF_UAC_NOFIX)) |
|
|
848 |
#else /* CONFIG_ALPHA_UAC_SYSCTL */ |
849 |
if (enabled_nofix) |
850 |
#endif /* CONFIG_ALPHA_UAC_SYSCTL */ |
798 |
return; |
851 |
return; |
799 |
|
852 |
|
800 |
/* Don't bother reading ds in the access check since we already |
853 |
/* Don't bother reading ds in the access check since we already |
Lines 1089-1091
trap_init(void)
Link Here
|
1089 |
wrent(entSys, 5); |
1142 |
wrent(entSys, 5); |
1090 |
wrent(entDbg, 6); |
1143 |
wrent(entDbg, 6); |
1091 |
} |
1144 |
} |
|
|
1145 |
|
1146 |
#ifdef CONFIG_ALPHA_UAC_SYSCTL |
1147 |
__initcall(init_uac_sysctl); |
1148 |
#endif |