From 912075605b9bb68474032d6d8c70d1d97dc2aeff Mon Sep 17 00:00:00 2001 From: Jim Warner Date: Fri, 7 Oct 2016 04:44:44 -0500 Subject: [PATCH] library : remove that PIDS_WCHAN_ADDR enumerator Removing the Item_table 'stat' oldflags for WCHAN_ADDR was wrong since that 'stat' field is not a constant 0. Rather, it could assume these 3 values: -1, 0, and +1. I have not been able to pin down a '-1' result, but it probably means some sort of permission error (-EPERM). The '1' or '0' values were supposed to distinguish the tasks that were or were not blocked (whether there was a wchan address). However, in practice there is little correlation between those values and availability of a kernel symbol in /proc/$$/wchan (perhaps due to race). Anyway, the real point is that a 'stat' wchan does not now intentionally contain an address. Thus, outputting 'ffffff', '-' or '1' in programs like ps is senseless. So this patch just eliminates PIDS_WCHAN_ADDR from our item enumerators leaving only the PIDS_WCHAN_NAME guy. Now the new library can't be blamed for bad addresses! Reference(s): . removed Item_table 'oldflags' commit c4aa6c0ab4263976b2abbc5df0068d5a1612d731 . linux removal of wchan addresses commit b2f73922d119686323f14fbbe46587f863852328 Signed-off-by: Jim Warner --- proc/pids.c | 2 -- proc/pids.h | 1 - 2 files changed, 3 deletions(-) diff --git a/proc/pids.c b/proc/pids.c index ff7657c4..446add3f 100644 --- a/proc/pids.c +++ b/proc/pids.c @@ -251,7 +251,6 @@ REG_set(VM_STACK, ul_int, vm_stack) REG_set(VM_SWAP, ul_int, vm_swap) setDECL(VM_USED) { (void)I; R->result.ul_int = P->vm_swap + P->vm_rss; } REG_set(VSIZE_PGS, ul_int, vsize) -REG_set(WCHAN_ADDR, ul_int, wchan) setDECL(WCHAN_NAME) { (void)I; R->result.str = strdup(lookup_wchan(P->tid)); } #undef setDECL @@ -500,7 +499,6 @@ static struct { { RS(VM_SWAP), f_status, NULL, QS(ul_int), 0, TS(ul_int) }, { RS(VM_USED), f_status, NULL, QS(ul_int), 0, TS(ul_int) }, { RS(VSIZE_PGS), f_stat, NULL, QS(ul_int), 0, TS(ul_int) }, - { RS(WCHAN_ADDR), 0, NULL, QS(ul_int), 0, TS(ul_int) }, // oldflags: was f_stat, but linux obsoleted { RS(WCHAN_NAME), 0, FF(str), QS(str), 0, TS(str) }, // oldflags: tid already free // dummy entry corresponding to PIDS_logical_end ... diff --git a/proc/pids.h b/proc/pids.h index 35c5cbac..19f12f67 100644 --- a/proc/pids.h +++ b/proc/pids.h @@ -144,7 +144,6 @@ enum pids_item { PIDS_VM_SWAP, // ul_int PIDS_VM_USED, // ul_int PIDS_VSIZE_PGS, // ul_int - PIDS_WCHAN_ADDR, // ul_int PIDS_WCHAN_NAME // str };