Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux-2.6-microblaze.git] / arch / x86 / kernel / process.c
index bd2a11c..61e93a3 100644 (file)
@@ -377,37 +377,37 @@ static void tss_copy_io_bitmap(struct tss_struct *tss, struct io_bitmap *iobm)
 void tss_update_io_bitmap(void)
 {
        struct tss_struct *tss = this_cpu_ptr(&cpu_tss_rw);
+       struct thread_struct *t = &current->thread;
        u16 *base = &tss->x86_tss.io_bitmap_base;
 
-       if (test_thread_flag(TIF_IO_BITMAP)) {
-               struct thread_struct *t = &current->thread;
-
-               if (IS_ENABLED(CONFIG_X86_IOPL_IOPERM) && t->iopl_emul == 3) {
-                       *base = IO_BITMAP_OFFSET_VALID_ALL;
-               } else {
-                       struct io_bitmap *iobm = t->io_bitmap;
-                       /*
-                        * Only copy bitmap data when the sequence number
-                        * differs. The update time is accounted to the
-                        * incoming task.
-                        */
-                       if (tss->io_bitmap.prev_sequence != iobm->sequence)
-                               tss_copy_io_bitmap(tss, iobm);
-
-                       /* Enable the bitmap */
-                       *base = IO_BITMAP_OFFSET_VALID_MAP;
-               }
+       if (!test_thread_flag(TIF_IO_BITMAP)) {
+               tss_invalidate_io_bitmap(tss);
+               return;
+       }
+
+       if (IS_ENABLED(CONFIG_X86_IOPL_IOPERM) && t->iopl_emul == 3) {
+               *base = IO_BITMAP_OFFSET_VALID_ALL;
+       } else {
+               struct io_bitmap *iobm = t->io_bitmap;
+
                /*
-                * Make sure that the TSS limit is covering the io bitmap.
-                * It might have been cut down by a VMEXIT to 0x67 which
-                * would cause a subsequent I/O access from user space to
-                * trigger a #GP because tbe bitmap is outside the TSS
-                * limit.
+                * Only copy bitmap data when the sequence number differs. The
+                * update time is accounted to the incoming task.
                 */
-               refresh_tss_limit();
-       } else {
-               tss_invalidate_io_bitmap(tss);
+               if (tss->io_bitmap.prev_sequence != iobm->sequence)
+                       tss_copy_io_bitmap(tss, iobm);
+
+               /* Enable the bitmap */
+               *base = IO_BITMAP_OFFSET_VALID_MAP;
        }
+
+       /*
+        * Make sure that the TSS limit is covering the IO bitmap. It might have
+        * been cut down by a VMEXIT to 0x67 which would cause a subsequent I/O
+        * access from user space to trigger a #GP because tbe bitmap is outside
+        * the TSS limit.
+        */
+       refresh_tss_limit();
 }
 #else /* CONFIG_X86_IOPL_IOPERM */
 static inline void switch_to_bitmap(unsigned long tifp) { }