Commit 827cabb4 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov

show: Use pr_msg for showing contents on console

Due to code sharing, especially in IPC area,
the unbinding is done via helper macros and
sysclt engine tuning (new CTL_SHOW action
added).
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Acked-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 7aa8e4b6
......@@ -34,7 +34,7 @@
(isprint(sym) ? sym : '.')
#define pr_regs4(s, n1, n2, n3, n4) \
pr_info("%8s: %16lx " \
pr_msg("%8s: %16lx " \
"%8s: %16lx " \
"%8s: %16lx " \
"%8s: %16lx\n", \
......@@ -44,7 +44,7 @@
#n4, s.n4)
#define pr_regs3(s, n1, n2, n3) \
pr_info("%8s: %16lx " \
pr_msg("%8s: %16lx " \
"%8s: %16lx " \
"%8s: %16lx\n", \
#n1, s.n1, \
......@@ -66,7 +66,7 @@ static void show_shmem(int fd_shmem)
ret = read_img_eof(fd_shmem, &e);
if (ret <= 0)
goto out;
pr_info("0x%lx-0x%lx id %lu\n", e.start, e.end, e.shmid);
pr_msg("0x%lx-0x%lx id %lu\n", e.start, e.end, e.shmid);
}
out:
......@@ -86,7 +86,7 @@ static void show_files(int fd_files)
if (ret <= 0)
goto out;
pr_info("type: %02x len: %02x flags: %4x pos: %8x "
pr_msg("type: %02x len: %02x flags: %4x pos: %8x "
"addr: %16lx id: %16lx",
e.type, e.len, e.flags, e.pos, e.addr, e.id);
......@@ -97,10 +97,10 @@ static void show_files(int fd_files)
goto out;
}
local_buf[e.len] = 0;
pr_info(" --> %s", local_buf);
pr_msg(" --> %s", local_buf);
}
pr_info("\n");
pr_msg("\n");
}
out:
......@@ -120,7 +120,7 @@ static void show_pipes(int fd_pipes)
ret = read_img_eof(fd_pipes, &e);
if (ret <= 0)
goto out;
pr_info("fd: %8x pipeid: %8x flags: %8x bytes: %8x\n",
pr_msg("fd: %8x pipeid: %8x flags: %8x bytes: %8x\n",
e.fd, e.pipeid, e.flags, e.bytes);
if (e.bytes)
lseek(fd_pipes, e.bytes, SEEK_CUR);
......@@ -135,7 +135,7 @@ static void show_vma(int fd_vma)
struct vma_area vma_area = {};
struct vma_entry ve;
pr_info("\n\t---[VMA areas]---\n");
pr_msg("\n\t---[VMA areas]---\n");
while (1) {
if (read_img(fd_vma, &ve) < 0)
break;
......@@ -145,7 +145,7 @@ static void show_vma(int fd_vma)
/* Simply in a sake of fancy printing */
vma_area.vma = ve;
pr_info_vma(&vma_area);
pr_msg_vma(&vma_area);
}
}
......@@ -154,21 +154,21 @@ void print_data(unsigned long addr, unsigned char *data, size_t size)
int i, j;
for (i = 0; i < size; i+= 16) {
pr_info("%16lx: ", addr + i);
pr_msg("%16lx: ", addr + i);
for (j = 0; j < 8; j++)
pr_info("%02x ", data[i + j]);
pr_info(" ");
pr_msg("%02x ", data[i + j]);
pr_msg(" ");
for (j = 8; j < 16; j++)
pr_info("%02x ", data[i + j]);
pr_msg("%02x ", data[i + j]);
pr_info(" |");
pr_msg(" |");
for (j = 0; j < 8; j++)
pr_info("%c ", PR_SYMBOL(data[i + j]));
pr_info(" ");
pr_msg("%c ", PR_SYMBOL(data[i + j]));
pr_msg(" ");
for (j = 8; j < 16; j++)
pr_info("%c ", PR_SYMBOL(data[i + j]));
pr_msg("%c ", PR_SYMBOL(data[i + j]));
pr_info("|\n");
pr_msg("|\n");
}
}
......@@ -186,24 +186,24 @@ static void show_pages(int fd_pages, bool show_content)
break;
print_data(e.va, e.data, PAGE_IMAGE_SIZE);
pr_info("\n --- End of page ---\n\n");
pr_msg("\n --- End of page ---\n\n");
}
} else {
while (1) {
struct page_entry e;
int i, j;
pr_info("\t");
pr_msg("\t");
for (i = 0; i < DEF_PAGES_PER_LINE; i++) {
if (read_img(fd_pages, &e) < 0)
goto out;
if (final_page_entry(&e)) {
pr_info("\n");
pr_msg("\n");
goto out;
}
pr_info("%16lx ", e.va);
pr_msg("%16lx ", e.va);
}
pr_info("\n");
pr_msg("\n");
}
}
......@@ -223,7 +223,7 @@ static void show_sigacts(int fd_sigacts)
ret = read_img_eof(fd_sigacts, &e);
if (ret <= 0)
goto out;
pr_info("sigaction: %016lx mask: %08lx "
pr_msg("sigaction: %016lx mask: %08lx "
"flags: %016lx restorer: %016lx\n",
(long)e.sigaction,
(long)e.mask,
......@@ -237,7 +237,7 @@ out:
static void show_itimer(char *n, struct itimer_entry *ie)
{
pr_info("%s: int %lu.%lu val %lu.%lu\n", n,
pr_msg("%s: int %lu.%lu val %lu.%lu\n", n,
(unsigned long)ie->isec, (unsigned long)ie->iusec,
(unsigned long)ie->vsec, (unsigned long)ie->vusec);
}
......@@ -261,10 +261,10 @@ static void show_cap(char *name, u32 *v)
{
int i;
pr_info("%s: ", name);
pr_msg("%s: ", name);
for (i = CR_CAP_SIZE - 1; i >= 0; i--)
pr_info("%08x", v[i]);
pr_info("\n");
pr_msg("%08x", v[i]);
pr_msg("\n");
}
static void show_creds(int fd)
......@@ -275,9 +275,9 @@ static void show_creds(int fd)
if (read_img(fd, &ce) < 0)
goto out;
pr_info("uid %u euid %u suid %u fsuid %u\n",
pr_msg("uid %u euid %u suid %u fsuid %u\n",
ce.uid, ce.euid, ce.suid, ce.fsuid);
pr_info("gid %u egid %u sgid %u fsgid %u\n",
pr_msg("gid %u egid %u sgid %u fsgid %u\n",
ce.gid, ce.egid, ce.sgid, ce.fsgid);
show_cap("Inh", ce.cap_inh);
......@@ -285,7 +285,7 @@ static void show_creds(int fd)
show_cap("Prm", ce.cap_prm);
show_cap("Bnd", ce.cap_bnd);
pr_info("secbits: %x\n", ce.secbits);
pr_msg("secbits: %x\n", ce.secbits);
out:
pr_img_tail(CR_FD_CREDS);
}
......@@ -304,7 +304,7 @@ static int show_pstree(int fd_pstree, struct list_head *collect)
ret = read_img_eof(fd_pstree, &e);
if (ret <= 0)
goto out;
pr_info("pid: %8d nr_children: %8d nr_threads: %8d\n",
pr_msg("pid: %8d nr_children: %8d nr_threads: %8d\n",
e.pid, e.nr_children, e.nr_threads);
if (collect) {
......@@ -324,29 +324,29 @@ static int show_pstree(int fd_pstree, struct list_head *collect)
}
if (e.nr_children) {
pr_info("\\\n");
pr_info(" +--- children: ");
pr_msg("\\\n");
pr_msg(" +--- children: ");
while (e.nr_children--) {
ret = read_img_eof(fd_pstree, &pid);
if (ret <= 0)
goto out;
pr_info(" %6d", pid);
pr_msg(" %6d", pid);
}
pr_info("\n");
pr_msg("\n");
}
if (e.nr_threads) {
pr_info(" \\\n");
pr_info(" --- threads: ");
pr_msg(" \\\n");
pr_msg(" --- threads: ");
while (e.nr_threads--) {
ret = read_img_eof(fd_pstree, &pid);
if (ret <= 0)
goto out;
pr_info(" %6d", pid);
pr_msg(" %6d", pid);
if (item)
item->threads[e.nr_threads] = pid;
}
pr_info("\n");
pr_msg("\n");
}
}
......@@ -362,7 +362,7 @@ static void show_core_regs(int fd_core)
struct desc_struct tls;
int i;
pr_info("\n\t---[GP registers set]---\n");
pr_msg("\n\t---[GP registers set]---\n");
lseek(fd_core, GET_FILE_OFF(struct core_entry, arch.gpregs), SEEK_SET);
......@@ -376,7 +376,7 @@ static void show_core_regs(int fd_core)
pr_regs4(regs, r11, r12, r13, r14);
pr_regs3(regs, r15, bp, bx);
pr_regs4(regs, orig_ax, flags, fs_base, gs_base);
pr_info("\n");
pr_msg("\n");
err:
return;
......@@ -403,29 +403,29 @@ static void show_core_rest(int fd_core)
if (read_img(fd_core, &tc) < 0)
goto err;
pr_info("\n\t---[Task parameters]---\n");
pr_info("\tPersonality: %x\n", tc.personality);
pr_info("\tCommand: %s\n", tc.comm);
pr_info("\tState: %d (%s)\n",
pr_msg("\n\t---[Task parameters]---\n");
pr_msg("\tPersonality: %x\n", tc.personality);
pr_msg("\tCommand: %s\n", tc.comm);
pr_msg("\tState: %d (%s)\n",
(int)tc.task_state,
task_state_str((int)tc.task_state));
pr_info("\t Exit code: %u\n",
pr_msg("\t Exit code: %u\n",
(unsigned int)tc.exit_code);
pr_info("\tBrk: %lx\n", tc.mm_brk);
pr_info("\tStart code: %lx\n", tc.mm_start_code);
pr_info("\tEnd code: %lx\n", tc.mm_end_code);
pr_info("\tStart stack: %lx\n", tc.mm_start_stack);
pr_info("\tStart data: %lx\n", tc.mm_start_data);
pr_info("\tEnd data: %lx\n", tc.mm_end_data);
pr_info("\tStart brk: %lx\n", tc.mm_start_brk);
pr_info("\tArg start: %lx\n", tc.mm_arg_start);
pr_info("\tArg end: %lx\n", tc.mm_arg_end);
pr_info("\tEnv start: %lx\n", tc.mm_env_start);
pr_info("\tEnv end: %lx\n", tc.mm_env_end);
pr_info("\n\tBlkSig: %lx\n", tc.blk_sigset);
pr_info("\n");
pr_msg("\tBrk: %lx\n", tc.mm_brk);
pr_msg("\tStart code: %lx\n", tc.mm_start_code);
pr_msg("\tEnd code: %lx\n", tc.mm_end_code);
pr_msg("\tStart stack: %lx\n", tc.mm_start_stack);
pr_msg("\tStart data: %lx\n", tc.mm_start_data);
pr_msg("\tEnd data: %lx\n", tc.mm_end_data);
pr_msg("\tStart brk: %lx\n", tc.mm_start_brk);
pr_msg("\tArg start: %lx\n", tc.mm_arg_start);
pr_msg("\tArg end: %lx\n", tc.mm_arg_end);
pr_msg("\tEnv start: %lx\n", tc.mm_env_start);
pr_msg("\tEnv end: %lx\n", tc.mm_env_end);
pr_msg("\n\tBlkSig: %lx\n", tc.blk_sigset);
pr_msg("\n");
err:
return;
......@@ -590,13 +590,13 @@ static int cr_show_all(unsigned long pid, struct cr_options *opts)
if (!cr_fdset_th)
goto out;
pr_info("\n");
pr_info("Thread: %d\n", item->threads[i]);
pr_info("----------------------------------------\n");
pr_msg("\n");
pr_msg("Thread: %d\n", item->threads[i]);
pr_msg("----------------------------------------\n");
show_core(cr_fdset_th->fds[CR_FD_CORE], opts->show_pages_content);
pr_info("----------------------------------------\n");
pr_msg("----------------------------------------\n");
close_cr_fdset(&cr_fdset_th);
}
......
......@@ -404,7 +404,6 @@ int main(int argc, char *argv[])
ret = cr_restore_tasks(pid, &opts);
break;
case 's':
log_set_loglevel(LOG_INFO);
ret = cr_show(pid, &opts);
break;
default:
......
......@@ -13,6 +13,7 @@ enum {
CTL_READ,
CTL_WRITE,
CTL_PRINT,
CTL_SHOW,
};
#define CTL_SHIFT 4 /* Up to 16 types */
......
......@@ -136,14 +136,18 @@ extern void pr_info_siginfo(siginfo_t *siginfo);
struct vma_area;
struct list_head;
extern void pr_info_vma(struct vma_area *vma_area);
extern void pr_vma(unsigned int loglevel, struct vma_area *vma_area);
#define pr_info_vma_list(head) \
#define pr_info_vma(vma_area) pr_vma(LOG_INFO, vma_area)
#define pr_msg_vma(vma_area) pr_vma(LOG_MSG, vma_area)
#define pr_vma_list(level, head) \
do { \
struct vma_area *vma; \
list_for_each_entry(vma, head, list) \
pr_info_vma(vma); \
pr_vma(level, vma); \
} while (0)
#define pr_info_vma_list(head) pr_vma_list(LOG_INFO, head)
/*
* Note since VMA_AREA_NONE = 0 we can skip assignment
......@@ -252,8 +256,8 @@ int do_open_proc(pid_t pid, int flags, const char *fmt, ...);
__ret; \
})
#define pr_img_head(type, ...) pr_info("\n"#type __VA_ARGS__ "\n----------------\n")
#define pr_img_tail(type) pr_info("----------------\n")
#define pr_img_head(type, ...) pr_msg("\n"#type __VA_ARGS__ "\n----------------\n")
#define pr_img_tail(type) pr_msg("----------------\n")
#define KDEV_MINORBITS 20
#define KDEV_MINORMASK ((1UL << KDEV_MINORBITS) - 1)
......
......@@ -51,12 +51,12 @@ struct msgbuf_a {
#define SEM_SET 20
#endif
static void print_ipc_desc_entry(const struct ipc_desc_entry *desc)
static void pr_ipc_desc_entry(unsigned int loglevel, const struct ipc_desc_entry *desc)
{
pr_info("id: %-10d key: 0x%08x ", desc->id, desc->key);
pr_info("uid: %-10d gid: %-10d ", desc->uid, desc->gid);
pr_info("cuid: %-10d cgid: %-10d ", desc->cuid, desc->cgid);
pr_info("mode: %-10o ", desc->mode);
print_on_level(loglevel, "id: %-10d key: 0x%08x ", desc->id, desc->key);
print_on_level(loglevel, "uid: %-10d gid: %-10d ", desc->uid, desc->gid);
print_on_level(loglevel, "cuid: %-10d cgid: %-10d ", desc->cuid, desc->cgid);
print_on_level(loglevel, "mode: %-10o ", desc->mode);
}
static void fill_ipc_desc(int id, struct ipc_desc_entry *desc,
......@@ -71,19 +71,25 @@ static void fill_ipc_desc(int id, struct ipc_desc_entry *desc,
desc->mode = ipcp->mode;
}
static void print_ipc_sem_array(int nr, u16 *values)
static void pr_ipc_sem_array(unsigned int loglevel, int nr, u16 *values)
{
while(nr--)
pr_info(" %-5d", values[nr]);
pr_info("\n");
print_on_level(loglevel, " %-5d", values[nr]);
print_on_level(loglevel, "\n");
}
static void print_ipc_sem_entry(const struct ipc_sem_entry *sem)
#define pr_info_ipc_sem_array(nr, values) pr_ipc_sem_array(LOG_INFO, nr, values)
#define pr_msg_ipc_sem_array(nr, values) pr_ipc_sem_array(LOG_MSG, nr, values)
static void pr_ipc_sem_entry(unsigned int loglevel, const struct ipc_sem_entry *sem)
{
print_ipc_desc_entry(&sem->desc);
pr_info ("nsems: %-10d\n", sem->nsems);
pr_ipc_desc_entry(loglevel, &sem->desc);
print_on_level(loglevel, "nsems: %-10d\n", sem->nsems);
}
#define pr_info_ipc_sem_entry(sem) pr_ipc_sem_entry(LOG_INFO, sem)
#define pr_msg_ipc_sem_entry(sem) pr_ipc_sem_entry(LOG_MSG, sem)
static int dump_ipc_sem_set(int fd, const struct ipc_sem_entry *entry)
{
int ret, size;
......@@ -102,7 +108,7 @@ static int dump_ipc_sem_set(int fd, const struct ipc_sem_entry *entry)
ret = -errno;
goto out;
}
print_ipc_sem_array(entry->nsems, values);
pr_info_ipc_sem_array(entry->nsems, values);
ret = write_img_buf(fd, values, round_up(size, sizeof(u64)));
if (ret < 0) {
......@@ -121,7 +127,7 @@ static int dump_ipc_sem_desc(int fd, int id, const struct semid_ds *ds)
fill_ipc_desc(id, &sem.desc, &ds->sem_perm);
sem.nsems = ds->sem_nsems;
print_ipc_sem_entry(&sem);
pr_info_ipc_sem_entry(&sem);
ret = write_img(fd, &sem);
if (ret < 0) {
......@@ -166,18 +172,25 @@ static int dump_ipc_sem(int fd)
return info.semusz;
}
static void print_ipc_msg(int nr, const struct ipc_msg *msg)
static void pr_ipc_msg(unsigned int loglevel, int nr, const struct ipc_msg *msg)
{
pr_info(" %-5d: type: %-20ld size: %-10d\n",
print_on_level(loglevel, " %-5d: type: %-20ld size: %-10d\n",
nr++, msg->mtype, msg->msize);
}
static void print_ipc_msg_entry(const struct ipc_msg_entry *msg)
#define pr_info_ipc_msg(nr, msg) pr_ipc_msg(LOG_INFO, nr, msg)
#define pr_msg_ipc_msg(nr, msg) pr_ipc_msg(LOG_MSG, nr, msg)
static void pr_ipc_msg_entry(unsigned int loglevel, const struct ipc_msg_entry *msg)
{
print_ipc_desc_entry(&msg->desc);
pr_info ("qbytes: %-10d qnum: %-10d\n", msg->qbytes, msg->qnum);
pr_ipc_desc_entry(loglevel, &msg->desc);
print_on_level(loglevel, "qbytes: %-10d qnum: %-10d\n",
msg->qbytes, msg->qnum);
}
#define pr_info_ipc_msg_entry(msg) pr_ipc_msg_entry(LOG_INFO, msg)
#define pr_msg_ipc_msg_entry(msg) pr_ipc_msg_entry(LOG_MSG, msg)
static int dump_ipc_msg_queue_messages(int fd, const struct ipc_msg_entry *entry, size_t cbytes)
{
void *msg_array, *ptr;
......@@ -208,7 +221,7 @@ static int dump_ipc_msg_queue_messages(int fd, const struct ipc_msg_entry *entry
msg.msize = data->msize;
msg.mtype = data->mtype;
print_ipc_msg(msg_nr, &msg);
pr_info_ipc_msg(msg_nr, &msg);
ret = write_img(fd, &msg);
if (ret < 0) {
......@@ -237,7 +250,7 @@ static int dump_ipc_msg_queue(int fd, int id, const struct msqid_ds *ds)
fill_ipc_desc(id, &msg.desc, &ds->msg_perm);
msg.qbytes = ds->msg_qbytes;
msg.qnum = ds->msg_qnum;
print_ipc_msg_entry(&msg);
pr_info_ipc_msg_entry(&msg);
ret = write_img(fd, &msg);
if (ret < 0) {
......@@ -282,12 +295,15 @@ static int dump_ipc_msg(int fd)
return info.msgpool;
}
static void print_ipc_shm(const struct ipc_shm_entry *shm)
static void pr_ipc_shm(unsigned int loglevel, const struct ipc_shm_entry *shm)
{
print_ipc_desc_entry(&shm->desc);
pr_info("size: %-10lu\n", shm->size);
pr_ipc_desc_entry(loglevel, &shm->desc);
print_on_level(loglevel, "size: %-10lu\n", shm->size);
}
#define pr_info_ipc_shm(shm) pr_ipc_shm(LOG_INFO, shm)
#define pr_msg_ipc_shm(shm) pr_ipc_shm(LOG_MSG, shm)
static int ipc_sysctl_req(struct ipc_var_entry *e, int op)
{
struct sysctl_req req[] = {
......@@ -342,7 +358,7 @@ static int dump_ipc_shm_seg(int fd, int id, const struct shmid_ds *ds)
fill_ipc_desc(id, &shm.desc, &ds->shm_perm);
shm.size = ds->shm_segsz;
print_ipc_shm(&shm);
pr_info_ipc_shm(&shm);
ret = write_img(fd, &shm);
if (ret < 0) {
......@@ -443,14 +459,9 @@ int dump_ipc_ns(int ns_pid, const struct cr_fdset *fdset)
return 0;
}
static void show_var_entry(struct ipc_var_entry *entry)
{
ipc_sysctl_req(entry, CTL_PRINT);
}
static void show_ipc_sem_entries(int fd)
{
pr_info("\nSemaphores sets:\n");
pr_msg("\nSemaphores sets:\n");
while (1) {
int size;
struct ipc_sem_entry entry;
......@@ -458,14 +469,14 @@ static void show_ipc_sem_entries(int fd)
if (read_img_eof(fd, &entry) <= 0)
return;
print_ipc_sem_entry(&entry);
pr_msg_ipc_sem_entry(&entry);
size = sizeof(u16) * entry.nsems;
values = xmalloc(size);
if (values == NULL)
return;
if (read_img_buf(fd, values, round_up(size, sizeof(u64))) <= 0)
return;
print_ipc_sem_array(entry.nsems, values);
pr_msg_ipc_sem_array(entry.nsems, values);
}
}
......@@ -478,7 +489,7 @@ void show_ipc_sem(int fd)
static void show_ipc_msg_entries(int fd)
{
pr_info("\nMessage queues:\n");
pr_msg("\nMessage queues:\n");
while (1) {
int ret;
struct ipc_msg_entry entry;
......@@ -488,7 +499,7 @@ static void show_ipc_msg_entries(int fd)
if (ret <= 0)
return;
print_ipc_msg_entry(&entry);
pr_msg_ipc_msg_entry(&entry);
while (msg_nr < entry.qnum) {
struct ipc_msg msg;
......@@ -497,7 +508,7 @@ static void show_ipc_msg_entries(int fd)
if (ret <= 0)
return;
print_ipc_msg(msg_nr, &msg);
pr_msg_ipc_msg(msg_nr, &msg);
if (lseek(fd, round_up(msg.msize, sizeof(u64)),
SEEK_CUR) == (off_t) -1)
......@@ -516,7 +527,7 @@ void show_ipc_msg(int fd)
static void show_ipc_shm_entries(int fd)
{
pr_info("\nShared memory segments:\n");
pr_msg("\nShared memory segments:\n");
while (1) {
int ret;
struct ipc_shm_entry shm;
......@@ -525,7 +536,7 @@ static void show_ipc_shm_entries(int fd)
if (ret <= 0)
return;
print_ipc_shm(&shm);
pr_msg_ipc_shm(&shm);
if (lseek(fd, round_up(shm.size, sizeof(u32)), SEEK_CUR) == (off_t) -1)
return;
......@@ -547,7 +558,7 @@ static void show_ipc_var_entry(int fd)
ret = read_img_eof(fd, &var);
if (ret <= 0)
return;
show_var_entry(&var);
ipc_sysctl_req(&var, CTL_SHOW);
}
void show_ipc_var(int fd)
......@@ -577,7 +588,7 @@ static int prepare_ipc_sem_values(int fd, const struct ipc_sem_entry *entry)
goto out;
}
print_ipc_sem_array(entry->nsems, values);
pr_info_ipc_sem_array(entry->nsems, values);
ret = semctl(entry->desc.id, 0, SETALL, values);
if (ret < 0) {
......@@ -647,7 +658,7 @@ static int prepare_ipc_sem(int pid)
if (ret == 0)
break;
print_ipc_sem_entry(&entry);
pr_info_ipc_sem_entry(&entry);
ret = prepare_ipc_sem_desc(fd, &entry);
if (ret < 0) {
......@@ -674,7 +685,7 @@ static int prepare_ipc_msg_queue_messages(int fd, const struct ipc_msg_entry *en
if (ret <= 0)
return -EIO;
print_ipc_msg(msg_nr, &msg);
pr_info_ipc_msg(msg_nr, &msg);
if (msg.msize > MSGMAX) {
pr_err("Unsupported message size: %d (MAX: %d)\n",
......@@ -760,7 +771,7 @@ static int prepare_ipc_msg(int pid)
if (ret == 0)
break;
print_ipc_msg_entry(&entry);
pr_info_ipc_msg_entry(&entry);
ret = prepare_ipc_msg_queue(fd, &entry);
if (ret < 0) {
......@@ -852,7 +863,7 @@ static int prepare_ipc_shm(int pid)
if (ret == 0)
break;
print_ipc_shm(&shm);
pr_info_ipc_shm(&shm);
ret = prepare_ipc_shm_seg(fd, &shm);
if (ret < 0) {
......@@ -879,7 +890,7 @@ static int prepare_ipc_var(int pid)
return -EFAULT;
}
show_var_entry(&var);
ipc_sysctl_req(&var, CTL_PRINT);
ret = ipc_sysctl_req(&var, CTL_WRITE);
if (ret < 0) {
......
......@@ -20,6 +20,10 @@ do { \
__ret = sysctl_print_##__type(__fd, __req, \
(__type *)(__req)->arg, \
__nr); \
else if (__op == CTL_PRINT) \
__ret = sysctl_show_##__type(__fd, __req, \
(__type *)(__req)->arg, \
__nr); \
else \
__ret = -1; \
} while (0)
......@@ -109,6 +113,21 @@ static int sysctl_print_##__type(int fd, \
return 0; \
}
#define GEN_SYSCTL_SHOW_FUNC(__type, __fmt) \
static int sysctl_show_##__type(int fd, \
struct sysctl_req *req, \
__type *arg, \
int nr) \
{ \
int i; \
pr_msg("sysctl: <%s> = <", req->name); \
for (i = 0; i < nr; i++) \
pr_msg(__fmt, arg[i]); \
pr_msg(">\n"); \
\
return 0; \
}
GEN_SYSCTL_READ_FUNC(u32, strtoul);
GEN_SYSCTL_READ_FUNC(u64, strtoull);
......@@ -119,6 +138,10 @@ GEN_SYSCTL_PRINT_FUNC(u32, "%u ");
GEN_SYSCTL_PRINT_FUNC(u64, "%lu ");
GEN_SYSCTL_PRINT_FUNC(char, "%c");
GEN_SYSCTL_SHOW_FUNC(u32, "%u ");
GEN_SYSCTL_SHOW_FUNC(u64, "%lu ");
GEN_SYSCTL_SHOW_FUNC(char, "%c");
static int
sysctl_write_char(int fd, struct sysctl_req *req, char *arg, int nr)
{
......@@ -195,7 +218,7 @@ int sysctl_op(struct sysctl_req *req, int op)
int ret = 0;
int dir = -1;
if (op != CTL_PRINT) {
if (op != CTL_PRINT && op != CTL_SHOW) {
dir = open("/proc/sys", O_RDONLY);
if (dir < 0) {
pr_perror("Can't open sysctl dir");
......
......@@ -57,12 +57,12 @@ void pr_info_siginfo(siginfo_t *siginfo)
siginfo->si_signo, siginfo->si_errno, siginfo->si_code);
}
void pr_info_vma(struct vma_area *vma_area)
void pr_vma(unsigned int loglevel, struct vma_area *vma_area)
{
if (!vma_area)
return;
pr_info("s: %16lx e: %16lx l: %4liK p: %8x f: %8x pg: %8lx "
print_on_level(loglevel, "s: %16lx e: %16lx l: %4liK p: %8x f: %8x pg: %8lx "
"vf: %s st: %s spc: %s\n",
vma_area->vma.start, vma_area->vma.end,
KBYTES(vma_area_len(vma_area)),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment