+++ /dev/null
-.deps
-Makefile
-.*.cmd
-autoMakefile.in
-autoMakefile
-*.ko
-*.mod.c
-.*.flags
-.tmp_versions
-.depend
+++ /dev/null
-MODULES := klonal
-klonal-objs := lonal.o lonal_cb.o
-
-@INCLUDE_RULES@
+++ /dev/null
-# Copyright (C) 2001 Cluster File Systems, Inc.
-#
-# This code is issued under the GNU General Public License.
-# See the file COPYING in this distribution
-
-if MODULES
-if !CRAY_PORTALS
-if LINUX
-modulenet_DATA = klonal$(KMODEXT)
-endif
-endif
-endif
-
-MOSTLYCLEANFILES = *.o *.ko *.mod.c
-DIST_SOURCES = $(klonal-objs:%.o=%.c) lonal.h
+++ /dev/null
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2004 Cluster File Systems, Inc.
- *
- * This file is part of Lustre, http://www.lustre.org.
- *
- * 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.
- *
- * 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
- * along with Lustre; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "lonal.h"
-
-ptl_nal_t klonal_nal = {
- .nal_type = LONAL,
- .nal_startup = klonal_startup,
- .nal_shutdown = klonal_shutdown,
- .nal_send = klonal_send,
- .nal_send_pages = klonal_send_pages,
- .nal_recv = klonal_recv,
- .nal_recv_pages = klonal_recv_pages,
-};
-
-int klonal_instanced;
-
-void
-klonal_shutdown(ptl_ni_t *ni)
-{
- CDEBUG (D_NET, "shutdown\n");
- LASSERT (ni->ni_nal == &klonal_nal);
- LASSERT (klonal_instanced);
-
- klonal_instanced = 0;
- PORTAL_MODULE_UNUSE;
-}
-
-ptl_err_t
-klonal_startup (ptl_ni_t *ni)
-{
- LASSERT (ni->ni_nal == &klonal_nal);
-
- if (klonal_instanced) {
- /* Multiple instances of the loopback NI is never right */
- CERROR ("Only 1 instance supported\n");
- return PTL_FAIL;
- }
-
- CDEBUG (D_NET, "start\n");
-
- klonal_instanced = 1;
-
- PORTAL_MODULE_USE;
- return (PTL_OK);
-}
-
-void __exit
-klonal_finalise (void)
-{
- ptl_unregister_nal(&klonal_nal);
-}
-
-static int __init
-klonal_initialise (void)
-{
- ptl_register_nal(&klonal_nal);
- return (0);
-}
-
-MODULE_AUTHOR("Cluster File Systems, Inc. <info@clusterfs.com>");
-MODULE_DESCRIPTION("Loopback NAL v0.01");
-MODULE_LICENSE("GPL");
-
-module_init (klonal_initialise);
-module_exit (klonal_finalise);
+++ /dev/null
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * This file is part of Lustre, http://www.lustre.org.
- *
- * 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.
- *
- * 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
- * along with Lustre; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _LONAL_H
-#define _LONAL_H
-#ifndef EXPORT_SYMTAB
-# define EXPORT_SYMTAB
-#endif
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <linux/uio.h>
-#include <linux/init.h>
-
-#define DEBUG_SUBSYSTEM S_NAL
-
-#include <libcfs/kp30.h>
-#include <portals/p30.h>
-#include <portals/lib-p30.h>
-
-#define KLOD_IOV 153401
-#define KLOD_KIOV 153402
-
-typedef struct
-{
- unsigned int klod_type;
- unsigned int klod_niov;
- size_t klod_offset;
- size_t klod_nob;
- union {
- struct iovec *iov;
- ptl_kiov_t *kiov;
- } klod_iov;
-} klo_desc_t;
-
-ptl_err_t klonal_startup (ptl_ni_t *ni);
-void klonal_shutdown (ptl_ni_t *ni);
-ptl_err_t klonal_send (ptl_ni_t *ni, void *private,
- ptl_msg_t *ptlmsg, ptl_hdr_t *hdr,
- int type, ptl_process_id_t tgt, int routing,
- unsigned int payload_niov,
- struct iovec *payload_iov,
- size_t payload_offset, size_t payload_nob);
-ptl_err_t klonal_send_pages (ptl_ni_t *ni, void *private,
- ptl_msg_t *ptlmsg, ptl_hdr_t *hdr,
- int type, ptl_process_id_t tgt, int routing,
- unsigned int payload_niov,
- ptl_kiov_t *payload_kiov,
- size_t payload_offset, size_t payload_nob);
-ptl_err_t klonal_recv(ptl_ni_t *ni, void *private,
- ptl_msg_t *ptlmsg, unsigned int niov,
- struct iovec *iov, size_t offset,
- size_t mlen, size_t rlen);
-ptl_err_t klonal_recv_pages(ptl_ni_t *ni, void *private,
- ptl_msg_t *ptlmsg, unsigned int niov,
- ptl_kiov_t *kiov, size_t offset,
- size_t mlen, size_t rlen);
-
-#endif /* _LONAL_H */
+++ /dev/null
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2004 Cluster File Systems, Inc.
- *
- * This file is part of Lustre, http://www.lustre.org.
- *
- * 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.
- *
- * 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
- * along with Lustre; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "lonal.h"
-
-ptl_err_t
-klonal_send (ptl_ni_t *ni,
- void *private,
- ptl_msg_t *ptlmsg,
- ptl_hdr_t *hdr,
- int type,
- ptl_process_id_t target,
- int routing,
- unsigned int payload_niov,
- struct iovec *payload_iov,
- size_t payload_offset,
- size_t payload_nob)
-{
- klo_desc_t klod = {
- .klod_type = KLOD_IOV,
- .klod_niov = payload_niov,
- .klod_offset = payload_offset,
- .klod_nob = payload_nob,
- .klod_iov = { .iov = payload_iov } };
- ptl_err_t rc;
-
- LASSERT (!routing);
- LASSERT (target.nid == ni->ni_nid);
-
- rc = ptl_parse(ni, hdr, &klod);
- if (rc == PTL_OK)
- ptl_finalize(ni, private, ptlmsg, PTL_OK);
-
- return rc;
-}
-
-ptl_err_t
-klonal_send_pages (ptl_ni_t *ni,
- void *private,
- ptl_msg_t *ptlmsg,
- ptl_hdr_t *hdr,
- int type,
- ptl_process_id_t target,
- int routing,
- unsigned int payload_niov,
- ptl_kiov_t *payload_kiov,
- size_t payload_offset,
- size_t payload_nob)
-{
- klo_desc_t klod = {
- .klod_type = KLOD_KIOV,
- .klod_niov = payload_niov,
- .klod_offset = payload_offset,
- .klod_nob = payload_nob,
- .klod_iov = { .kiov = payload_kiov } };
- ptl_err_t rc;
-
- LASSERT (!routing);
- LASSERT (target.nid == ni->ni_nid);
-
- rc = ptl_parse(ni, hdr, &klod);
- if (rc == PTL_OK)
- ptl_finalize(ni, private, ptlmsg, PTL_OK);
-
- return rc;
-}
-
-ptl_err_t
-klonal_recv(ptl_ni_t *ni,
- void *private,
- ptl_msg_t *ptlmsg,
- unsigned int niov,
- struct iovec *iov,
- size_t offset,
- size_t mlen,
- size_t rlen)
-{
- klo_desc_t *klod = (klo_desc_t *)private;
-
- /* I only handle mapped->mapped matches */
- LASSERT(klod->klod_type == KLOD_IOV);
-
- if (mlen == 0)
- goto out;
-
- while (offset >= iov->iov_len) {
- offset -= iov->iov_len;
- iov++;
- niov--;
- LASSERT(niov > 0);
- }
-
- while (klod->klod_offset >= klod->klod_iov.iov->iov_len) {
- klod->klod_offset -= klod->klod_iov.iov->iov_len;
- klod->klod_iov.iov++;
- klod->klod_niov--;
- LASSERT(klod->klod_niov > 0);
- }
-
- do {
- int fraglen = MIN(iov->iov_len - offset,
- klod->klod_iov.iov->iov_len - klod->klod_offset);
-
- LASSERT(niov > 0);
- LASSERT(klod->klod_niov > 0);
-
- if (fraglen > mlen)
- fraglen = mlen;
-
- memcpy((void *)((unsigned long)iov->iov_base + offset),
- (void *)((unsigned long)klod->klod_iov.iov->iov_base +
- klod->klod_offset),
- fraglen);
-
- if (offset + fraglen < iov->iov_len) {
- offset += fraglen;
- } else {
- offset = 0;
- iov++;
- niov--;
- }
-
- if (klod->klod_offset + fraglen < klod->klod_iov.iov->iov_len ) {
- klod->klod_offset += fraglen;
- } else {
- klod->klod_offset = 0;
- klod->klod_iov.iov++;
- klod->klod_niov--;
- }
-
- mlen -= fraglen;
- } while (mlen > 0);
-
- out:
- ptl_finalize(ni, private, ptlmsg, PTL_OK);
- return PTL_OK;
-}
-
-ptl_err_t
-klonal_recv_pages(ptl_ni_t *ni,
- void *private,
- ptl_msg_t *ptlmsg,
- unsigned int niov,
- ptl_kiov_t *kiov,
- size_t offset,
- size_t mlen,
- size_t rlen)
-{
- void *srcaddr = NULL;
- void *dstaddr = NULL;
- unsigned long srcfrag = 0;
- unsigned long dstfrag = 0;
- unsigned long fraglen;
- klo_desc_t *klod = (klo_desc_t *)private;
-
- /* I only handle unmapped->unmapped matches */
- LASSERT(klod->klod_type == KLOD_KIOV);
-
- if (mlen == 0)
- goto out;
-
- while (offset >= kiov->kiov_len) {
- offset -= kiov->kiov_len;
- kiov++;
- niov--;
- LASSERT(niov > 0);
- }
-
- while (klod->klod_offset >= klod->klod_iov.kiov->kiov_len) {
- klod->klod_offset -= klod->klod_iov.kiov->kiov_len;
- klod->klod_iov.kiov++;
- klod->klod_niov--;
- LASSERT(klod->klod_niov > 0);
- }
-
- do {
- /* CAVEAT EMPTOR: I kmap 2 pages at once == slight risk of deadlock */
- LASSERT(niov > 0);
- if (dstaddr == NULL) {
- dstaddr = (void *)((unsigned long)kmap(kiov->kiov_page) +
- kiov->kiov_offset + offset);
- dstfrag = kiov->kiov_len - offset;
- }
-
- LASSERT(klod->klod_niov > 0);
- if (srcaddr == NULL) {
- srcaddr = (void *)((unsigned long)kmap(klod->klod_iov.kiov->kiov_page) +
- klod->klod_iov.kiov->kiov_offset + klod->klod_offset);
- srcfrag = klod->klod_iov.kiov->kiov_len - klod->klod_offset;
- }
-
- fraglen = MIN(srcfrag, dstfrag);
- if (fraglen > mlen)
- fraglen = mlen;
-
- memcpy(dstaddr, srcaddr, fraglen);
-
- if (fraglen < dstfrag) {
- dstfrag -= fraglen;
- dstaddr = (void *)((unsigned long)dstaddr + fraglen);
- } else {
- kunmap(kiov->kiov_page);
- dstaddr = NULL;
- offset = 0;
- kiov++;
- niov--;
- }
-
- if (fraglen < srcfrag) {
- srcfrag -= fraglen;
- srcaddr = (void *)((unsigned long)srcaddr + fraglen);
- } else {
- kunmap(klod->klod_iov.kiov->kiov_page);
- srcaddr = NULL;
- klod->klod_offset = 0;
- klod->klod_iov.kiov++;
- klod->klod_niov--;
- }
-
- mlen -= fraglen;
- } while (mlen > 0);
-
- if (dstaddr != NULL)
- kunmap(kiov->kiov_page);
-
- if (srcaddr != NULL)
- kunmap(klod->klod_iov.kiov->kiov_page);
-
- out:
- ptl_finalize(ni, private, ptlmsg, PTL_OK);
- return PTL_OK;
-}