Re: [patch 3/6] sys_indirect RFC - sys_indirect core

2007-06-29 Thread Ulrich Drepper

On 6/29/07, Davide Libenzi <[EMAIL PROTECTED]> wrote:

+int indirect_set_context(struct fsa_context *ator,
+const struct indirect_ctx __user * __user *ctxs,
+unsigned int nctxs, struct indirect_op **first)
+{
+   unsigned int i;
+   int error;
+   u32 ctx;
+   const struct indirect_ctx __user *pctx;
+   struct indirect_op *new;
+
+   *first = NULL;
+   for (i = 0; i < nctxs; i++) {
+   if (get_user(pctx, [i]) || get_user(ctx, >ctx))
+   return -EFAULT;
+   if (unlikely(ctx >= ARRAY_SIZE(inprocs) || !inprocs[ctx].set))
+   return -EINVAL;
+   error = (*inprocs[ctx].set)(ator, pctx, );
+   if (unlikely(error))
+   return error;
+   new->next = *first;
+   *first = new;
+   }


If you use one single struct as explained in my last mail all this
shouldn't be necessary.  The sys_indirect syscall would simply points
current->ind_ctx to a kernel-copy of the struct.  Then call the
syscall and on return clear current->ind_ctx.

In the affected syscalls we can then test whether current->ind_ctx is
NULL and if not, enable the extra functionality.

These callbacks etc seem to be far too expensive and complicated.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [patch 3/6] sys_indirect RFC - sys_indirect core

2007-06-29 Thread Ulrich Drepper

On 6/29/07, Davide Libenzi [EMAIL PROTECTED] wrote:

+int indirect_set_context(struct fsa_context *ator,
+const struct indirect_ctx __user * __user *ctxs,
+unsigned int nctxs, struct indirect_op **first)
+{
+   unsigned int i;
+   int error;
+   u32 ctx;
+   const struct indirect_ctx __user *pctx;
+   struct indirect_op *new;
+
+   *first = NULL;
+   for (i = 0; i  nctxs; i++) {
+   if (get_user(pctx, ctxs[i]) || get_user(ctx, pctx-ctx))
+   return -EFAULT;
+   if (unlikely(ctx = ARRAY_SIZE(inprocs) || !inprocs[ctx].set))
+   return -EINVAL;
+   error = (*inprocs[ctx].set)(ator, pctx, new);
+   if (unlikely(error))
+   return error;
+   new-next = *first;
+   *first = new;
+   }


If you use one single struct as explained in my last mail all this
shouldn't be necessary.  The sys_indirect syscall would simply points
current-ind_ctx to a kernel-copy of the struct.  Then call the
syscall and on return clear current-ind_ctx.

In the affected syscalls we can then test whether current-ind_ctx is
NULL and if not, enable the extra functionality.

These callbacks etc seem to be far too expensive and complicated.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/