X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=libcfs%2Flibcfs%2Flwt.c;h=39e6743f3005751c79cc0eb2d2459d0aa16f45a6;hp=2a33261aab0c920d35ef2559722b31776d3eb414;hb=148a7fba3d289caf053db937c8a08f63528dada1;hpb=0f8dca08a4f68cba82c2c822998ecc309d3b7aaf diff --git a/libcfs/libcfs/lwt.c b/libcfs/libcfs/lwt.c index 2a33261..39e6743 100644 --- a/libcfs/libcfs/lwt.c +++ b/libcfs/libcfs/lwt.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -38,10 +36,6 @@ * Author: Eric Barton */ -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif - #define DEBUG_SUBSYSTEM S_LNET #include @@ -50,7 +44,7 @@ #if !KLWT_SUPPORT int lwt_enabled; -lwt_cpu_t lwt_cpus[CFS_NR_CPUS]; +lwt_cpu_t lwt_cpus[NR_CPUS]; #endif int lwt_pages_per_cpu; @@ -78,19 +72,19 @@ lwt_lookup_string (int *size, char *knl_ptr, *size = strnlen (knl_ptr, maxsize - 1) + 1; - if (user_ptr != NULL) { - if (user_size < 4) - return (-EINVAL); + if (user_ptr != NULL) { + if (user_size < 4) + return -EINVAL; - if (cfs_copy_to_user (user_ptr, knl_ptr, *size)) - return (-EFAULT); + if (copy_to_user(user_ptr, knl_ptr, *size)) + return -EFAULT; - /* Did I truncate the string? */ - if (knl_ptr[*size - 1] != 0) - cfs_copy_to_user (user_ptr + *size - 4, "...", 4); - } + /* Did I truncate the string? */ + if (knl_ptr[*size - 1] != 0) + copy_to_user(user_ptr + *size - 4, "...", 4); + } - return (0); + return 0; } int @@ -103,16 +97,16 @@ lwt_control (int enable, int clear) if (!cfs_capable(CFS_CAP_SYS_ADMIN)) return (-EPERM); - if (!enable) { - LWT_EVENT(0,0,0,0); - lwt_enabled = 0; - cfs_mb(); - /* give people some time to stop adding traces */ - cfs_schedule_timeout(10); - } + if (!enable) { + LWT_EVENT(0,0,0,0); + lwt_enabled = 0; + smp_mb(); + /* give people some time to stop adding traces */ + schedule_timeout(10); + } - for (i = 0; i < cfs_num_online_cpus(); i++) { - p = lwt_cpus[i].lwtc_current_page; + for (i = 0; i < num_online_cpus(); i++) { + p = lwt_cpus[i].lwtc_current_page; if (p == NULL) return (-ENODATA); @@ -120,84 +114,80 @@ lwt_control (int enable, int clear) if (!clear) continue; - for (j = 0; j < lwt_pages_per_cpu; j++) { - memset (p->lwtp_events, 0, CFS_PAGE_SIZE); + for (j = 0; j < lwt_pages_per_cpu; j++) { + memset(p->lwtp_events, 0, PAGE_CACHE_SIZE); - p = cfs_list_entry (p->lwtp_list.next, - lwt_page_t, lwtp_list); - } - } + p = list_entry(p->lwtp_list.next, + lwt_page_t, lwtp_list); + } + } - if (enable) { - lwt_enabled = 1; - cfs_mb(); - LWT_EVENT(0,0,0,0); - } + if (enable) { + lwt_enabled = 1; + smp_mb(); + LWT_EVENT(0,0,0,0); + } - return (0); + return (0); } int -lwt_snapshot (cfs_cycles_t *now, int *ncpu, int *total_size, - void *user_ptr, int user_size) +lwt_snapshot(cfs_cycles_t *now, int *ncpu, int *total_size, + void *user_ptr, int user_size) { - const int events_per_page = CFS_PAGE_SIZE / sizeof(lwt_event_t); - const int bytes_per_page = events_per_page * sizeof(lwt_event_t); - lwt_page_t *p; - int i; - int j; + const int events_per_page = PAGE_CACHE_SIZE / sizeof(lwt_event_t); + const int bytes_per_page = events_per_page * sizeof(lwt_event_t); + lwt_page_t *p; + int i; + int j; - if (!cfs_capable(CFS_CAP_SYS_ADMIN)) - return (-EPERM); + if (!cfs_capable(CFS_CAP_SYS_ADMIN)) + return (-EPERM); - *ncpu = cfs_num_online_cpus(); - *total_size = cfs_num_online_cpus() * lwt_pages_per_cpu * - bytes_per_page; - *now = get_cycles(); + *ncpu = num_online_cpus(); + *total_size = num_online_cpus() * lwt_pages_per_cpu * bytes_per_page; + *now = get_cycles(); - if (user_ptr == NULL) - return (0); + if (user_ptr == NULL) + return (0); - for (i = 0; i < cfs_num_online_cpus(); i++) { - p = lwt_cpus[i].lwtc_current_page; + for (i = 0; i < num_online_cpus(); i++) { + p = lwt_cpus[i].lwtc_current_page; if (p == NULL) - return (-ENODATA); + return -ENODATA; - for (j = 0; j < lwt_pages_per_cpu; j++) { - if (cfs_copy_to_user(user_ptr, p->lwtp_events, - bytes_per_page)) - return (-EFAULT); - - user_ptr = ((char *)user_ptr) + bytes_per_page; - p = cfs_list_entry(p->lwtp_list.next, - lwt_page_t, lwtp_list); - } - } - - return (0); + for (j = 0; j < lwt_pages_per_cpu; j++) { + if (copy_to_user(user_ptr, p->lwtp_events, + bytes_per_page)) + return -EFAULT; + + user_ptr = ((char *)user_ptr) + bytes_per_page; + p = list_entry(p->lwtp_list.next, + lwt_page_t, lwtp_list); + } + } + return (0); } -int -lwt_init () +int lwt_init () { int i; - int j; + int j; - for (i = 0; i < cfs_num_online_cpus(); i++) - if (lwt_cpus[i].lwtc_current_page != NULL) - return (-EALREADY); + for (i = 0; i < num_online_cpus(); i++) + if (lwt_cpus[i].lwtc_current_page != NULL) + return (-EALREADY); - LASSERT (!lwt_enabled); + LASSERT (!lwt_enabled); /* NULL pointers, zero scalars */ memset (lwt_cpus, 0, sizeof (lwt_cpus)); - lwt_pages_per_cpu = - LWT_MEMORY / (cfs_num_online_cpus() * CFS_PAGE_SIZE); + lwt_pages_per_cpu = LWT_MEMORY / (num_online_cpus() * PAGE_CACHE_SIZE); - for (i = 0; i < cfs_num_online_cpus(); i++) + for (i = 0; i < num_online_cpus(); i++) for (j = 0; j < lwt_pages_per_cpu; j++) { - struct page *page = alloc_page (GFP_KERNEL); + struct page *page = alloc_page(GFP_KERNEL); lwt_page_t *lwtp; if (page == NULL) { @@ -216,49 +206,46 @@ lwt_init () lwtp->lwtp_page = page; lwtp->lwtp_events = page_address(page); - memset (lwtp->lwtp_events, 0, CFS_PAGE_SIZE); + memset(lwtp->lwtp_events, 0, PAGE_CACHE_SIZE); if (j == 0) { - CFS_INIT_LIST_HEAD (&lwtp->lwtp_list); + INIT_LIST_HEAD (&lwtp->lwtp_list); lwt_cpus[i].lwtc_current_page = lwtp; } else { - cfs_list_add (&lwtp->lwtp_list, - &lwt_cpus[i].lwtc_current_page->lwtp_list); + list_add(&lwtp->lwtp_list, + &lwt_cpus[i].lwtc_current_page->lwtp_list); } } - lwt_enabled = 1; - cfs_mb(); + lwt_enabled = 1; + smp_mb(); - LWT_EVENT(0,0,0,0); + LWT_EVENT(0,0,0,0); - return (0); + return (0); } -void -lwt_fini () +void lwt_fini () { - int i; - - lwt_control(0, 0); - - for (i = 0; i < cfs_num_online_cpus(); i++) - while (lwt_cpus[i].lwtc_current_page != NULL) { - lwt_page_t *lwtp = lwt_cpus[i].lwtc_current_page; - - if (cfs_list_empty (&lwtp->lwtp_list)) { - lwt_cpus[i].lwtc_current_page = NULL; - } else { - lwt_cpus[i].lwtc_current_page = - cfs_list_entry (lwtp->lwtp_list.next, - lwt_page_t, lwtp_list); - - cfs_list_del (&lwtp->lwtp_list); - } - - __free_page (lwtp->lwtp_page); - LIBCFS_FREE (lwtp, sizeof (*lwtp)); - } + int i; + + lwt_control(0, 0); + + for (i = 0; i < num_online_cpus(); i++) + while (lwt_cpus[i].lwtc_current_page != NULL) { + lwt_page_t *lwtp = lwt_cpus[i].lwtc_current_page; + + if (list_empty (&lwtp->lwtp_list)) { + lwt_cpus[i].lwtc_current_page = NULL; + } else { + lwt_cpus[i].lwtc_current_page = + list_entry(lwtp->lwtp_list.next, + lwt_page_t, lwtp_list); + list_del (&lwtp->lwtp_list); + } + __free_page (lwtp->lwtp_page); + LIBCFS_FREE (lwtp, sizeof (*lwtp)); + } } EXPORT_SYMBOL(lwt_enabled);