2002-10-10 16:20:56

by Petr Vandrovec

[permalink] [raw]
Subject: Re: [Linux-streams] Re: [PATCH] Re: export of sys_call_tabl

On 10 Oct 02 at 11:01, David Grothe wrote:
>
> Does this patch address your suggestions? This has been tested on 2.4.19.

Well, it can be that way. But if you are allowing
register_streams_calls(NULL, NULL), maybe you can move
unregister_streams_calls() to the headers and make it inline.

And you are returning while holding streams_call_sem semaphore
when failing with -EBUSY. It is not good idea.
Petr Vandrovec
[email protected]

+int register_streams_calls(int (*putpmsg) (int, void *, void *, int, int),
+ int (*getpmsg) (int, void *, void *, int, int))
+{
+ down_write(&streams_call_sem) ; /* should return int, but doesn't */
+ if ( (putpmsg != NULL && do_putpmsg != NULL)
+ || (getpmsg != NULL && do_getpmsg != NULL)
+ )
+ return -EBUSY;
+ do_putpmsg = putpmsg;
+ do_getpmsg = getpmsg;
+ up_write(&streams_call_sem);
+ return 0 ;
+}
+
+void unregister_streams_calls(void)
+{
+ register_streams_calls(NULL, NULL);
+}
+
asmlinkage long sys_ni_syscall(void)
{
return -ENOSYS;


2002-10-10 16:24:52

by David Grothe

[permalink] [raw]
Subject: Re: [Linux-streams] Re: [PATCH] Re: export of sys_call_tabl

This looks better:

int register_streams_calls(int (*putpmsg) (int, void *, void *, int, int),
int (*getpmsg) (int, void *, void *, int, int))
{
int ret = 0;
down_write(&streams_call_sem) ; /* should return int, but doesn't */
if ( (putpmsg != NULL && do_putpmsg != NULL)
|| (getpmsg != NULL && do_getpmsg != NULL)
)
ret = -EBUSY;
else {
do_putpmsg = putpmsg;
do_getpmsg = getpmsg;
}
up_write(&streams_call_sem);
return 0 ;
}

How about if we just eliminate the unregister_streams routine? LiS can
just call register_streams(NULL,NULL) when it wants to unregister.

-- Dave

At 06:25 PM 10/10/2002 Thursday, Petr Vandrovec wrote:
>On 10 Oct 02 at 11:01, David Grothe wrote:
> >
> > Does this patch address your suggestions? This has been tested on 2.4.19.
>
>Well, it can be that way. But if you are allowing
>register_streams_calls(NULL, NULL), maybe you can move
>unregister_streams_calls() to the headers and make it inline.
>
>And you are returning while holding streams_call_sem semaphore
>when failing with -EBUSY. It is not good idea.
> Petr Vandrovec
> [email protected]
>
>
>+int register_streams_calls(int (*putpmsg) (int, void *, void *, int, int),
>+ int (*getpmsg) (int, void *, void *, int, int))
>+{
>+ down_write(&streams_call_sem) ; /* should return int, but doesn't */
>+ if ( (putpmsg != NULL && do_putpmsg != NULL)
>+ || (getpmsg != NULL && do_getpmsg != NULL)
>+ )
>+ return -EBUSY;
>+ do_putpmsg = putpmsg;
>+ do_getpmsg = getpmsg;
>+ up_write(&streams_call_sem);
>+ return 0 ;
>+}
>+
>+void unregister_streams_calls(void)
>+{
>+ register_streams_calls(NULL, NULL);
>+}
>+
> asmlinkage long sys_ni_syscall(void)
> {
> return -ENOSYS;