diff options
-rw-r--r-- | arch/sparc/include/asm/cpudata_64.h | 2 | ||||
-rw-r--r-- | arch/sparc/include/uapi/asm/unistd.h | 3 | ||||
-rw-r--r-- | arch/sparc/kernel/auxio_64.c | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/perf_event.c | 26 | ||||
-rw-r--r-- | arch/sparc/kernel/power.c | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/prom_32.c | 26 | ||||
-rw-r--r-- | arch/sparc/kernel/prom_64.c | 68 | ||||
-rw-r--r-- | arch/sparc/kernel/rtrap_64.S | 3 | ||||
-rw-r--r-- | arch/sparc/kernel/systbls_32.S | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/systbls_64.S | 4 | ||||
-rw-r--r-- | drivers/block/sunvdc.c | 14 |
11 files changed, 91 insertions, 65 deletions
diff --git a/arch/sparc/include/asm/cpudata_64.h b/arch/sparc/include/asm/cpudata_64.h index 666d6b5c0440..9c3fc03abe9a 100644 --- a/arch/sparc/include/asm/cpudata_64.h +++ b/arch/sparc/include/asm/cpudata_64.h | |||
@@ -28,7 +28,7 @@ typedef struct { | |||
28 | unsigned short sock_id; /* physical package */ | 28 | unsigned short sock_id; /* physical package */ |
29 | unsigned short core_id; | 29 | unsigned short core_id; |
30 | unsigned short max_cache_id; /* groupings of highest shared cache */ | 30 | unsigned short max_cache_id; /* groupings of highest shared cache */ |
31 | unsigned short proc_id; /* strand (aka HW thread) id */ | 31 | signed short proc_id; /* strand (aka HW thread) id */ |
32 | } cpuinfo_sparc; | 32 | } cpuinfo_sparc; |
33 | 33 | ||
34 | DECLARE_PER_CPU(cpuinfo_sparc, __cpu_data); | 34 | DECLARE_PER_CPU(cpuinfo_sparc, __cpu_data); |
diff --git a/arch/sparc/include/uapi/asm/unistd.h b/arch/sparc/include/uapi/asm/unistd.h index 09acf0ddec10..45b4bf1875e6 100644 --- a/arch/sparc/include/uapi/asm/unistd.h +++ b/arch/sparc/include/uapi/asm/unistd.h | |||
@@ -427,8 +427,9 @@ | |||
427 | #define __NR_preadv2 358 | 427 | #define __NR_preadv2 358 |
428 | #define __NR_pwritev2 359 | 428 | #define __NR_pwritev2 359 |
429 | #define __NR_statx 360 | 429 | #define __NR_statx 360 |
430 | #define __NR_io_pgetevents 361 | ||
430 | 431 | ||
431 | #define NR_syscalls 361 | 432 | #define NR_syscalls 362 |
432 | 433 | ||
433 | /* Bitmask values returned from kern_features system call. */ | 434 | /* Bitmask values returned from kern_features system call. */ |
434 | #define KERN_FEATURE_MIXED_MODE_STACK 0x00000001 | 435 | #define KERN_FEATURE_MIXED_MODE_STACK 0x00000001 |
diff --git a/arch/sparc/kernel/auxio_64.c b/arch/sparc/kernel/auxio_64.c index cc42225c20f3..4e8f56c3793c 100644 --- a/arch/sparc/kernel/auxio_64.c +++ b/arch/sparc/kernel/auxio_64.c | |||
@@ -115,8 +115,8 @@ static int auxio_probe(struct platform_device *dev) | |||
115 | auxio_devtype = AUXIO_TYPE_SBUS; | 115 | auxio_devtype = AUXIO_TYPE_SBUS; |
116 | size = 1; | 116 | size = 1; |
117 | } else { | 117 | } else { |
118 | printk("auxio: Unknown parent bus type [%pOFn]\n", | 118 | printk("auxio: Unknown parent bus type [%s]\n", |
119 | dp->parent); | 119 | dp->parent->name); |
120 | return -ENODEV; | 120 | return -ENODEV; |
121 | } | 121 | } |
122 | auxio_register = of_ioremap(&dev->resource[0], 0, size, "auxio"); | 122 | auxio_register = of_ioremap(&dev->resource[0], 0, size, "auxio"); |
diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c index d3149baaa33c..67b3e6b3ce5d 100644 --- a/arch/sparc/kernel/perf_event.c +++ b/arch/sparc/kernel/perf_event.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <asm/cpudata.h> | 24 | #include <asm/cpudata.h> |
25 | #include <linux/uaccess.h> | 25 | #include <linux/uaccess.h> |
26 | #include <linux/atomic.h> | 26 | #include <linux/atomic.h> |
27 | #include <linux/sched/clock.h> | ||
27 | #include <asm/nmi.h> | 28 | #include <asm/nmi.h> |
28 | #include <asm/pcr.h> | 29 | #include <asm/pcr.h> |
29 | #include <asm/cacheflush.h> | 30 | #include <asm/cacheflush.h> |
@@ -927,6 +928,8 @@ static void read_in_all_counters(struct cpu_hw_events *cpuc) | |||
927 | sparc_perf_event_update(cp, &cp->hw, | 928 | sparc_perf_event_update(cp, &cp->hw, |
928 | cpuc->current_idx[i]); | 929 | cpuc->current_idx[i]); |
929 | cpuc->current_idx[i] = PIC_NO_INDEX; | 930 | cpuc->current_idx[i] = PIC_NO_INDEX; |
931 | if (cp->hw.state & PERF_HES_STOPPED) | ||
932 | cp->hw.state |= PERF_HES_ARCH; | ||
930 | } | 933 | } |
931 | } | 934 | } |
932 | } | 935 | } |
@@ -959,10 +962,12 @@ static void calculate_single_pcr(struct cpu_hw_events *cpuc) | |||
959 | 962 | ||
960 | enc = perf_event_get_enc(cpuc->events[i]); | 963 | enc = perf_event_get_enc(cpuc->events[i]); |
961 | cpuc->pcr[0] &= ~mask_for_index(idx); | 964 | cpuc->pcr[0] &= ~mask_for_index(idx); |
962 | if (hwc->state & PERF_HES_STOPPED) | 965 | if (hwc->state & PERF_HES_ARCH) { |
963 | cpuc->pcr[0] |= nop_for_index(idx); | 966 | cpuc->pcr[0] |= nop_for_index(idx); |
964 | else | 967 | } else { |
965 | cpuc->pcr[0] |= event_encoding(enc, idx); | 968 | cpuc->pcr[0] |= event_encoding(enc, idx); |
969 | hwc->state = 0; | ||
970 | } | ||
966 | } | 971 | } |
967 | out: | 972 | out: |
968 | cpuc->pcr[0] |= cpuc->event[0]->hw.config_base; | 973 | cpuc->pcr[0] |= cpuc->event[0]->hw.config_base; |
@@ -988,6 +993,9 @@ static void calculate_multiple_pcrs(struct cpu_hw_events *cpuc) | |||
988 | 993 | ||
989 | cpuc->current_idx[i] = idx; | 994 | cpuc->current_idx[i] = idx; |
990 | 995 | ||
996 | if (cp->hw.state & PERF_HES_ARCH) | ||
997 | continue; | ||
998 | |||
991 | sparc_pmu_start(cp, PERF_EF_RELOAD); | 999 | sparc_pmu_start(cp, PERF_EF_RELOAD); |
992 | } | 1000 | } |
993 | out: | 1001 | out: |
@@ -1079,6 +1087,8 @@ static void sparc_pmu_start(struct perf_event *event, int flags) | |||
1079 | event->hw.state = 0; | 1087 | event->hw.state = 0; |
1080 | 1088 | ||
1081 | sparc_pmu_enable_event(cpuc, &event->hw, idx); | 1089 | sparc_pmu_enable_event(cpuc, &event->hw, idx); |
1090 | |||
1091 | perf_event_update_userpage(event); | ||
1082 | } | 1092 | } |
1083 | 1093 | ||
1084 | static void sparc_pmu_stop(struct perf_event *event, int flags) | 1094 | static void sparc_pmu_stop(struct perf_event *event, int flags) |
@@ -1371,9 +1381,9 @@ static int sparc_pmu_add(struct perf_event *event, int ef_flags) | |||
1371 | cpuc->events[n0] = event->hw.event_base; | 1381 | cpuc->events[n0] = event->hw.event_base; |
1372 | cpuc->current_idx[n0] = PIC_NO_INDEX; | 1382 | cpuc->current_idx[n0] = PIC_NO_INDEX; |
1373 | 1383 | ||
1374 | event->hw.state = PERF_HES_UPTODATE; | 1384 | event->hw.state = PERF_HES_UPTODATE | PERF_HES_STOPPED; |
1375 | if (!(ef_flags & PERF_EF_START)) | 1385 | if (!(ef_flags & PERF_EF_START)) |
1376 | event->hw.state |= PERF_HES_STOPPED; | 1386 | event->hw.state |= PERF_HES_ARCH; |
1377 | 1387 | ||
1378 | /* | 1388 | /* |
1379 | * If group events scheduling transaction was started, | 1389 | * If group events scheduling transaction was started, |
@@ -1603,6 +1613,8 @@ static int __kprobes perf_event_nmi_handler(struct notifier_block *self, | |||
1603 | struct perf_sample_data data; | 1613 | struct perf_sample_data data; |
1604 | struct cpu_hw_events *cpuc; | 1614 | struct cpu_hw_events *cpuc; |
1605 | struct pt_regs *regs; | 1615 | struct pt_regs *regs; |
1616 | u64 finish_clock; | ||
1617 | u64 start_clock; | ||
1606 | int i; | 1618 | int i; |
1607 | 1619 | ||
1608 | if (!atomic_read(&active_events)) | 1620 | if (!atomic_read(&active_events)) |
@@ -1616,6 +1628,8 @@ static int __kprobes perf_event_nmi_handler(struct notifier_block *self, | |||
1616 | return NOTIFY_DONE; | 1628 | return NOTIFY_DONE; |
1617 | } | 1629 | } |
1618 | 1630 | ||
1631 | start_clock = sched_clock(); | ||
1632 | |||
1619 | regs = args->regs; | 1633 | regs = args->regs; |
1620 | 1634 | ||
1621 | cpuc = this_cpu_ptr(&cpu_hw_events); | 1635 | cpuc = this_cpu_ptr(&cpu_hw_events); |
@@ -1654,6 +1668,10 @@ static int __kprobes perf_event_nmi_handler(struct notifier_block *self, | |||
1654 | sparc_pmu_stop(event, 0); | 1668 | sparc_pmu_stop(event, 0); |
1655 | } | 1669 | } |
1656 | 1670 | ||
1671 | finish_clock = sched_clock(); | ||
1672 | |||
1673 | perf_sample_event_took(finish_clock - start_clock); | ||
1674 | |||
1657 | return NOTIFY_STOP; | 1675 | return NOTIFY_STOP; |
1658 | } | 1676 | } |
1659 | 1677 | ||
diff --git a/arch/sparc/kernel/power.c b/arch/sparc/kernel/power.c index d941875dd718..92627abce311 100644 --- a/arch/sparc/kernel/power.c +++ b/arch/sparc/kernel/power.c | |||
@@ -41,8 +41,8 @@ static int power_probe(struct platform_device *op) | |||
41 | 41 | ||
42 | power_reg = of_ioremap(res, 0, 0x4, "power"); | 42 | power_reg = of_ioremap(res, 0, 0x4, "power"); |
43 | 43 | ||
44 | printk(KERN_INFO "%pOFn: Control reg at %llx\n", | 44 | printk(KERN_INFO "%s: Control reg at %llx\n", |
45 | op->dev.of_node, res->start); | 45 | op->dev.of_node->name, res->start); |
46 | 46 | ||
47 | if (has_button_interrupt(irq, op->dev.of_node)) { | 47 | if (has_button_interrupt(irq, op->dev.of_node)) { |
48 | if (request_irq(irq, | 48 | if (request_irq(irq, |
diff --git a/arch/sparc/kernel/prom_32.c b/arch/sparc/kernel/prom_32.c index 17c87d29ff20..b51cbb9e87dc 100644 --- a/arch/sparc/kernel/prom_32.c +++ b/arch/sparc/kernel/prom_32.c | |||
@@ -68,8 +68,8 @@ static void __init sparc32_path_component(struct device_node *dp, char *tmp_buf) | |||
68 | return; | 68 | return; |
69 | 69 | ||
70 | regs = rprop->value; | 70 | regs = rprop->value; |
71 | sprintf(tmp_buf, "%pOFn@%x,%x", | 71 | sprintf(tmp_buf, "%s@%x,%x", |
72 | dp, | 72 | dp->name, |
73 | regs->which_io, regs->phys_addr); | 73 | regs->which_io, regs->phys_addr); |
74 | } | 74 | } |
75 | 75 | ||
@@ -84,8 +84,8 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf) | |||
84 | return; | 84 | return; |
85 | 85 | ||
86 | regs = prop->value; | 86 | regs = prop->value; |
87 | sprintf(tmp_buf, "%pOFn@%x,%x", | 87 | sprintf(tmp_buf, "%s@%x,%x", |
88 | dp, | 88 | dp->name, |
89 | regs->which_io, | 89 | regs->which_io, |
90 | regs->phys_addr); | 90 | regs->phys_addr); |
91 | } | 91 | } |
@@ -104,13 +104,13 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf) | |||
104 | regs = prop->value; | 104 | regs = prop->value; |
105 | devfn = (regs->phys_hi >> 8) & 0xff; | 105 | devfn = (regs->phys_hi >> 8) & 0xff; |
106 | if (devfn & 0x07) { | 106 | if (devfn & 0x07) { |
107 | sprintf(tmp_buf, "%pOFn@%x,%x", | 107 | sprintf(tmp_buf, "%s@%x,%x", |
108 | dp, | 108 | dp->name, |
109 | devfn >> 3, | 109 | devfn >> 3, |
110 | devfn & 0x07); | 110 | devfn & 0x07); |
111 | } else { | 111 | } else { |
112 | sprintf(tmp_buf, "%pOFn@%x", | 112 | sprintf(tmp_buf, "%s@%x", |
113 | dp, | 113 | dp->name, |
114 | devfn >> 3); | 114 | devfn >> 3); |
115 | } | 115 | } |
116 | } | 116 | } |
@@ -127,8 +127,8 @@ static void __init ebus_path_component(struct device_node *dp, char *tmp_buf) | |||
127 | 127 | ||
128 | regs = prop->value; | 128 | regs = prop->value; |
129 | 129 | ||
130 | sprintf(tmp_buf, "%pOFn@%x,%x", | 130 | sprintf(tmp_buf, "%s@%x,%x", |
131 | dp, | 131 | dp->name, |
132 | regs->which_io, regs->phys_addr); | 132 | regs->which_io, regs->phys_addr); |
133 | } | 133 | } |
134 | 134 | ||
@@ -167,8 +167,8 @@ static void __init ambapp_path_component(struct device_node *dp, char *tmp_buf) | |||
167 | return; | 167 | return; |
168 | device = prop->value; | 168 | device = prop->value; |
169 | 169 | ||
170 | sprintf(tmp_buf, "%pOFn:%d:%d@%x,%x", | 170 | sprintf(tmp_buf, "%s:%d:%d@%x,%x", |
171 | dp, *vendor, *device, | 171 | dp->name, *vendor, *device, |
172 | *intr, reg0); | 172 | *intr, reg0); |
173 | } | 173 | } |
174 | 174 | ||
@@ -201,7 +201,7 @@ char * __init build_path_component(struct device_node *dp) | |||
201 | tmp_buf[0] = '\0'; | 201 | tmp_buf[0] = '\0'; |
202 | __build_path_component(dp, tmp_buf); | 202 | __build_path_component(dp, tmp_buf); |
203 | if (tmp_buf[0] == '\0') | 203 | if (tmp_buf[0] == '\0') |
204 | snprintf(tmp_buf, sizeof(tmp_buf), "%pOFn", dp); | 204 | strcpy(tmp_buf, dp->name); |
205 | 205 | ||
206 | n = prom_early_alloc(strlen(tmp_buf) + 1); | 206 | n = prom_early_alloc(strlen(tmp_buf) + 1); |
207 | strcpy(n, tmp_buf); | 207 | strcpy(n, tmp_buf); |
diff --git a/arch/sparc/kernel/prom_64.c b/arch/sparc/kernel/prom_64.c index 6220411ce8fc..baeaeed64993 100644 --- a/arch/sparc/kernel/prom_64.c +++ b/arch/sparc/kernel/prom_64.c | |||
@@ -82,8 +82,8 @@ static void __init sun4v_path_component(struct device_node *dp, char *tmp_buf) | |||
82 | 82 | ||
83 | regs = rprop->value; | 83 | regs = rprop->value; |
84 | if (!of_node_is_root(dp->parent)) { | 84 | if (!of_node_is_root(dp->parent)) { |
85 | sprintf(tmp_buf, "%pOFn@%x,%x", | 85 | sprintf(tmp_buf, "%s@%x,%x", |
86 | dp, | 86 | dp->name, |
87 | (unsigned int) (regs->phys_addr >> 32UL), | 87 | (unsigned int) (regs->phys_addr >> 32UL), |
88 | (unsigned int) (regs->phys_addr & 0xffffffffUL)); | 88 | (unsigned int) (regs->phys_addr & 0xffffffffUL)); |
89 | return; | 89 | return; |
@@ -97,17 +97,17 @@ static void __init sun4v_path_component(struct device_node *dp, char *tmp_buf) | |||
97 | const char *prefix = (type == 0) ? "m" : "i"; | 97 | const char *prefix = (type == 0) ? "m" : "i"; |
98 | 98 | ||
99 | if (low_bits) | 99 | if (low_bits) |
100 | sprintf(tmp_buf, "%pOFn@%s%x,%x", | 100 | sprintf(tmp_buf, "%s@%s%x,%x", |
101 | dp, prefix, | 101 | dp->name, prefix, |
102 | high_bits, low_bits); | 102 | high_bits, low_bits); |
103 | else | 103 | else |
104 | sprintf(tmp_buf, "%pOFn@%s%x", | 104 | sprintf(tmp_buf, "%s@%s%x", |
105 | dp, | 105 | dp->name, |
106 | prefix, | 106 | prefix, |
107 | high_bits); | 107 | high_bits); |
108 | } else if (type == 12) { | 108 | } else if (type == 12) { |
109 | sprintf(tmp_buf, "%pOFn@%x", | 109 | sprintf(tmp_buf, "%s@%x", |
110 | dp, high_bits); | 110 | dp->name, high_bits); |
111 | } | 111 | } |
112 | } | 112 | } |
113 | 113 | ||
@@ -122,8 +122,8 @@ static void __init sun4u_path_component(struct device_node *dp, char *tmp_buf) | |||
122 | 122 | ||
123 | regs = prop->value; | 123 | regs = prop->value; |
124 | if (!of_node_is_root(dp->parent)) { | 124 | if (!of_node_is_root(dp->parent)) { |
125 | sprintf(tmp_buf, "%pOFn@%x,%x", | 125 | sprintf(tmp_buf, "%s@%x,%x", |
126 | dp, | 126 | dp->name, |
127 | (unsigned int) (regs->phys_addr >> 32UL), | 127 | (unsigned int) (regs->phys_addr >> 32UL), |
128 | (unsigned int) (regs->phys_addr & 0xffffffffUL)); | 128 | (unsigned int) (regs->phys_addr & 0xffffffffUL)); |
129 | return; | 129 | return; |
@@ -138,8 +138,8 @@ static void __init sun4u_path_component(struct device_node *dp, char *tmp_buf) | |||
138 | if (tlb_type >= cheetah) | 138 | if (tlb_type >= cheetah) |
139 | mask = 0x7fffff; | 139 | mask = 0x7fffff; |
140 | 140 | ||
141 | sprintf(tmp_buf, "%pOFn@%x,%x", | 141 | sprintf(tmp_buf, "%s@%x,%x", |
142 | dp, | 142 | dp->name, |
143 | *(u32 *)prop->value, | 143 | *(u32 *)prop->value, |
144 | (unsigned int) (regs->phys_addr & mask)); | 144 | (unsigned int) (regs->phys_addr & mask)); |
145 | } | 145 | } |
@@ -156,8 +156,8 @@ static void __init sbus_path_component(struct device_node *dp, char *tmp_buf) | |||
156 | return; | 156 | return; |
157 | 157 | ||
158 | regs = prop->value; | 158 | regs = prop->value; |
159 | sprintf(tmp_buf, "%pOFn@%x,%x", | 159 | sprintf(tmp_buf, "%s@%x,%x", |
160 | dp, | 160 | dp->name, |
161 | regs->which_io, | 161 | regs->which_io, |
162 | regs->phys_addr); | 162 | regs->phys_addr); |
163 | } | 163 | } |
@@ -176,13 +176,13 @@ static void __init pci_path_component(struct device_node *dp, char *tmp_buf) | |||
176 | regs = prop->value; | 176 | regs = prop->value; |
177 | devfn = (regs->phys_hi >> 8) & 0xff; | 177 | devfn = (regs->phys_hi >> 8) & 0xff; |
178 | if (devfn & 0x07) { | 178 | if (devfn & 0x07) { |
179 | sprintf(tmp_buf, "%pOFn@%x,%x", | 179 | sprintf(tmp_buf, "%s@%x,%x", |
180 | dp, | 180 | dp->name, |
181 | devfn >> 3, | 181 | devfn >> 3, |
182 | devfn & 0x07); | 182 | devfn & 0x07); |
183 | } else { | 183 | } else { |
184 | sprintf(tmp_buf, "%pOFn@%x", | 184 | sprintf(tmp_buf, "%s@%x", |
185 | dp, | 185 | dp->name, |
186 | devfn >> 3); | 186 | devfn >> 3); |
187 | } | 187 | } |
188 | } | 188 | } |
@@ -203,8 +203,8 @@ static void __init upa_path_component(struct device_node *dp, char *tmp_buf) | |||
203 | if (!prop) | 203 | if (!prop) |
204 | return; | 204 | return; |
205 | 205 | ||
206 | sprintf(tmp_buf, "%pOFn@%x,%x", | 206 | sprintf(tmp_buf, "%s@%x,%x", |
207 | dp, | 207 | dp->name, |
208 | *(u32 *) prop->value, | 208 | *(u32 *) prop->value, |
209 | (unsigned int) (regs->phys_addr & 0xffffffffUL)); | 209 | (unsigned int) (regs->phys_addr & 0xffffffffUL)); |
210 | } | 210 | } |
@@ -221,7 +221,7 @@ static void __init vdev_path_component(struct device_node *dp, char *tmp_buf) | |||
221 | 221 | ||
222 | regs = prop->value; | 222 | regs = prop->value; |
223 | 223 | ||
224 | sprintf(tmp_buf, "%pOFn@%x", dp, *regs); | 224 | sprintf(tmp_buf, "%s@%x", dp->name, *regs); |
225 | } | 225 | } |
226 | 226 | ||
227 | /* "name@addrhi,addrlo" */ | 227 | /* "name@addrhi,addrlo" */ |
@@ -236,8 +236,8 @@ static void __init ebus_path_component(struct device_node *dp, char *tmp_buf) | |||
236 | 236 | ||
237 | regs = prop->value; | 237 | regs = prop->value; |
238 | 238 | ||
239 | sprintf(tmp_buf, "%pOFn@%x,%x", | 239 | sprintf(tmp_buf, "%s@%x,%x", |
240 | dp, | 240 | dp->name, |
241 | (unsigned int) (regs->phys_addr >> 32UL), | 241 | (unsigned int) (regs->phys_addr >> 32UL), |
242 | (unsigned int) (regs->phys_addr & 0xffffffffUL)); | 242 | (unsigned int) (regs->phys_addr & 0xffffffffUL)); |
243 | } | 243 | } |
@@ -257,8 +257,8 @@ static void __init i2c_path_component(struct device_node *dp, char *tmp_buf) | |||
257 | /* This actually isn't right... should look at the #address-cells | 257 | /* This actually isn't right... should look at the #address-cells |
258 | * property of the i2c bus node etc. etc. | 258 | * property of the i2c bus node etc. etc. |
259 | */ | 259 | */ |
260 | sprintf(tmp_buf, "%pOFn@%x,%x", | 260 | sprintf(tmp_buf, "%s@%x,%x", |
261 | dp, regs[0], regs[1]); | 261 | dp->name, regs[0], regs[1]); |
262 | } | 262 | } |
263 | 263 | ||
264 | /* "name@reg0[,reg1]" */ | 264 | /* "name@reg0[,reg1]" */ |
@@ -274,11 +274,11 @@ static void __init usb_path_component(struct device_node *dp, char *tmp_buf) | |||
274 | regs = prop->value; | 274 | regs = prop->value; |
275 | 275 | ||
276 | if (prop->length == sizeof(u32) || regs[1] == 1) { | 276 | if (prop->length == sizeof(u32) || regs[1] == 1) { |
277 | sprintf(tmp_buf, "%pOFn@%x", | 277 | sprintf(tmp_buf, "%s@%x", |
278 | dp, regs[0]); | 278 | dp->name, regs[0]); |
279 | } else { | 279 | } else { |
280 | sprintf(tmp_buf, "%pOFn@%x,%x", | 280 | sprintf(tmp_buf, "%s@%x,%x", |
281 | dp, regs[0], regs[1]); | 281 | dp->name, regs[0], regs[1]); |
282 | } | 282 | } |
283 | } | 283 | } |
284 | 284 | ||
@@ -295,11 +295,11 @@ static void __init ieee1394_path_component(struct device_node *dp, char *tmp_buf | |||
295 | regs = prop->value; | 295 | regs = prop->value; |
296 | 296 | ||
297 | if (regs[2] || regs[3]) { | 297 | if (regs[2] || regs[3]) { |
298 | sprintf(tmp_buf, "%pOFn@%08x%08x,%04x%08x", | 298 | sprintf(tmp_buf, "%s@%08x%08x,%04x%08x", |
299 | dp, regs[0], regs[1], regs[2], regs[3]); | 299 | dp->name, regs[0], regs[1], regs[2], regs[3]); |
300 | } else { | 300 | } else { |
301 | sprintf(tmp_buf, "%pOFn@%08x%08x", | 301 | sprintf(tmp_buf, "%s@%08x%08x", |
302 | dp, regs[0], regs[1]); | 302 | dp->name, regs[0], regs[1]); |
303 | } | 303 | } |
304 | } | 304 | } |
305 | 305 | ||
@@ -361,7 +361,7 @@ char * __init build_path_component(struct device_node *dp) | |||
361 | tmp_buf[0] = '\0'; | 361 | tmp_buf[0] = '\0'; |
362 | __build_path_component(dp, tmp_buf); | 362 | __build_path_component(dp, tmp_buf); |
363 | if (tmp_buf[0] == '\0') | 363 | if (tmp_buf[0] == '\0') |
364 | snprintf(tmp_buf, sizeof(tmp_buf), "%pOFn", dp); | 364 | strcpy(tmp_buf, dp->name); |
365 | 365 | ||
366 | n = prom_early_alloc(strlen(tmp_buf) + 1); | 366 | n = prom_early_alloc(strlen(tmp_buf) + 1); |
367 | strcpy(n, tmp_buf); | 367 | strcpy(n, tmp_buf); |
diff --git a/arch/sparc/kernel/rtrap_64.S b/arch/sparc/kernel/rtrap_64.S index f6528884a2c8..4073e2b87dd0 100644 --- a/arch/sparc/kernel/rtrap_64.S +++ b/arch/sparc/kernel/rtrap_64.S | |||
@@ -84,8 +84,9 @@ __handle_signal: | |||
84 | ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 | 84 | ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 |
85 | sethi %hi(0xf << 20), %l4 | 85 | sethi %hi(0xf << 20), %l4 |
86 | and %l1, %l4, %l4 | 86 | and %l1, %l4, %l4 |
87 | andn %l1, %l4, %l1 | ||
87 | ba,pt %xcc, __handle_preemption_continue | 88 | ba,pt %xcc, __handle_preemption_continue |
88 | andn %l1, %l4, %l1 | 89 | srl %l4, 20, %l4 |
89 | 90 | ||
90 | /* When returning from a NMI (%pil==15) interrupt we want to | 91 | /* When returning from a NMI (%pil==15) interrupt we want to |
91 | * avoid running softirqs, doing IRQ tracing, preempting, etc. | 92 | * avoid running softirqs, doing IRQ tracing, preempting, etc. |
diff --git a/arch/sparc/kernel/systbls_32.S b/arch/sparc/kernel/systbls_32.S index 12bee14b552c..621a363098ec 100644 --- a/arch/sparc/kernel/systbls_32.S +++ b/arch/sparc/kernel/systbls_32.S | |||
@@ -90,4 +90,4 @@ sys_call_table: | |||
90 | /*345*/ .long sys_renameat2, sys_seccomp, sys_getrandom, sys_memfd_create, sys_bpf | 90 | /*345*/ .long sys_renameat2, sys_seccomp, sys_getrandom, sys_memfd_create, sys_bpf |
91 | /*350*/ .long sys_execveat, sys_membarrier, sys_userfaultfd, sys_bind, sys_listen | 91 | /*350*/ .long sys_execveat, sys_membarrier, sys_userfaultfd, sys_bind, sys_listen |
92 | /*355*/ .long sys_setsockopt, sys_mlock2, sys_copy_file_range, sys_preadv2, sys_pwritev2 | 92 | /*355*/ .long sys_setsockopt, sys_mlock2, sys_copy_file_range, sys_preadv2, sys_pwritev2 |
93 | /*360*/ .long sys_statx | 93 | /*360*/ .long sys_statx, sys_io_pgetevents |
diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S index 387ef993880a..bb68c805b891 100644 --- a/arch/sparc/kernel/systbls_64.S +++ b/arch/sparc/kernel/systbls_64.S | |||
@@ -91,7 +91,7 @@ sys_call_table32: | |||
91 | .word sys_renameat2, sys_seccomp, sys_getrandom, sys_memfd_create, sys_bpf | 91 | .word sys_renameat2, sys_seccomp, sys_getrandom, sys_memfd_create, sys_bpf |
92 | /*350*/ .word sys32_execveat, sys_membarrier, sys_userfaultfd, sys_bind, sys_listen | 92 | /*350*/ .word sys32_execveat, sys_membarrier, sys_userfaultfd, sys_bind, sys_listen |
93 | .word compat_sys_setsockopt, sys_mlock2, sys_copy_file_range, compat_sys_preadv2, compat_sys_pwritev2 | 93 | .word compat_sys_setsockopt, sys_mlock2, sys_copy_file_range, compat_sys_preadv2, compat_sys_pwritev2 |
94 | /*360*/ .word sys_statx | 94 | /*360*/ .word sys_statx, compat_sys_io_pgetevents |
95 | 95 | ||
96 | #endif /* CONFIG_COMPAT */ | 96 | #endif /* CONFIG_COMPAT */ |
97 | 97 | ||
@@ -173,4 +173,4 @@ sys_call_table: | |||
173 | .word sys_renameat2, sys_seccomp, sys_getrandom, sys_memfd_create, sys_bpf | 173 | .word sys_renameat2, sys_seccomp, sys_getrandom, sys_memfd_create, sys_bpf |
174 | /*350*/ .word sys64_execveat, sys_membarrier, sys_userfaultfd, sys_bind, sys_listen | 174 | /*350*/ .word sys64_execveat, sys_membarrier, sys_userfaultfd, sys_bind, sys_listen |
175 | .word sys_setsockopt, sys_mlock2, sys_copy_file_range, sys_preadv2, sys_pwritev2 | 175 | .word sys_setsockopt, sys_mlock2, sys_copy_file_range, sys_preadv2, sys_pwritev2 |
176 | /*360*/ .word sys_statx | 176 | /*360*/ .word sys_statx, sys_io_pgetevents |
diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c index 5ca56bfae63c..f68e9baffad7 100644 --- a/drivers/block/sunvdc.c +++ b/drivers/block/sunvdc.c | |||
@@ -36,6 +36,10 @@ MODULE_VERSION(DRV_MODULE_VERSION); | |||
36 | #define VDC_TX_RING_SIZE 512 | 36 | #define VDC_TX_RING_SIZE 512 |
37 | #define VDC_DEFAULT_BLK_SIZE 512 | 37 | #define VDC_DEFAULT_BLK_SIZE 512 |
38 | 38 | ||
39 | #define MAX_XFER_BLKS (128 * 1024) | ||
40 | #define MAX_XFER_SIZE (MAX_XFER_BLKS / VDC_DEFAULT_BLK_SIZE) | ||
41 | #define MAX_RING_COOKIES ((MAX_XFER_BLKS / PAGE_SIZE) + 2) | ||
42 | |||
39 | #define WAITING_FOR_LINK_UP 0x01 | 43 | #define WAITING_FOR_LINK_UP 0x01 |
40 | #define WAITING_FOR_TX_SPACE 0x02 | 44 | #define WAITING_FOR_TX_SPACE 0x02 |
41 | #define WAITING_FOR_GEN_CMD 0x04 | 45 | #define WAITING_FOR_GEN_CMD 0x04 |
@@ -450,7 +454,7 @@ static int __send_request(struct request *req) | |||
450 | { | 454 | { |
451 | struct vdc_port *port = req->rq_disk->private_data; | 455 | struct vdc_port *port = req->rq_disk->private_data; |
452 | struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING]; | 456 | struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING]; |
453 | struct scatterlist sg[port->ring_cookies]; | 457 | struct scatterlist sg[MAX_RING_COOKIES]; |
454 | struct vdc_req_entry *rqe; | 458 | struct vdc_req_entry *rqe; |
455 | struct vio_disk_desc *desc; | 459 | struct vio_disk_desc *desc; |
456 | unsigned int map_perm; | 460 | unsigned int map_perm; |
@@ -458,6 +462,9 @@ static int __send_request(struct request *req) | |||
458 | u64 len; | 462 | u64 len; |
459 | u8 op; | 463 | u8 op; |
460 | 464 | ||
465 | if (WARN_ON(port->ring_cookies > MAX_RING_COOKIES)) | ||
466 | return -EINVAL; | ||
467 | |||
461 | map_perm = LDC_MAP_SHADOW | LDC_MAP_DIRECT | LDC_MAP_IO; | 468 | map_perm = LDC_MAP_SHADOW | LDC_MAP_DIRECT | LDC_MAP_IO; |
462 | 469 | ||
463 | if (rq_data_dir(req) == READ) { | 470 | if (rq_data_dir(req) == READ) { |
@@ -984,9 +991,8 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id) | |||
984 | goto err_out_free_port; | 991 | goto err_out_free_port; |
985 | 992 | ||
986 | port->vdisk_block_size = VDC_DEFAULT_BLK_SIZE; | 993 | port->vdisk_block_size = VDC_DEFAULT_BLK_SIZE; |
987 | port->max_xfer_size = ((128 * 1024) / port->vdisk_block_size); | 994 | port->max_xfer_size = MAX_XFER_SIZE; |
988 | port->ring_cookies = ((port->max_xfer_size * | 995 | port->ring_cookies = MAX_RING_COOKIES; |
989 | port->vdisk_block_size) / PAGE_SIZE) + 2; | ||
990 | 996 | ||
991 | err = vio_ldc_alloc(&port->vio, &vdc_ldc_cfg, port); | 997 | err = vio_ldc_alloc(&port->vio, &vdc_ldc_cfg, port); |
992 | if (err) | 998 | if (err) |