diff options
author | Vasiliy Ulyanov <v.ulyanov@samsung.com> | 2013-02-13 17:34:49 +0400 |
---|---|---|
committer | Vasiliy Ulyanov <v.ulyanov@samsung.com> | 2013-02-13 17:34:49 +0400 |
commit | f037bdcecfb148ffdedbe53070b9f0f64e027f25 (patch) | |
tree | 65a7cfb9bd721ae57f46bfbfa0557a9ad18b987d /driver | |
parent | 12e62824cb1bd4e916acb7f845984fb28fcfc643 (diff) | |
parent | 79c3b3c07cafc8dc4608cfd178773e17a87e5ae0 (diff) | |
download | swap-modules-f037bdcecfb148ffdedbe53070b9f0f64e027f25.tar.gz swap-modules-f037bdcecfb148ffdedbe53070b9f0f64e027f25.tar.bz2 swap-modules-f037bdcecfb148ffdedbe53070b9f0f64e027f25.zip |
Merge branch 'dev' of 106.109.8.71:/srv/git/dbi into dev
Diffstat (limited to 'driver')
-rw-r--r-- | driver/events.h | 40 | ||||
-rw-r--r-- | driver/probes_manager.c | 56 |
2 files changed, 20 insertions, 76 deletions
diff --git a/driver/events.h b/driver/events.h index 8be66b5d..b644ab70 100644 --- a/driver/events.h +++ b/driver/events.h @@ -62,7 +62,7 @@ static char *PackArguments (char *pBuffer, unsigned long nLen, const char *szFor nLengthOfDescriptor = strlen (szFormat) + 1; nSizeOfDescriptor = ALIGN_VALUE(nLengthOfDescriptor); if(nFree < nSizeOfDescriptor) - return NULL; // no space for descriptor + return NULL; // no space for descriptor memcpy (pResult, szFormat, nLengthOfDescriptor); pResult += nSizeOfDescriptor; nFree -= nSizeOfDescriptor; @@ -152,15 +152,15 @@ static char *PackArguments (char *pBuffer, unsigned long nLen, const char *szFor } #ifdef __KERNEL__ if((void *)s < (void *)TASK_SIZE) { - const char __user *S = (const char __user *) s; - nLengthOfString = strlen_user (S); + const char __user *user_s = (const char __user *)s; + nLengthOfString = strlen_user(user_s); if(nFree < nLengthOfString) return NULL; // no space for arg if(strncpy_from_user(pResult, - S, + user_s, nLengthOfString) != (nLengthOfString-1)) { EPRINTF("failed to copy string from user %p, bytes %d", - S, nLengthOfString); + user_s, nLengthOfString); } } else @@ -209,8 +209,8 @@ static char *PackArguments (char *pBuffer, unsigned long nLen, const char *szFor return pResult; } -static UNUSED TYPEOF_EVENT_LENGTH VPackEvent(char *buf, unsigned long buf_len, int mask, TYPEOF_PROBE_ID probe_id, - TYPEOF_EVENT_TYPE record_type, TYPEOF_TIME *tv, TYPEOF_PROCESS_ID pid, +static UNUSED TYPEOF_EVENT_LENGTH VPackEvent(char *buf, unsigned long buf_len, int mask, TYPEOF_PROBE_ID probe_id, + TYPEOF_EVENT_TYPE record_type, TYPEOF_TIME *tv, TYPEOF_PROCESS_ID pid, TYPEOF_THREAD_ID tid, TYPEOF_CPU_NUMBER cpu, const char *fmt, va_list args) { char *cur = buf; @@ -218,7 +218,7 @@ static UNUSED TYPEOF_EVENT_LENGTH VPackEvent(char *buf, unsigned long buf_len, i if(buf_len < sizeof(SWAP_TYPE_EVENT_HEADER)) return 0; // no space for header - + pEventHeader->m_nLength = 0; cur += sizeof(TYPEOF_EVENT_LENGTH); pEventHeader->m_nType = record_type; @@ -227,22 +227,22 @@ static UNUSED TYPEOF_EVENT_LENGTH VPackEvent(char *buf, unsigned long buf_len, i cur += sizeof(TYPEOF_PROBE_ID); //pEventHeader->m_time.tv_sec = tv->tv_sec; //pEventHeader->m_time.tv_usec = tv->tv_usec; - if((probe_id == EVENT_FMT_PROBE_ID) || !(mask & IOCTL_EMASK_TIME)){ + if((probe_id == EVENT_FMT_PROBE_ID) || !(mask & IOCTL_EMASK_TIME)){ memcpy(cur, tv, sizeof(TYPEOF_TIME)); cur += sizeof(TYPEOF_TIME); } //pEventHeader->m_nProcessID = pid; - if((probe_id == EVENT_FMT_PROBE_ID) || !(mask & IOCTL_EMASK_PID)){ + if((probe_id == EVENT_FMT_PROBE_ID) || !(mask & IOCTL_EMASK_PID)){ (*(TYPEOF_PROCESS_ID *)cur) = pid; cur += sizeof(TYPEOF_PROCESS_ID); } //pEventHeader->m_nThreadID = tid; - if((probe_id == EVENT_FMT_PROBE_ID) || !(mask & IOCTL_EMASK_TID)){ + if((probe_id == EVENT_FMT_PROBE_ID) || !(mask & IOCTL_EMASK_TID)){ (*(TYPEOF_THREAD_ID *)cur) = tid; cur += sizeof(TYPEOF_THREAD_ID); } //pEventHeader->m_nCPU = cpu; - if((probe_id == EVENT_FMT_PROBE_ID) || !(mask & IOCTL_EMASK_CPU)){ + if((probe_id == EVENT_FMT_PROBE_ID) || !(mask & IOCTL_EMASK_CPU)){ (*(TYPEOF_CPU_NUMBER *)cur) = cpu; cur += sizeof(TYPEOF_CPU_NUMBER); } @@ -255,22 +255,22 @@ static UNUSED TYPEOF_EVENT_LENGTH VPackEvent(char *buf, unsigned long buf_len, i } else { // user space and dynamic kernel probes should have at least one argument - // to identify them + // to identify them if((probe_id == US_PROBE_ID) || (probe_id == VTP_PROBE_ID) || (probe_id == KS_PROBE_ID)){ char fmt2[2]; (*(TYPEOF_NUMBER_OF_ARGS *)cur) = 1; cur += sizeof(TYPEOF_NUMBER_OF_ARGS); // pack args using format string for the 1st arg only - fmt2[0] = fmt[0]; fmt2[1] = '\0'; + fmt2[0] = fmt[0]; fmt2[1] = '\0'; cur = PackArguments(cur, buf_len-(cur-buf), fmt2, args); - if(!cur) return 0; // no space for args + if(!cur) return 0; // no space for args } else { (*(TYPEOF_NUMBER_OF_ARGS *)cur) = 0; cur += sizeof(TYPEOF_NUMBER_OF_ARGS); } } - + pEventHeader->m_nLength = cur - buf + sizeof(TYPEOF_EVENT_LENGTH); if(buf_len < pEventHeader->m_nLength) return 0;// no space for back length @@ -280,17 +280,17 @@ static UNUSED TYPEOF_EVENT_LENGTH VPackEvent(char *buf, unsigned long buf_len, i return pEventHeader->m_nLength; } -/*static TYPEOF_EVENT_LENGTH PackEvent(char *buf, unsigned long buf_len, TYPEOF_PROBE_ID probe_id, - TYPEOF_EVENT_TYPE record_type, TYPEOF_TIME *tv, TYPEOF_PROCESS_ID pid, +/*static TYPEOF_EVENT_LENGTH PackEvent(char *buf, unsigned long buf_len, TYPEOF_PROBE_ID probe_id, + TYPEOF_EVENT_TYPE record_type, TYPEOF_TIME *tv, TYPEOF_PROCESS_ID pid, TYPEOF_THREAD_ID tid, TYPEOF_CPU_NUMBER cpu, const char *fmt, ...) { va_list args; TYPEOF_EVENT_LENGTH len; - + va_start (args, fmt); len = VPackEvent(buf, buf_len, probe_id, record_type, tv, pid, tid, cpu, fmt, args); va_end (args); - + return len; }*/ diff --git a/driver/probes_manager.c b/driver/probes_manager.c index 647be79a..cb17ac59 100644 --- a/driver/probes_manager.c +++ b/driver/probes_manager.c @@ -507,62 +507,6 @@ def_retprobe_event_handler (struct kretprobe_instance *pi, struct pt_regs *regs, return 0; } -/* This is a callback that is called by module 'swap_handlers' - * in order to register user defined handlers */ -void dbi_install_user_handlers(void) -{ - kernel_probe_t *probe; - struct hlist_node *node; - unsigned long pre_handler_addr, jp_handler_addr, rp_handler_addr; - - // FIXME: functions 'find_jp_handler', 'find_rp_handler', 'find_pre_handler' - not found - /* We must perform this lookup whenever this function is called - * because the addresses of find_*_handler functions may differ. */ - // swap_handlers removed - unsigned long (*find_jp_handler)(unsigned long) = - // swap_handlers removed - (unsigned long (*)(unsigned long))swap_ksyms("find_jp_handler"); - unsigned long (*find_rp_handler)(unsigned long) = - (unsigned long (*)(unsigned long))swap_ksyms("find_rp_handler"); - unsigned long (*find_pre_handler)(unsigned long) = - (unsigned long (*)(unsigned long))swap_ksyms("find_pre_handler"); - hlist_for_each_entry_rcu (probe, node, &kernel_probes, hlist) { - if(find_pre_handler) - { - pre_handler_addr = find_pre_handler(probe->addr); - if (find_pre_handler != NULL) { - DPRINTF("Added user pre handler for 0x%lx: 0x%lx", - probe->addr, find_pre_handler); - probe->jprobe.pre_entry = (kprobe_pre_entry_handler_t)pre_handler_addr; - } - } - jp_handler_addr = find_jp_handler(probe->addr); - if (jp_handler_addr != 0) { - DPRINTF("Added user jp handler for 0x%lx: 0x%lx", - probe->addr, jp_handler_addr); - probe->jprobe.entry = (kprobe_opcode_t *)jp_handler_addr; - } - rp_handler_addr = find_rp_handler(probe->addr); - if (rp_handler_addr != 0) - probe->retprobe.handler = (kretprobe_handler_t)rp_handler_addr; - } -} -EXPORT_SYMBOL_GPL(dbi_install_user_handlers); - -void dbi_uninstall_user_handlers(void) -{ - kernel_probe_t *probe; - struct hlist_node *node; - - hlist_for_each_entry_rcu (probe, node, &kernel_probes, hlist) { - DPRINTF("Removed user jp handler for 0x%lx", probe->addr); - probe->jprobe.pre_entry = (kprobe_pre_entry_handler_t)def_jprobe_event_pre_handler; - probe->jprobe.entry = (kprobe_opcode_t *)def_jprobe_event_handler; - probe->retprobe.handler = (kretprobe_handler_t)def_retprobe_event_handler; - } -} -EXPORT_SYMBOL_GPL(dbi_uninstall_user_handlers); - int is_pf_installed_by_user(void) { return (probes_flags & PROBE_FLAG_PF_INSTLD) ? 1: 0; |