X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lnet%2Fklnds%2Fqswlnd%2Fqswlnd.h;h=33e44b0c1b295d30973e357c0e7bd284ded81761;hp=bf3adc5c53d2e89b02187088b217eaf17f684978;hb=11c2c0ec77125041e9c8143a80e7e51aede653ea;hpb=cf814617a3151e53c30204fea07afad595b8eddc diff --git a/lnet/klnds/qswlnd/qswlnd.h b/lnet/klnds/qswlnd/qswlnd.h index bf3adc5..33e44b0c1 100644 --- a/lnet/klnds/qswlnd/qswlnd.h +++ b/lnet/klnds/qswlnd/qswlnd.h @@ -1,38 +1,46 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: +/* + * GPL HEADER START * - * Copyright (C) 2001 Cluster File Systems, Inc. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * This file is part of Lustre, http://www.lustre.org. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. * - * Lustre is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). * - * Lustre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * - * You should have received a copy of the GNU General Public License - * along with Lustre; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. * - * Basic library routines. + * GPL HEADER END + */ +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. * + * lnet/klnds/qswlnd/qswlnd.h + * + * Basic library routines. */ #ifndef _QSWNAL_H #define _QSWNAL_H -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif #include #undef printf /* nasty QSW #define */ -#ifndef AUTOCONF_INCLUDED -#include -#endif #include #include @@ -42,11 +50,7 @@ #include #include #include -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) -#include /* wait_on_buffer */ -#else #include /* wait_on_buffer */ -#endif #include #include #include @@ -59,13 +63,13 @@ #include #include #include -#include #define DEBUG_SUBSYSTEM S_LND -#include +#include #include #include +#include /* fixed constants */ #define KQSW_SMALLMSG (4<<10) /* small/large ep receiver breakpoint */ @@ -168,22 +172,21 @@ typedef union { typedef struct kqswnal_rx { - struct list_head krx_list; /* enqueue -> thread */ - struct kqswnal_rx *krx_alloclist; /* stack in kqn_rxds */ - EP_RCVR *krx_eprx; /* port to post receives to */ - EP_RXD *krx_rxd; /* receive descriptor (for repost) */ - EP_NMD krx_elanbuffer; /* contiguous Elan buffer */ - int krx_npages; /* # pages in receive buffer */ - int krx_nob; /* Number Of Bytes received into buffer */ - int krx_rpc_reply_needed:1; /* peer waiting for EKC RPC reply */ - int krx_raw_lnet_hdr:1; /* msg is a raw lnet hdr (portals compatible) */ - int krx_state; /* what this RX is doing */ - atomic_t krx_refcount; /* how to tell when rpc is done */ + cfs_list_t krx_list; /* enqueue -> thread */ + struct kqswnal_rx *krx_alloclist;/* stack in kqn_rxds */ + EP_RCVR *krx_eprx; /* port to post receives to */ + EP_RXD *krx_rxd; /* receive descriptor (for repost) */ + EP_NMD krx_elanbuffer;/* contiguous Elan buffer */ + int krx_npages; /* # pages in receive buffer */ + int krx_nob; /* Number Of Bytes received into buffer */ + int krx_rpc_reply_needed:1; /* peer waiting for EKC RPC reply */ + int krx_state; /* what this RX is doing */ + cfs_atomic_t krx_refcount; /* how to tell when rpc is done */ #if KQSW_CKSUM - __u32 krx_cksum; /* checksum */ + __u32 krx_cksum; /* checksum */ #endif - kqswnal_rpc_reply_t krx_rpc_reply; /* rpc reply status block */ - lnet_kiov_t krx_kiov[KQSW_NRXMSGPAGES_LARGE]; /* buffer frags */ + kqswnal_rpc_reply_t krx_rpc_reply; /* rpc reply status block */ + lnet_kiov_t krx_kiov[KQSW_NRXMSGPAGES_LARGE];/* buffer frags */ } kqswnal_rx_t; #define KRX_POSTED 1 /* receiving */ @@ -193,31 +196,31 @@ typedef struct kqswnal_rx typedef struct kqswnal_tx { - struct list_head ktx_list; /* enqueue idle/active */ - struct list_head ktx_schedlist; /* enqueue on scheduler */ - struct kqswnal_tx *ktx_alloclist; /* stack in kqn_txds */ - unsigned int ktx_state:7; /* What I'm doing */ - unsigned int ktx_firsttmpfrag:1; /* ktx_frags[0] is in my ebuffer ? 0 : 1 */ - __u32 ktx_basepage; /* page offset in reserved elan tx vaddrs for mapping pages */ - int ktx_npages; /* pages reserved for mapping messages */ - int ktx_nmappedpages; /* # pages mapped for current message */ - int ktx_port; /* destination ep port */ - lnet_nid_t ktx_nid; /* destination node */ - void *ktx_args[3]; /* completion passthru */ - char *ktx_buffer; /* pre-allocated contiguous buffer for hdr + small payloads */ - cfs_time_t ktx_launchtime; /* when (in jiffies) the transmit - * was launched */ - int ktx_status; /* completion status */ + cfs_list_t ktx_list; /* enqueue idle/active */ + cfs_list_t ktx_schedlist; /* enqueue on scheduler */ + struct kqswnal_tx *ktx_alloclist; /* stack in kqn_txds */ + unsigned int ktx_state:7; /* What I'm doing */ + unsigned int ktx_firsttmpfrag:1; /* ktx_frags[0] is in my ebuffer ? 0 : 1 */ + __u32 ktx_basepage; /* page offset in reserved elan tx vaddrs for mapping pages */ + int ktx_npages; /* pages reserved for mapping messages */ + int ktx_nmappedpages; /* # pages mapped for current message */ + int ktx_port; /* destination ep port */ + lnet_nid_t ktx_nid; /* destination node */ + void *ktx_args[3]; /* completion passthru */ + char *ktx_buffer; /* pre-allocated contiguous buffer for hdr + small payloads */ + cfs_time_t ktx_launchtime; /* when (in jiffies) the + * transmit was launched */ + int ktx_status; /* completion status */ #if KQSW_CKSUM - __u32 ktx_cksum; /* optimized GET payload checksum */ + __u32 ktx_cksum; /* optimized GET payload checksum */ #endif /* debug/info fields */ - pid_t ktx_launcher; /* pid of launching process */ + pid_t ktx_launcher; /* pid of launching process */ - int ktx_nfrag; /* # message frags */ - int ktx_rail; /* preferred rail */ - EP_NMD ktx_ebuffer; /* elan mapping of ktx_buffer */ - EP_NMD ktx_frags[EP_MAXFRAG];/* elan mapping of msg frags */ + int ktx_nfrag; /* # message frags */ + int ktx_rail; /* preferred rail */ + EP_NMD ktx_ebuffer; /* elan mapping of ktx_buffer */ + EP_NMD ktx_frags[EP_MAXFRAG];/* elan mapping of msg frags */ } kqswnal_tx_t; #define KTX_IDLE 0 /* on kqn_idletxds */ @@ -250,40 +253,40 @@ typedef struct typedef struct { - char kqn_init; /* what's been initialised */ - char kqn_shuttingdown; /* I'm trying to shut down */ - atomic_t kqn_nthreads; /* # threads running */ - lnet_ni_t *kqn_ni; /* _the_ instance of me */ - - kqswnal_rx_t *kqn_rxds; /* stack of all the receive descriptors */ - kqswnal_tx_t *kqn_txds; /* stack of all the transmit descriptors */ - - struct list_head kqn_idletxds; /* transmit descriptors free to use */ - struct list_head kqn_activetxds; /* transmit descriptors being used */ - spinlock_t kqn_idletxd_lock; /* serialise idle txd access */ - atomic_t kqn_pending_txs; /* # transmits being prepped */ - - spinlock_t kqn_sched_lock; /* serialise packet schedulers */ - wait_queue_head_t kqn_sched_waitq; /* scheduler blocks here */ - - struct list_head kqn_readyrxds; /* rxds full of data */ - struct list_head kqn_donetxds; /* completed transmits */ - struct list_head kqn_delayedtxds; /* delayed transmits */ - - EP_SYS *kqn_ep; /* elan system */ - EP_NMH *kqn_ep_tx_nmh; /* elan reserved tx vaddrs */ - EP_NMH *kqn_ep_rx_nmh; /* elan reserved rx vaddrs */ - EP_XMTR *kqn_eptx; /* elan transmitter */ - EP_RCVR *kqn_eprx_small; /* elan receiver (small messages) */ - EP_RCVR *kqn_eprx_large; /* elan receiver (large messages) */ - - int kqn_nnodes; /* this cluster's size */ - int kqn_elanid; /* this nodes's elan ID */ - - EP_STATUSBLK kqn_rpc_success; /* preset RPC reply status blocks */ - EP_STATUSBLK kqn_rpc_failed; - EP_STATUSBLK kqn_rpc_version; /* reply to future version query */ - EP_STATUSBLK kqn_rpc_magic; /* reply to future version query */ + char kqn_init; /* what's been initialised */ + char kqn_shuttingdown;/* I'm trying to shut down */ + cfs_atomic_t kqn_nthreads; /* # threads running */ + lnet_ni_t *kqn_ni; /* _the_ instance of me */ + + kqswnal_rx_t *kqn_rxds; /* stack of all the receive descriptors */ + kqswnal_tx_t *kqn_txds; /* stack of all the transmit descriptors */ + + cfs_list_t kqn_idletxds; /* transmit descriptors free to use */ + cfs_list_t kqn_activetxds; /* transmit descriptors being used */ + cfs_spinlock_t kqn_idletxd_lock; /* serialise idle txd access */ + cfs_atomic_t kqn_pending_txs;/* # transmits being prepped */ + + cfs_spinlock_t kqn_sched_lock; /* serialise packet schedulers */ + cfs_waitq_t kqn_sched_waitq;/* scheduler blocks here */ + + cfs_list_t kqn_readyrxds; /* rxds full of data */ + cfs_list_t kqn_donetxds; /* completed transmits */ + cfs_list_t kqn_delayedtxds;/* delayed transmits */ + + EP_SYS *kqn_ep; /* elan system */ + EP_NMH *kqn_ep_tx_nmh; /* elan reserved tx vaddrs */ + EP_NMH *kqn_ep_rx_nmh; /* elan reserved rx vaddrs */ + EP_XMTR *kqn_eptx; /* elan transmitter */ + EP_RCVR *kqn_eprx_small; /* elan receiver (small messages) */ + EP_RCVR *kqn_eprx_large; /* elan receiver (large messages) */ + + int kqn_nnodes; /* this cluster's size */ + int kqn_elanid; /* this nodes's elan ID */ + + EP_STATUSBLK kqn_rpc_success;/* preset RPC reply status blocks */ + EP_STATUSBLK kqn_rpc_failed; + EP_STATUSBLK kqn_rpc_version;/* reply to future version query */ + EP_STATUSBLK kqn_rpc_magic; /* reply to future version query */ } kqswnal_data_t; /* kqn_init state */ @@ -332,8 +335,8 @@ kqswnal_pages_spanned (void *base, int nob) static inline void kqswnal_rx_decref (kqswnal_rx_t *krx) { - LASSERT (atomic_read (&krx->krx_refcount) > 0); - if (atomic_dec_and_test (&krx->krx_refcount)) + LASSERT (cfs_atomic_read (&krx->krx_refcount) > 0); + if (cfs_atomic_dec_and_test (&krx->krx_refcount)) kqswnal_rx_done(krx); }