Loading arch/powerpc/platforms/cell/spufs/coredump.c +20 −49 Original line number Original line Diff line number Diff line Loading @@ -50,33 +50,6 @@ static ssize_t do_coredump_read(int num, struct spu_context *ctx, void *buffer, return ++ret; /* count trailing NULL */ return ++ret; /* count trailing NULL */ } } /* * These are the only things you should do on a core-file: use only these * functions to write out all the necessary info. */ static int spufs_dump_write(struct coredump_params *cprm, const void *addr, int nr) { if (!dump_emit(cprm, addr, nr)) return -EIO; return 0; } static int spufs_dump_align(struct coredump_params *cprm, char *buf, loff_t new_off) { int rc, size; size = min((loff_t)PAGE_SIZE, new_off - cprm->written); memset(buf, 0, size); rc = 0; while (rc == 0 && new_off > cprm->written) { size = min((loff_t)PAGE_SIZE, new_off - cprm->written); rc = spufs_dump_write(cprm, buf, size); } return rc; } static int spufs_ctx_note_size(struct spu_context *ctx, int dfd) static int spufs_ctx_note_size(struct spu_context *ctx, int dfd) { { int i, sz, total = 0; int i, sz, total = 0; Loading Loading @@ -159,7 +132,7 @@ static int spufs_arch_write_note(struct spu_context *ctx, int i, struct coredump_params *cprm, int dfd) struct coredump_params *cprm, int dfd) { { loff_t pos = 0; loff_t pos = 0; int sz, rc, nread, total = 0; int sz, rc, total = 0; const int bufsz = PAGE_SIZE; const int bufsz = PAGE_SIZE; char *name; char *name; char fullname[80], *buf; char fullname[80], *buf; Loading @@ -177,38 +150,36 @@ static int spufs_arch_write_note(struct spu_context *ctx, int i, en.n_descsz = sz; en.n_descsz = sz; en.n_type = NT_SPU; en.n_type = NT_SPU; rc = spufs_dump_write(cprm, &en, sizeof(en)); if (!dump_emit(cprm, &en, sizeof(en))) if (rc) goto Eio; goto out; rc = spufs_dump_write(cprm, fullname, en.n_namesz); if (!dump_emit(cprm, fullname, en.n_namesz)) if (rc) goto Eio; goto out; rc = spufs_dump_align(cprm, buf, roundup(cprm->written, 4)); if (!dump_skip(cprm, roundup(cprm->written, 4) - cprm->written)) if (rc) goto Eio; goto out; do { do { nread = do_coredump_read(i, ctx, buf, bufsz, &pos); rc = do_coredump_read(i, ctx, buf, bufsz, &pos); if (nread > 0) { if (rc > 0) { rc = spufs_dump_write(cprm, buf, nread); if (!dump_emit(cprm, buf, rc)) if (rc) goto Eio; goto out; total += rc; total += nread; } } } while (nread == bufsz && total < sz); } while (rc == bufsz && total < sz); if (nread < 0) { if (rc < 0) rc = nread; goto out; goto out; } rc = spufs_dump_align(cprm, buf, roundup(cprm->written - total + sz, 4)); if (!dump_skip(cprm, roundup(cprm->written - total + sz, 4) - cprm->written)) goto Eio; out: out: free_page((unsigned long)buf); free_page((unsigned long)buf); return rc; return rc; Eio: free_page((unsigned long)buf); return -EIO; } } int spufs_coredump_extra_notes_write(struct coredump_params *cprm) int spufs_coredump_extra_notes_write(struct coredump_params *cprm) Loading Loading
arch/powerpc/platforms/cell/spufs/coredump.c +20 −49 Original line number Original line Diff line number Diff line Loading @@ -50,33 +50,6 @@ static ssize_t do_coredump_read(int num, struct spu_context *ctx, void *buffer, return ++ret; /* count trailing NULL */ return ++ret; /* count trailing NULL */ } } /* * These are the only things you should do on a core-file: use only these * functions to write out all the necessary info. */ static int spufs_dump_write(struct coredump_params *cprm, const void *addr, int nr) { if (!dump_emit(cprm, addr, nr)) return -EIO; return 0; } static int spufs_dump_align(struct coredump_params *cprm, char *buf, loff_t new_off) { int rc, size; size = min((loff_t)PAGE_SIZE, new_off - cprm->written); memset(buf, 0, size); rc = 0; while (rc == 0 && new_off > cprm->written) { size = min((loff_t)PAGE_SIZE, new_off - cprm->written); rc = spufs_dump_write(cprm, buf, size); } return rc; } static int spufs_ctx_note_size(struct spu_context *ctx, int dfd) static int spufs_ctx_note_size(struct spu_context *ctx, int dfd) { { int i, sz, total = 0; int i, sz, total = 0; Loading Loading @@ -159,7 +132,7 @@ static int spufs_arch_write_note(struct spu_context *ctx, int i, struct coredump_params *cprm, int dfd) struct coredump_params *cprm, int dfd) { { loff_t pos = 0; loff_t pos = 0; int sz, rc, nread, total = 0; int sz, rc, total = 0; const int bufsz = PAGE_SIZE; const int bufsz = PAGE_SIZE; char *name; char *name; char fullname[80], *buf; char fullname[80], *buf; Loading @@ -177,38 +150,36 @@ static int spufs_arch_write_note(struct spu_context *ctx, int i, en.n_descsz = sz; en.n_descsz = sz; en.n_type = NT_SPU; en.n_type = NT_SPU; rc = spufs_dump_write(cprm, &en, sizeof(en)); if (!dump_emit(cprm, &en, sizeof(en))) if (rc) goto Eio; goto out; rc = spufs_dump_write(cprm, fullname, en.n_namesz); if (!dump_emit(cprm, fullname, en.n_namesz)) if (rc) goto Eio; goto out; rc = spufs_dump_align(cprm, buf, roundup(cprm->written, 4)); if (!dump_skip(cprm, roundup(cprm->written, 4) - cprm->written)) if (rc) goto Eio; goto out; do { do { nread = do_coredump_read(i, ctx, buf, bufsz, &pos); rc = do_coredump_read(i, ctx, buf, bufsz, &pos); if (nread > 0) { if (rc > 0) { rc = spufs_dump_write(cprm, buf, nread); if (!dump_emit(cprm, buf, rc)) if (rc) goto Eio; goto out; total += rc; total += nread; } } } while (nread == bufsz && total < sz); } while (rc == bufsz && total < sz); if (nread < 0) { if (rc < 0) rc = nread; goto out; goto out; } rc = spufs_dump_align(cprm, buf, roundup(cprm->written - total + sz, 4)); if (!dump_skip(cprm, roundup(cprm->written - total + sz, 4) - cprm->written)) goto Eio; out: out: free_page((unsigned long)buf); free_page((unsigned long)buf); return rc; return rc; Eio: free_page((unsigned long)buf); return -EIO; } } int spufs_coredump_extra_notes_write(struct coredump_params *cprm) int spufs_coredump_extra_notes_write(struct coredump_params *cprm) Loading