1 | |
2 | #include <asm/hwrpb.h> |
3 | #include <linux/device.h> |
4 | |
5 | |
6 | #ifdef CONFIG_SYSFS |
7 | |
8 | static int cpu_is_ev6_or_later(void) |
9 | { |
10 | struct percpu_struct *cpu; |
11 | unsigned long cputype; |
12 | |
13 | cpu = (struct percpu_struct *)((char *)hwrpb + hwrpb->processor_offset); |
14 | cputype = cpu->type & 0xffffffff; |
15 | /* Include all of EV6, EV67, EV68, EV7, EV79 and EV69. */ |
16 | return (cputype == EV6_CPU) || ((cputype >= EV67_CPU) && (cputype <= EV69_CPU)); |
17 | } |
18 | |
19 | ssize_t cpu_show_meltdown(struct device *dev, |
20 | struct device_attribute *attr, char *buf) |
21 | { |
22 | if (cpu_is_ev6_or_later()) |
23 | return sprintf(buf, fmt: "Vulnerable\n" ); |
24 | else |
25 | return sprintf(buf, fmt: "Not affected\n" ); |
26 | } |
27 | |
28 | ssize_t cpu_show_spectre_v1(struct device *dev, |
29 | struct device_attribute *attr, char *buf) |
30 | { |
31 | if (cpu_is_ev6_or_later()) |
32 | return sprintf(buf, fmt: "Vulnerable\n" ); |
33 | else |
34 | return sprintf(buf, fmt: "Not affected\n" ); |
35 | } |
36 | |
37 | ssize_t cpu_show_spectre_v2(struct device *dev, |
38 | struct device_attribute *attr, char *buf) |
39 | { |
40 | if (cpu_is_ev6_or_later()) |
41 | return sprintf(buf, fmt: "Vulnerable\n" ); |
42 | else |
43 | return sprintf(buf, fmt: "Not affected\n" ); |
44 | } |
45 | #endif |
46 | |