]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
console: Use explicit pointer type for vc_uni_pagedir* fields
authorTakashi Iwai <tiwai@suse.de>
Tue, 13 May 2014 10:09:28 +0000 (12:09 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 28 May 2014 20:37:21 +0000 (13:37 -0700)
The vc_data.vc_uni_pagedir filed is currently long int, supposedly to
be served generically.  This, however, leads to lots of cast to
pointer, and rather it worsens the readability significantly.

Actually, we have now only a single uni_pagedir map implementation,
and this won't change likely.  So, it'd be much more simple and
error-prone to just use the exact pointer for struct uni_pagedir
instead of long.

Ditto for vc_uni_pagedir_loc.  It's a pointer to the uni_pagedir, thus
it can be changed similarly to the exact type.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/vt/consolemap.c
drivers/tty/vt/vt.c
drivers/video/console/vgacon.c
include/linux/console_struct.h

index 2978ca596a7ff9179c4d4958eb99b9ed1863c4c6..3fdc786b6b2fcd6f74b90e8d9c28e9c05f88a6de 100644 (file)
@@ -262,7 +262,7 @@ u16 inverse_translate(struct vc_data *conp, int glyph, int use_unicode)
        int m;
        if (glyph < 0 || glyph >= MAX_GLYPH)
                return 0;
-       else if (!(p = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc))
+       else if (!(p = *conp->vc_uni_pagedir_loc))
                return glyph;
        else if (use_unicode) {
                if (!p->inverse_trans_unicode)
@@ -287,7 +287,7 @@ static void update_user_maps(void)
        for (i = 0; i < MAX_NR_CONSOLES; i++) {
                if (!vc_cons_allocated(i))
                        continue;
-               p = (struct uni_pagedir *)*vc_cons[i].d->vc_uni_pagedir_loc;
+               p = *vc_cons[i].d->vc_uni_pagedir_loc;
                if (p && p != q) {
                        set_inverse_transl(vc_cons[i].d, p, USER_MAP);
                        set_inverse_trans_unicode(vc_cons[i].d, p);
@@ -418,10 +418,10 @@ void con_free_unimap(struct vc_data *vc)
 {
        struct uni_pagedir *p;
 
-       p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
+       p = *vc->vc_uni_pagedir_loc;
        if (!p)
                return;
-       *vc->vc_uni_pagedir_loc = 0;
+       *vc->vc_uni_pagedir_loc = NULL;
        if (--p->refcount)
                return;
        con_release_unimap(p);
@@ -436,7 +436,7 @@ static int con_unify_unimap(struct vc_data *conp, struct uni_pagedir *p)
        for (i = 0; i < MAX_NR_CONSOLES; i++) {
                if (!vc_cons_allocated(i))
                        continue;
-               q = (struct uni_pagedir *)*vc_cons[i].d->vc_uni_pagedir_loc;
+               q = *vc_cons[i].d->vc_uni_pagedir_loc;
                if (!q || q == p || q->sum != p->sum)
                        continue;
                for (j = 0; j < 32; j++) {
@@ -459,7 +459,7 @@ static int con_unify_unimap(struct vc_data *conp, struct uni_pagedir *p)
                }
                if (j == 32) {
                        q->refcount++;
-                       *conp->vc_uni_pagedir_loc = (unsigned long)q;
+                       *conp->vc_uni_pagedir_loc = q;
                        con_release_unimap(p);
                        kfree(p);
                        return 1;
@@ -500,7 +500,7 @@ static int con_do_clear_unimap(struct vc_data *vc, struct unimapinit *ui)
 {
        struct uni_pagedir *p, *q;
 
-       p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
+       p = *vc->vc_uni_pagedir_loc;
        if (p && p->readonly)
                return -EIO;
 
@@ -512,7 +512,7 @@ static int con_do_clear_unimap(struct vc_data *vc, struct unimapinit *ui)
                        return -ENOMEM;
                }
                q->refcount=1;
-               *vc->vc_uni_pagedir_loc = (unsigned long)q;
+               *vc->vc_uni_pagedir_loc = q;
        } else {
                if (p == dflt) dflt = NULL;
                p->refcount++;
@@ -539,7 +539,7 @@ int con_set_unimap(struct vc_data *vc, ushort ct, struct unipair __user *list)
        console_lock();
 
        /* Save original vc_unipagdir_loc in case we allocate a new one */
-       p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
+       p = *vc->vc_uni_pagedir_loc;
        if (p->readonly) {
                console_unlock();
                return -EIO;
@@ -564,7 +564,7 @@ int con_set_unimap(struct vc_data *vc, ushort ct, struct unipair __user *list)
                 * Since refcount was > 1, con_clear_unimap() allocated a
                 * a new uni_pagedir for this vc.  Re: p != q
                 */
-               q = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
+               q = *vc->vc_uni_pagedir_loc;
 
                /*
                 * uni_pgdir is a 32*32*64 table with rows allocated
@@ -586,7 +586,7 @@ int con_set_unimap(struct vc_data *vc, ushort ct, struct unipair __user *list)
                                        err1 = con_insert_unipair(q, l, p2[k]);
                                        if (err1) {
                                                p->refcount++;
-                                               *vc->vc_uni_pagedir_loc = (unsigned long)p;
+                                               *vc->vc_uni_pagedir_loc = p;
                                                con_release_unimap(q);
                                                kfree(q);
                                                console_unlock();
@@ -655,12 +655,12 @@ int con_set_default_unimap(struct vc_data *vc)
        struct uni_pagedir *p;
 
        if (dflt) {
-               p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
+               p = *vc->vc_uni_pagedir_loc;
                if (p == dflt)
                        return 0;
 
                dflt->refcount++;
-               *vc->vc_uni_pagedir_loc = (unsigned long)dflt;
+               *vc->vc_uni_pagedir_loc = dflt;
                if (p && !--p->refcount) {
                        con_release_unimap(p);
                        kfree(p);
@@ -674,7 +674,7 @@ int con_set_default_unimap(struct vc_data *vc)
        if (err)
                return err;
     
-       p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
+       p = *vc->vc_uni_pagedir_loc;
        q = dfont_unitable;
        
        for (i = 0; i < 256; i++)
@@ -685,7 +685,7 @@ int con_set_default_unimap(struct vc_data *vc)
                }
                        
        if (con_unify_unimap(vc, p)) {
-               dflt = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
+               dflt = *vc->vc_uni_pagedir_loc;
                return err;
        }
 
@@ -713,9 +713,9 @@ int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc)
        if (*dst_vc->vc_uni_pagedir_loc == *src_vc->vc_uni_pagedir_loc)
                return 0;
        con_free_unimap(dst_vc);
-       q = (struct uni_pagedir *)*src_vc->vc_uni_pagedir_loc;
+       q = *src_vc->vc_uni_pagedir_loc;
        q->refcount++;
-       *dst_vc->vc_uni_pagedir_loc = (long)q;
+       *dst_vc->vc_uni_pagedir_loc = q;
        return 0;
 }
 EXPORT_SYMBOL(con_copy_unimap);
@@ -737,7 +737,7 @@ int con_get_unimap(struct vc_data *vc, ushort ct, ushort __user *uct, struct uni
 
        ect = 0;
        if (*vc->vc_uni_pagedir_loc) {
-               p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
+               p = *vc->vc_uni_pagedir_loc;
                for (i = 0; i < 32; i++)
                if ((p1 = p->uni_pgdir[i]))
                        for (j = 0; j < 32; j++)
@@ -810,7 +810,7 @@ conv_uni_to_pc(struct vc_data *conp, long ucs)
        if (!*conp->vc_uni_pagedir_loc)
                return -3;
 
-       p = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc;  
+       p = *conp->vc_uni_pagedir_loc;
        if ((p1 = p->uni_pgdir[ucs >> 11]) &&
            (p2 = p1[(ucs >> 6) & 0x1f]) &&
            (h = p2[ucs & 0x3f]) < MAX_GLYPH)
index 5149a72a84ffc4045de6e965481e7b0712f83110..5e0f6ff2e2f5f0b6f1a20a63a68a79d6d4033084 100644 (file)
@@ -735,7 +735,7 @@ static void visual_init(struct vc_data *vc, int num, int init)
        vc->vc_num = num;
        vc->vc_display_fg = &master_display_fg;
        vc->vc_uni_pagedir_loc = &vc->vc_uni_pagedir;
-       vc->vc_uni_pagedir = 0;
+       vc->vc_uni_pagedir = NULL;
        vc->vc_hi_font_mask = 0;
        vc->vc_complement_mask = 0;
        vc->vc_can_do_color = 0;
index 9e18770aaba685749f4bd0576f60a8f62ff7992a..f267284b423b0d70f21ca5e212b7eec9797bb75a 100644 (file)
@@ -87,7 +87,7 @@ static void vgacon_save_screen(struct vc_data *c);
 static int vgacon_scroll(struct vc_data *c, int t, int b, int dir,
                         int lines);
 static void vgacon_invert_region(struct vc_data *c, u16 * p, int count);
-static unsigned long vgacon_uni_pagedir;
+static struct uni_pagedir *vgacon_uni_pagedir;
 static int vgacon_refcount;
 
 /* Description of the hardware situation */
@@ -554,7 +554,7 @@ static const char *vgacon_startup(void)
 
 static void vgacon_init(struct vc_data *c, int init)
 {
-       unsigned long p;
+       struct uni_pagedir *p;
 
        /*
         * We cannot be loaded as a module, therefore init is always 1,
index 7f0c32908568a01472a73dc00fd4d66a61b898bd..e859c98d17672d7aad070aab159d7e9c12badd06 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/workqueue.h>
 
 struct vt_struct;
+struct uni_pagedir;
 
 #define NPAR 16
 
@@ -104,8 +105,8 @@ struct vc_data {
        unsigned int    vc_bell_pitch;          /* Console bell pitch */
        unsigned int    vc_bell_duration;       /* Console bell duration */
        struct vc_data **vc_display_fg;         /* [!] Ptr to var holding fg console for this display */
-       unsigned long   vc_uni_pagedir;
-       unsigned long   *vc_uni_pagedir_loc;  /* [!] Location of uni_pagedir variable for this console */
+       struct uni_pagedir *vc_uni_pagedir;
+       struct uni_pagedir **vc_uni_pagedir_loc; /* [!] Location of uni_pagedir variable for this console */
        bool vc_panic_force_write; /* when oops/panic this VC can accept forced output/blanking */
        /* additional information is in vt_kern.h */
 };