forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/arch/powerpc/platforms/cell/spufs/file.c
....@@ -1,27 +1,15 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * SPU file system -- file contents
34 *
45 * (C) Copyright IBM Deutschland Entwicklung GmbH 2005
56 *
67 * Author: Arnd Bergmann <arndb@de.ibm.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation; either version 2, or (at your option)
11
- * any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- * GNU General Public License for more details.
17
- *
18
- * You should have received a copy of the GNU General Public License
19
- * along with this program; if not, write to the Free Software
20
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
218 */
229
2310 #undef DEBUG
2411
12
+#include <linux/coredump.h>
2513 #include <linux/fs.h>
2614 #include <linux/ioctl.h>
2715 #include <linux/export.h>
....@@ -142,6 +130,14 @@
142130 return ret;
143131 }
144132
133
+static ssize_t spufs_dump_emit(struct coredump_params *cprm, void *buf,
134
+ size_t size)
135
+{
136
+ if (!dump_emit(cprm, buf, size))
137
+ return -EIO;
138
+ return size;
139
+}
140
+
145141 #define DEFINE_SPUFS_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \
146142 static int __fops ## _open(struct inode *inode, struct file *file) \
147143 { \
....@@ -185,12 +181,9 @@
185181 }
186182
187183 static ssize_t
188
-__spufs_mem_read(struct spu_context *ctx, char __user *buffer,
189
- size_t size, loff_t *pos)
184
+spufs_mem_dump(struct spu_context *ctx, struct coredump_params *cprm)
190185 {
191
- char *local_store = ctx->ops->get_ls(ctx);
192
- return simple_read_from_buffer(buffer, size, pos, local_store,
193
- LS_SIZE);
186
+ return spufs_dump_emit(cprm, ctx->ops->get_ls(ctx), LS_SIZE);
194187 }
195188
196189 static ssize_t
....@@ -203,7 +196,8 @@
203196 ret = spu_acquire(ctx);
204197 if (ret)
205198 return ret;
206
- ret = __spufs_mem_read(ctx, buffer, size, pos);
199
+ ret = simple_read_from_buffer(buffer, size, pos, ctx->ops->get_ls(ctx),
200
+ LS_SIZE);
207201 spu_release(ctx);
208202
209203 return ret;
....@@ -331,7 +325,7 @@
331325 return VM_FAULT_SIGBUS;
332326
333327 /*
334
- * Because we release the mmap_sem, the context may be destroyed while
328
+ * Because we release the mmap_lock, the context may be destroyed while
335329 * we're in spu_wait. Grab an extra reference so it isn't destroyed
336330 * in the meantime.
337331 */
....@@ -340,8 +334,8 @@
340334 /*
341335 * We have to wait for context to be loaded before we have
342336 * pages to hand out to the user, but we don't want to wait
343
- * with the mmap_sem held.
344
- * It is possible to drop the mmap_sem here, but then we need
337
+ * with the mmap_lock held.
338
+ * It is possible to drop the mmap_lock here, but then we need
345339 * to return VM_FAULT_NOPAGE because the mappings may have
346340 * hanged.
347341 */
....@@ -349,11 +343,11 @@
349343 goto refault;
350344
351345 if (ctx->state == SPU_STATE_SAVED) {
352
- up_read(&current->mm->mmap_sem);
346
+ mmap_read_unlock(current->mm);
353347 spu_context_nospu_trace(spufs_ps_fault__sleep, ctx);
354348 err = spufs_wait(ctx->run_wq, ctx->state == SPU_STATE_RUNNABLE);
355349 spu_context_trace(spufs_ps_fault__wake, ctx, ctx->spu);
356
- down_read(&current->mm->mmap_sem);
350
+ mmap_read_lock(current->mm);
357351 } else {
358352 area = ctx->spu->problem_phys + ps_offs;
359353 ret = vmf_insert_pfn(vmf->vma, vmf->address,
....@@ -459,7 +453,7 @@
459453 .release = spufs_cntl_release,
460454 .read = simple_attr_read,
461455 .write = simple_attr_write,
462
- .llseek = generic_file_llseek,
456
+ .llseek = no_llseek,
463457 .mmap = spufs_cntl_mmap,
464458 };
465459
....@@ -472,12 +466,10 @@
472466 }
473467
474468 static ssize_t
475
-__spufs_regs_read(struct spu_context *ctx, char __user *buffer,
476
- size_t size, loff_t *pos)
469
+spufs_regs_dump(struct spu_context *ctx, struct coredump_params *cprm)
477470 {
478
- struct spu_lscsa *lscsa = ctx->csa.lscsa;
479
- return simple_read_from_buffer(buffer, size, pos,
480
- lscsa->gprs, sizeof lscsa->gprs);
471
+ return spufs_dump_emit(cprm, ctx->csa.lscsa->gprs,
472
+ sizeof(ctx->csa.lscsa->gprs));
481473 }
482474
483475 static ssize_t
....@@ -495,7 +487,8 @@
495487 ret = spu_acquire_saved(ctx);
496488 if (ret)
497489 return ret;
498
- ret = __spufs_regs_read(ctx, buffer, size, pos);
490
+ ret = simple_read_from_buffer(buffer, size, pos, ctx->csa.lscsa->gprs,
491
+ sizeof(ctx->csa.lscsa->gprs));
499492 spu_release_saved(ctx);
500493 return ret;
501494 }
....@@ -530,12 +523,10 @@
530523 };
531524
532525 static ssize_t
533
-__spufs_fpcr_read(struct spu_context *ctx, char __user * buffer,
534
- size_t size, loff_t * pos)
526
+spufs_fpcr_dump(struct spu_context *ctx, struct coredump_params *cprm)
535527 {
536
- struct spu_lscsa *lscsa = ctx->csa.lscsa;
537
- return simple_read_from_buffer(buffer, size, pos,
538
- &lscsa->fpcr, sizeof(lscsa->fpcr));
528
+ return spufs_dump_emit(cprm, &ctx->csa.lscsa->fpcr,
529
+ sizeof(ctx->csa.lscsa->fpcr));
539530 }
540531
541532 static ssize_t
....@@ -548,7 +539,8 @@
548539 ret = spu_acquire_saved(ctx);
549540 if (ret)
550541 return ret;
551
- ret = __spufs_fpcr_read(ctx, buffer, size, pos);
542
+ ret = simple_read_from_buffer(buffer, size, pos, &ctx->csa.lscsa->fpcr,
543
+ sizeof(ctx->csa.lscsa->fpcr));
552544 spu_release_saved(ctx);
553545 return ret;
554546 }
....@@ -588,7 +580,7 @@
588580 struct spufs_inode_info *i = SPUFS_I(inode);
589581 file->private_data = i->i_ctx;
590582
591
- return nonseekable_open(inode, file);
583
+ return stream_open(inode, file);
592584 }
593585
594586 /*
....@@ -603,16 +595,11 @@
603595 size_t len, loff_t *pos)
604596 {
605597 struct spu_context *ctx = file->private_data;
606
- u32 mbox_data, __user *udata;
598
+ u32 mbox_data, __user *udata = (void __user *)buf;
607599 ssize_t count;
608600
609601 if (len < 4)
610602 return -EINVAL;
611
-
612
- if (!access_ok(VERIFY_WRITE, buf, len))
613
- return -EFAULT;
614
-
615
- udata = (void __user *)buf;
616603
617604 count = spu_acquire(ctx);
618605 if (count)
....@@ -629,7 +616,7 @@
629616 * but still need to return the data we have
630617 * read successfully so far.
631618 */
632
- ret = __put_user(mbox_data, udata);
619
+ ret = put_user(mbox_data, udata);
633620 if (ret) {
634621 if (!count)
635622 count = -EFAULT;
....@@ -711,16 +698,11 @@
711698 size_t len, loff_t *pos)
712699 {
713700 struct spu_context *ctx = file->private_data;
714
- u32 ibox_data, __user *udata;
701
+ u32 ibox_data, __user *udata = (void __user *)buf;
715702 ssize_t count;
716703
717704 if (len < 4)
718705 return -EINVAL;
719
-
720
- if (!access_ok(VERIFY_WRITE, buf, len))
721
- return -EFAULT;
722
-
723
- udata = (void __user *)buf;
724706
725707 count = spu_acquire(ctx);
726708 if (count)
....@@ -740,7 +722,7 @@
740722 }
741723
742724 /* if we can't write at all, return -EFAULT */
743
- count = __put_user(ibox_data, udata);
725
+ count = put_user(ibox_data, udata);
744726 if (count)
745727 goto out_unlock;
746728
....@@ -754,7 +736,7 @@
754736 * but still need to return the data we have
755737 * read successfully so far.
756738 */
757
- ret = __put_user(ibox_data, udata);
739
+ ret = put_user(ibox_data, udata);
758740 if (ret)
759741 break;
760742 }
....@@ -849,17 +831,13 @@
849831 size_t len, loff_t *pos)
850832 {
851833 struct spu_context *ctx = file->private_data;
852
- u32 wbox_data, __user *udata;
834
+ u32 wbox_data, __user *udata = (void __user *)buf;
853835 ssize_t count;
854836
855837 if (len < 4)
856838 return -EINVAL;
857839
858
- udata = (void __user *)buf;
859
- if (!access_ok(VERIFY_READ, buf, len))
860
- return -EFAULT;
861
-
862
- if (__get_user(wbox_data, udata))
840
+ if (get_user(wbox_data, udata))
863841 return -EFAULT;
864842
865843 count = spu_acquire(ctx);
....@@ -886,7 +864,7 @@
886864 /* write as much as possible */
887865 for (count = 4, udata++; (count + 4) <= len; count += 4, udata++) {
888866 int ret;
889
- ret = __get_user(wbox_data, udata);
867
+ ret = get_user(wbox_data, udata);
890868 if (ret)
891869 break;
892870
....@@ -980,28 +958,26 @@
980958 return 0;
981959 }
982960
983
-static ssize_t __spufs_signal1_read(struct spu_context *ctx, char __user *buf,
984
- size_t len, loff_t *pos)
961
+static ssize_t spufs_signal1_dump(struct spu_context *ctx,
962
+ struct coredump_params *cprm)
985963 {
986
- int ret = 0;
987
- u32 data;
964
+ if (!ctx->csa.spu_chnlcnt_RW[3])
965
+ return 0;
966
+ return spufs_dump_emit(cprm, &ctx->csa.spu_chnldata_RW[3],
967
+ sizeof(ctx->csa.spu_chnldata_RW[3]));
968
+}
988969
989
- if (len < 4)
970
+static ssize_t __spufs_signal1_read(struct spu_context *ctx, char __user *buf,
971
+ size_t len)
972
+{
973
+ if (len < sizeof(ctx->csa.spu_chnldata_RW[3]))
990974 return -EINVAL;
991
-
992
- if (ctx->csa.spu_chnlcnt_RW[3]) {
993
- data = ctx->csa.spu_chnldata_RW[3];
994
- ret = 4;
995
- }
996
-
997
- if (!ret)
998
- goto out;
999
-
1000
- if (copy_to_user(buf, &data, 4))
975
+ if (!ctx->csa.spu_chnlcnt_RW[3])
976
+ return 0;
977
+ if (copy_to_user(buf, &ctx->csa.spu_chnldata_RW[3],
978
+ sizeof(ctx->csa.spu_chnldata_RW[3])))
1001979 return -EFAULT;
1002
-
1003
-out:
1004
- return ret;
980
+ return sizeof(ctx->csa.spu_chnldata_RW[3]);
1005981 }
1006982
1007983 static ssize_t spufs_signal1_read(struct file *file, char __user *buf,
....@@ -1013,7 +989,7 @@
1013989 ret = spu_acquire_saved(ctx);
1014990 if (ret)
1015991 return ret;
1016
- ret = __spufs_signal1_read(ctx, buf, len, pos);
992
+ ret = __spufs_signal1_read(ctx, buf, len);
1017993 spu_release_saved(ctx);
1018994
1019995 return ret;
....@@ -1117,28 +1093,26 @@
11171093 return 0;
11181094 }
11191095
1120
-static ssize_t __spufs_signal2_read(struct spu_context *ctx, char __user *buf,
1121
- size_t len, loff_t *pos)
1096
+static ssize_t spufs_signal2_dump(struct spu_context *ctx,
1097
+ struct coredump_params *cprm)
11221098 {
1123
- int ret = 0;
1124
- u32 data;
1099
+ if (!ctx->csa.spu_chnlcnt_RW[4])
1100
+ return 0;
1101
+ return spufs_dump_emit(cprm, &ctx->csa.spu_chnldata_RW[4],
1102
+ sizeof(ctx->csa.spu_chnldata_RW[4]));
1103
+}
11251104
1126
- if (len < 4)
1105
+static ssize_t __spufs_signal2_read(struct spu_context *ctx, char __user *buf,
1106
+ size_t len)
1107
+{
1108
+ if (len < sizeof(ctx->csa.spu_chnldata_RW[4]))
11271109 return -EINVAL;
1128
-
1129
- if (ctx->csa.spu_chnlcnt_RW[4]) {
1130
- data = ctx->csa.spu_chnldata_RW[4];
1131
- ret = 4;
1132
- }
1133
-
1134
- if (!ret)
1135
- goto out;
1136
-
1137
- if (copy_to_user(buf, &data, 4))
1110
+ if (!ctx->csa.spu_chnlcnt_RW[4])
1111
+ return 0;
1112
+ if (copy_to_user(buf, &ctx->csa.spu_chnldata_RW[4],
1113
+ sizeof(ctx->csa.spu_chnldata_RW[4])))
11381114 return -EFAULT;
1139
-
1140
-out:
1141
- return ret;
1115
+ return sizeof(ctx->csa.spu_chnldata_RW[4]);
11421116 }
11431117
11441118 static ssize_t spufs_signal2_read(struct file *file, char __user *buf,
....@@ -1150,7 +1124,7 @@
11501124 ret = spu_acquire_saved(ctx);
11511125 if (ret)
11521126 return ret;
1153
- ret = __spufs_signal2_read(ctx, buf, len, pos);
1127
+ ret = __spufs_signal2_read(ctx, buf, len);
11541128 spu_release_saved(ctx);
11551129
11561130 return ret;
....@@ -1974,18 +1948,13 @@
19741948 .release = single_release,
19751949 };
19761950
1977
-static ssize_t __spufs_mbox_info_read(struct spu_context *ctx,
1978
- char __user *buf, size_t len, loff_t *pos)
1951
+static ssize_t spufs_mbox_info_dump(struct spu_context *ctx,
1952
+ struct coredump_params *cprm)
19791953 {
1980
- u32 data;
1981
-
1982
- /* EOF if there's no entry in the mbox */
19831954 if (!(ctx->csa.prob.mb_stat_R & 0x0000ff))
19841955 return 0;
1985
-
1986
- data = ctx->csa.prob.pu_mb_R;
1987
-
1988
- return simple_read_from_buffer(buf, len, pos, &data, sizeof data);
1956
+ return spufs_dump_emit(cprm, &ctx->csa.prob.pu_mb_R,
1957
+ sizeof(ctx->csa.prob.pu_mb_R));
19891958 }
19901959
19911960 static ssize_t spufs_mbox_info_read(struct file *file, char __user *buf,
....@@ -1994,9 +1963,6 @@
19941963 struct spu_context *ctx = file->private_data;
19951964 u32 stat, data;
19961965 int ret;
1997
-
1998
- if (!access_ok(VERIFY_WRITE, buf, len))
1999
- return -EFAULT;
20001966
20011967 ret = spu_acquire_saved(ctx);
20021968 if (ret)
....@@ -2020,18 +1986,13 @@
20201986 .llseek = generic_file_llseek,
20211987 };
20221988
2023
-static ssize_t __spufs_ibox_info_read(struct spu_context *ctx,
2024
- char __user *buf, size_t len, loff_t *pos)
1989
+static ssize_t spufs_ibox_info_dump(struct spu_context *ctx,
1990
+ struct coredump_params *cprm)
20251991 {
2026
- u32 data;
2027
-
2028
- /* EOF if there's no entry in the ibox */
20291992 if (!(ctx->csa.prob.mb_stat_R & 0xff0000))
20301993 return 0;
2031
-
2032
- data = ctx->csa.priv2.puint_mb_R;
2033
-
2034
- return simple_read_from_buffer(buf, len, pos, &data, sizeof data);
1994
+ return spufs_dump_emit(cprm, &ctx->csa.priv2.puint_mb_R,
1995
+ sizeof(ctx->csa.priv2.puint_mb_R));
20351996 }
20361997
20371998 static ssize_t spufs_ibox_info_read(struct file *file, char __user *buf,
....@@ -2040,9 +2001,6 @@
20402001 struct spu_context *ctx = file->private_data;
20412002 u32 stat, data;
20422003 int ret;
2043
-
2044
- if (!access_ok(VERIFY_WRITE, buf, len))
2045
- return -EFAULT;
20462004
20472005 ret = spu_acquire_saved(ctx);
20482006 if (ret)
....@@ -2071,21 +2029,11 @@
20712029 return (4 - ((ctx->csa.prob.mb_stat_R & 0x00ff00) >> 8)) * sizeof(u32);
20722030 }
20732031
2074
-static ssize_t __spufs_wbox_info_read(struct spu_context *ctx,
2075
- char __user *buf, size_t len, loff_t *pos)
2032
+static ssize_t spufs_wbox_info_dump(struct spu_context *ctx,
2033
+ struct coredump_params *cprm)
20762034 {
2077
- int i, cnt;
2078
- u32 data[4];
2079
- u32 wbox_stat;
2080
-
2081
- wbox_stat = ctx->csa.prob.mb_stat_R;
2082
- cnt = spufs_wbox_info_cnt(ctx);
2083
- for (i = 0; i < cnt; i++) {
2084
- data[i] = ctx->csa.spu_mailbox_data[i];
2085
- }
2086
-
2087
- return simple_read_from_buffer(buf, len, pos, &data,
2088
- cnt * sizeof(u32));
2035
+ return spufs_dump_emit(cprm, &ctx->csa.spu_mailbox_data,
2036
+ spufs_wbox_info_cnt(ctx));
20892037 }
20902038
20912039 static ssize_t spufs_wbox_info_read(struct file *file, char __user *buf,
....@@ -2094,9 +2042,6 @@
20942042 struct spu_context *ctx = file->private_data;
20952043 u32 data[ARRAY_SIZE(ctx->csa.spu_mailbox_data)];
20962044 int ret, count;
2097
-
2098
- if (!access_ok(VERIFY_WRITE, buf, len))
2099
- return -EFAULT;
21002045
21012046 ret = spu_acquire_saved(ctx);
21022047 if (ret)
....@@ -2138,15 +2083,13 @@
21382083 }
21392084 }
21402085
2141
-static ssize_t __spufs_dma_info_read(struct spu_context *ctx,
2142
- char __user *buf, size_t len, loff_t *pos)
2086
+static ssize_t spufs_dma_info_dump(struct spu_context *ctx,
2087
+ struct coredump_params *cprm)
21432088 {
21442089 struct spu_dma_info info;
21452090
21462091 spufs_get_dma_info(ctx, &info);
2147
-
2148
- return simple_read_from_buffer(buf, len, pos, &info,
2149
- sizeof info);
2092
+ return spufs_dump_emit(cprm, &info, sizeof(info));
21502093 }
21512094
21522095 static ssize_t spufs_dma_info_read(struct file *file, char __user *buf,
....@@ -2155,9 +2098,6 @@
21552098 struct spu_context *ctx = file->private_data;
21562099 struct spu_dma_info info;
21572100 int ret;
2158
-
2159
- if (!access_ok(VERIFY_WRITE, buf, len))
2160
- return -EFAULT;
21612101
21622102 ret = spu_acquire_saved(ctx);
21632103 if (ret)
....@@ -2197,22 +2137,13 @@
21972137 }
21982138 }
21992139
2200
-static ssize_t __spufs_proxydma_info_read(struct spu_context *ctx,
2201
- char __user *buf, size_t len, loff_t *pos)
2140
+static ssize_t spufs_proxydma_info_dump(struct spu_context *ctx,
2141
+ struct coredump_params *cprm)
22022142 {
22032143 struct spu_proxydma_info info;
2204
- int ret = sizeof info;
2205
-
2206
- if (len < ret)
2207
- return -EINVAL;
2208
-
2209
- if (!access_ok(VERIFY_WRITE, buf, len))
2210
- return -EFAULT;
22112144
22122145 spufs_get_proxydma_info(ctx, &info);
2213
-
2214
- return simple_read_from_buffer(buf, len, pos, &info,
2215
- sizeof info);
2146
+ return spufs_dump_emit(cprm, &info, sizeof(info));
22162147 }
22172148
22182149 static ssize_t spufs_proxydma_info_read(struct file *file, char __user *buf,
....@@ -2221,6 +2152,9 @@
22212152 struct spu_context *ctx = file->private_data;
22222153 struct spu_proxydma_info info;
22232154 int ret;
2155
+
2156
+ if (len < sizeof(info))
2157
+ return -EINVAL;
22242158
22252159 ret = spu_acquire_saved(ctx);
22262160 if (ret)
....@@ -2375,9 +2309,8 @@
23752309 goto out;
23762310 }
23772311
2378
- ctx->switch_log = kmalloc(sizeof(struct switch_log) +
2379
- SWITCH_LOG_BUFSIZE * sizeof(struct switch_log_entry),
2380
- GFP_KERNEL);
2312
+ ctx->switch_log = kmalloc(struct_size(ctx->switch_log, log,
2313
+ SWITCH_LOG_BUFSIZE), GFP_KERNEL);
23812314
23822315 if (!ctx->switch_log) {
23832316 rc = -ENOMEM;
....@@ -2676,23 +2609,23 @@
26762609 };
26772610
26782611 const struct spufs_coredump_reader spufs_coredump_read[] = {
2679
- { "regs", __spufs_regs_read, NULL, sizeof(struct spu_reg128[128])},
2680
- { "fpcr", __spufs_fpcr_read, NULL, sizeof(struct spu_reg128) },
2612
+ { "regs", spufs_regs_dump, NULL, sizeof(struct spu_reg128[128])},
2613
+ { "fpcr", spufs_fpcr_dump, NULL, sizeof(struct spu_reg128) },
26812614 { "lslr", NULL, spufs_lslr_get, 19 },
26822615 { "decr", NULL, spufs_decr_get, 19 },
26832616 { "decr_status", NULL, spufs_decr_status_get, 19 },
2684
- { "mem", __spufs_mem_read, NULL, LS_SIZE, },
2685
- { "signal1", __spufs_signal1_read, NULL, sizeof(u32) },
2617
+ { "mem", spufs_mem_dump, NULL, LS_SIZE, },
2618
+ { "signal1", spufs_signal1_dump, NULL, sizeof(u32) },
26862619 { "signal1_type", NULL, spufs_signal1_type_get, 19 },
2687
- { "signal2", __spufs_signal2_read, NULL, sizeof(u32) },
2620
+ { "signal2", spufs_signal2_dump, NULL, sizeof(u32) },
26882621 { "signal2_type", NULL, spufs_signal2_type_get, 19 },
26892622 { "event_mask", NULL, spufs_event_mask_get, 19 },
26902623 { "event_status", NULL, spufs_event_status_get, 19 },
2691
- { "mbox_info", __spufs_mbox_info_read, NULL, sizeof(u32) },
2692
- { "ibox_info", __spufs_ibox_info_read, NULL, sizeof(u32) },
2693
- { "wbox_info", __spufs_wbox_info_read, NULL, 4 * sizeof(u32)},
2694
- { "dma_info", __spufs_dma_info_read, NULL, sizeof(struct spu_dma_info)},
2695
- { "proxydma_info", __spufs_proxydma_info_read,
2624
+ { "mbox_info", spufs_mbox_info_dump, NULL, sizeof(u32) },
2625
+ { "ibox_info", spufs_ibox_info_dump, NULL, sizeof(u32) },
2626
+ { "wbox_info", spufs_wbox_info_dump, NULL, 4 * sizeof(u32)},
2627
+ { "dma_info", spufs_dma_info_dump, NULL, sizeof(struct spu_dma_info)},
2628
+ { "proxydma_info", spufs_proxydma_info_dump,
26962629 NULL, sizeof(struct spu_proxydma_info)},
26972630 { "object-id", NULL, spufs_object_id_get, 19 },
26982631 { "npc", NULL, spufs_npc_get, 19 },