Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c02205e9 authored by Al Viro's avatar Al Viro
Browse files

dio: use probe_kernel_read()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent f9f5796e
Loading
Loading
Loading
Loading
+2 −15
Original line number Original line Diff line number Diff line
@@ -116,7 +116,6 @@ int __init dio_find(int deviceid)
	 */
	 */
	int scode, id;
	int scode, id;
	u_char prid, secid, i;
	u_char prid, secid, i;
	mm_segment_t fs;


	for (scode = 0; scode < DIO_SCMAX; scode++) {
	for (scode = 0; scode < DIO_SCMAX; scode++) {
		void *va;
		void *va;
@@ -135,17 +134,12 @@ int __init dio_find(int deviceid)
		else
		else
			va = ioremap(pa, PAGE_SIZE);
			va = ioremap(pa, PAGE_SIZE);


		fs = get_fs();
                if (probe_kernel_read(&i, (unsigned char *)va + DIO_IDOFF, 1)) {
		set_fs(KERNEL_DS);

                if (get_user(i, (unsigned char *)va + DIO_IDOFF)) {
			set_fs(fs);
			if (scode >= DIOII_SCBASE)
			if (scode >= DIOII_SCBASE)
				iounmap(va);
				iounmap(va);
                        continue;             /* no board present at that select code */
                        continue;             /* no board present at that select code */
		}
		}


		set_fs(fs);
		prid = DIO_ID(va);
		prid = DIO_ID(va);


                if (DIO_NEEDSSECID(prid)) {
                if (DIO_NEEDSSECID(prid)) {
@@ -170,7 +164,6 @@ int __init dio_find(int deviceid)
static int __init dio_init(void)
static int __init dio_init(void)
{
{
	int scode;
	int scode;
	mm_segment_t fs;
	int i;
	int i;
	struct dio_dev *dev;
	struct dio_dev *dev;
	int error;
	int error;
@@ -214,18 +207,12 @@ static int __init dio_init(void)
		else
		else
			va = ioremap(pa, PAGE_SIZE);
			va = ioremap(pa, PAGE_SIZE);


		fs = get_fs();
                if (probe_kernel_read(&i, (unsigned char *)va + DIO_IDOFF, 1)) {
		set_fs(KERNEL_DS);

                if (get_user(i, (unsigned char *)va + DIO_IDOFF)) {
			set_fs(fs);
			if (scode >= DIOII_SCBASE)
			if (scode >= DIOII_SCBASE)
				iounmap(va);
				iounmap(va);
                        continue;              /* no board present at that select code */
                        continue;              /* no board present at that select code */
		}
		}


		set_fs(fs);

                /* Found a board, allocate it an entry in the list */
                /* Found a board, allocate it an entry in the list */
		dev = kzalloc(sizeof(struct dio_dev), GFP_KERNEL);
		dev = kzalloc(sizeof(struct dio_dev), GFP_KERNEL);
		if (!dev)
		if (!dev)