Messages in this thread |  | | | Subject | Re: get_user <-> scsi-idle | | Date | Sat, 25 Jan 1997 21:17:50 +0200 (EET) | | From | Matti Aarnio <> | |
> hello all,
> i'm trying to hack scsi-idle to work with 2.1.22. between 2.0.x and 2.1.x,
> get_user changed at least from having one argument to having two arguments.
>
> the code segment, that works with 2.0.xx, is
>
> + if (get_user((long *) arg))
> + scsi_cmd[4] = 1;
> + else
> + scsi_cmd[4] = 0;
> +
>
> could someone recomend a rewrite for 2.1.x? also, a brief description of
> what is going on here would be appreciated. specifically, what is the
> difference in the functioning of the old and new get_user? the code is
> simply too deep for me to read.
"what is going on" with get_user() is described in kernel source
file: Documentation/exception.txt --- generally speaking it is
*DEEP* to read by anybody :-)
(It is also rather unlike the general language specific exception
handling in several programming languages -- these are HARDWARE
exceptions that are handled here in quite ingenious manner. )
The rewrite is:
int val, err;
if ((err = get_user(val, (void*)arg)))
return err;
if (val)
scsi_cmd[4] = 1;
else
scsi_cmd[4] = 0;
(and throw away the verify_area() calls -- but make sure
that you don't do get_user() after starting something
which is difficult to revert latter.)
> regards,
> ben.
/Matti Aarnio <matti.aarnio@tele.fi>
|  |