-#ifndef __KERNEL__
-# include <stdio.h>
-#else
-# define DEBUG_SUBSYSTEM S_PORTALS
-# include <linux/kp30.h>
-#endif
-
-#include <portals/lib-p30.h>
-#include <portals/arg-blocks.h>
-
-static void lib_me_dump(nal_cb_t * nal, lib_me_t * me);
-
-int do_PtlMEAttach(nal_cb_t * nal, void *private, void *v_args, void *v_ret)
-{
- PtlMEAttach_in *args = v_args;
- PtlMEAttach_out *ret = v_ret;
- lib_ni_t *ni = &nal->ni;
- lib_ptl_t *tbl = &ni->tbl;
- unsigned long flags;
- lib_me_t *me;
-
- if (args->index_in >= tbl->size)
- return ret->rc = PTL_INV_PTINDEX;
-
- /* Should check for valid matchid, but not yet */
- if (0)
- return ret->rc = PTL_INV_PROC;
-
- me = lib_me_alloc (nal);
- if (me == NULL)
- return (ret->rc = PTL_NOSPACE);
-
- state_lock(nal, &flags);
-
- me->match_id = args->match_id_in;
- me->match_bits = args->match_bits_in;
- me->ignore_bits = args->ignore_bits_in;
- me->unlink = args->unlink_in;
- me->md = NULL;
-
- lib_initialise_handle (nal, &me->me_lh, PTL_COOKIE_TYPE_ME);
-
- if (args->position_in == PTL_INS_AFTER)
- list_add_tail(&me->me_list, &(tbl->tbl[args->index_in]));
- else
- list_add(&me->me_list, &(tbl->tbl[args->index_in]));
-
- ptl_me2handle(&ret->handle_out, me);
-
- state_unlock(nal, &flags);
-
- return ret->rc = PTL_OK;
-}
-
-int do_PtlMEInsert(nal_cb_t * nal, void *private, void *v_args, void *v_ret)
-{
- PtlMEInsert_in *args = v_args;
- PtlMEInsert_out *ret = v_ret;
- unsigned long flags;
- lib_me_t *me;
- lib_me_t *new;
-
- new = lib_me_alloc (nal);
- if (new == NULL)
- return (ret->rc = PTL_NOSPACE);
-
- /* Should check for valid matchid, but not yet */
-
- state_lock(nal, &flags);
-
- me = ptl_handle2me(&args->current_in, nal);
- if (me == NULL) {
- lib_me_free (nal, new);
-
- state_unlock (nal, &flags);
- return (ret->rc = PTL_INV_ME);
- }
-
- new->match_id = args->match_id_in;
- new->match_bits = args->match_bits_in;
- new->ignore_bits = args->ignore_bits_in;
- new->unlink = args->unlink_in;
- new->md = NULL;
-
- lib_initialise_handle (nal, &new->me_lh, PTL_COOKIE_TYPE_ME);
-
- if (args->position_in == PTL_INS_AFTER)
- list_add_tail(&new->me_list, &me->me_list);
- else
- list_add(&new->me_list, &me->me_list);
-
- ptl_me2handle(&ret->handle_out, new);
-
- state_unlock(nal, &flags);
-
- return ret->rc = PTL_OK;
-}
-
-int do_PtlMEUnlink(nal_cb_t * nal, void *private, void *v_args, void *v_ret)
-{
- PtlMEUnlink_in *args = v_args;
- PtlMEUnlink_out *ret = v_ret;
- unsigned long flags;
- lib_me_t *me;
-
- state_lock(nal, &flags);
-
- me = ptl_handle2me(&args->current_in, nal);
- if (me == NULL) {
- ret->rc = PTL_INV_ME;
- } else {
- lib_me_unlink(nal, me);
- ret->rc = PTL_OK;
- }
-
- state_unlock(nal, &flags);