X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Fselftest%2Fmodule.c;h=770c92c86476c27b39d3ba9a09ba36da86c48d04;hb=aff399789fe456d8dc58f49cd490c94916b2a46f;hp=8d624af63650a3a6c250ff0010ec84fa8e6ce4b2;hpb=6869932b552ac705f411de3362f01bd50c1f6f7d;p=fs%2Flustre-release.git diff --git a/lnet/selftest/module.c b/lnet/selftest/module.c index 8d624af..770c92c 100644 --- a/lnet/selftest/module.c +++ b/lnet/selftest/module.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. @@ -26,8 +24,10 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -37,30 +37,49 @@ #define DEBUG_SUBSYSTEM S_LNET #include "selftest.h" +#include "console.h" - -#define LST_INIT_NONE 0 -#define LST_INIT_RPC 1 -#define LST_INIT_FW 2 -#define LST_INIT_CONSOLE 3 - -extern int lstcon_console_init(void); -extern int lstcon_console_fini(void); +enum { + LST_INIT_NONE = 0, + LST_INIT_WI_SERIAL, + LST_INIT_WI_TEST, + LST_INIT_RPC, + LST_INIT_FW, + LST_INIT_CONSOLE +}; static int lst_init_step = LST_INIT_NONE; -void -lnet_selftest_fini (void) +struct cfs_wi_sched *lst_sched_serial; +struct cfs_wi_sched **lst_sched_test; + +static void +lnet_selftest_exit(void) { + int i; + switch (lst_init_step) { -#ifdef __KERNEL__ case LST_INIT_CONSOLE: lstcon_console_fini(); -#endif case LST_INIT_FW: sfw_shutdown(); case LST_INIT_RPC: srpc_shutdown(); + case LST_INIT_WI_TEST: + for (i = 0; + i < cfs_cpt_number(lnet_cpt_table()); i++) { + if (lst_sched_test[i] == NULL) + continue; + cfs_wi_sched_destroy(lst_sched_test[i]); + } + LIBCFS_FREE(lst_sched_test, + sizeof(lst_sched_test[0]) * + cfs_cpt_number(lnet_cpt_table())); + lst_sched_test = NULL; + + case LST_INIT_WI_SERIAL: + cfs_wi_sched_destroy(lst_sched_serial); + lst_sched_serial = NULL; case LST_INIT_NONE: break; default: @@ -69,10 +88,51 @@ lnet_selftest_fini (void) return; } -int -lnet_selftest_init (void) +void +lnet_selftest_structure_assertion(void) +{ + CLASSERT(sizeof(srpc_msg_t) == 160); + CLASSERT(sizeof(srpc_test_reqst_t) == 70); + CLASSERT(offsetof(srpc_msg_t, msg_body.tes_reqst.tsr_concur) == 72); + CLASSERT(offsetof(srpc_msg_t, msg_body.tes_reqst.tsr_ndest) == 78); + CLASSERT(sizeof(srpc_stat_reply_t) == 136); + CLASSERT(sizeof(srpc_stat_reqst_t) == 28); +} + +static int __init +lnet_selftest_init(void) { - int rc; + int nscheds; + int rc; + int i; + + rc = cfs_wi_sched_create("lst_s", lnet_cpt_table(), CFS_CPT_ANY, + 1, &lst_sched_serial); + if (rc != 0) { + CERROR("Failed to create serial WI scheduler for LST\n"); + return rc; + } + lst_init_step = LST_INIT_WI_SERIAL; + + nscheds = cfs_cpt_number(lnet_cpt_table()); + LIBCFS_ALLOC(lst_sched_test, sizeof(lst_sched_test[0]) * nscheds); + if (lst_sched_test == NULL) + goto error; + + lst_init_step = LST_INIT_WI_TEST; + for (i = 0; i < nscheds; i++) { + int nthrs = cfs_cpt_weight(lnet_cpt_table(), i); + + /* reserve at least one CPU for LND */ + nthrs = max(nthrs - 1, 1); + rc = cfs_wi_sched_create("lst_t", lnet_cpt_table(), i, + nthrs, &lst_sched_test[i]); + if (rc != 0) { + CERROR("Failed to create CPT affinity WI scheduler " + "%d for LST\n", i); + goto error; + } + } rc = srpc_startup(); if (rc != 0) { @@ -88,52 +148,22 @@ lnet_selftest_init (void) } lst_init_step = LST_INIT_FW; -#ifdef __KERNEL__ rc = lstcon_console_init(); if (rc != 0) { CERROR("LST can't startup console\n"); goto error; } - lst_init_step = LST_INIT_CONSOLE; -#endif - - return 0; + lst_init_step = LST_INIT_CONSOLE; + return 0; error: - lnet_selftest_fini(); - return rc; + lnet_selftest_exit(); + return rc; } -#ifdef __KERNEL__ - +MODULE_AUTHOR("OpenSFS, Inc. "); MODULE_DESCRIPTION("LNet Selftest"); +MODULE_VERSION("2.8.0"); MODULE_LICENSE("GPL"); -cfs_module(lnet, "0.9.0", lnet_selftest_init, lnet_selftest_fini); - -#else - -int -selftest_wait_events (void) -{ - int evts = 0; - - for (;;) { - /* Consume all pending events */ - while (srpc_check_event(0)) - evts++; - evts += stt_check_events(); - evts += swi_check_events(); - if (evts != 0) break; - - /* Nothing happened, block for events */ - evts += srpc_check_event(stt_poll_interval()); - /* We may have blocked, check for expired timers */ - evts += stt_check_events(); - if (evts == 0) /* timed out and still no event */ - break; - } - - return evts; -} - -#endif +module_init(lnet_selftest_init); +module_exit(lnet_selftest_exit);