diff options
Diffstat (limited to 'arch/x86/kernel/vm86_32.c')
| -rw-r--r-- | arch/x86/kernel/vm86_32.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c index 4eeb5cf9720..d7ac84e7fc1 100644 --- a/arch/x86/kernel/vm86_32.c +++ b/arch/x86/kernel/vm86_32.c | |||
| @@ -158,7 +158,7 @@ struct pt_regs *save_v86_state(struct kernel_vm86_regs *regs) | |||
| 158 | ret = KVM86->regs32; | 158 | ret = KVM86->regs32; |
| 159 | 159 | ||
| 160 | ret->fs = current->thread.saved_fs; | 160 | ret->fs = current->thread.saved_fs; |
| 161 | loadsegment(gs, current->thread.saved_gs); | 161 | set_user_gs(ret, current->thread.saved_gs); |
| 162 | 162 | ||
| 163 | return ret; | 163 | return ret; |
| 164 | } | 164 | } |
| @@ -197,9 +197,9 @@ out: | |||
| 197 | static int do_vm86_irq_handling(int subfunction, int irqnumber); | 197 | static int do_vm86_irq_handling(int subfunction, int irqnumber); |
| 198 | static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk); | 198 | static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk); |
| 199 | 199 | ||
| 200 | asmlinkage int sys_vm86old(struct pt_regs regs) | 200 | int sys_vm86old(struct pt_regs *regs) |
| 201 | { | 201 | { |
| 202 | struct vm86_struct __user *v86 = (struct vm86_struct __user *)regs.bx; | 202 | struct vm86_struct __user *v86 = (struct vm86_struct __user *)regs->bx; |
| 203 | struct kernel_vm86_struct info; /* declare this _on top_, | 203 | struct kernel_vm86_struct info; /* declare this _on top_, |
| 204 | * this avoids wasting of stack space. | 204 | * this avoids wasting of stack space. |
| 205 | * This remains on the stack until we | 205 | * This remains on the stack until we |
| @@ -218,7 +218,7 @@ asmlinkage int sys_vm86old(struct pt_regs regs) | |||
| 218 | if (tmp) | 218 | if (tmp) |
| 219 | goto out; | 219 | goto out; |
| 220 | memset(&info.vm86plus, 0, (int)&info.regs32 - (int)&info.vm86plus); | 220 | memset(&info.vm86plus, 0, (int)&info.regs32 - (int)&info.vm86plus); |
| 221 | info.regs32 = ®s; | 221 | info.regs32 = regs; |
| 222 | tsk->thread.vm86_info = v86; | 222 | tsk->thread.vm86_info = v86; |
| 223 | do_sys_vm86(&info, tsk); | 223 | do_sys_vm86(&info, tsk); |
| 224 | ret = 0; /* we never return here */ | 224 | ret = 0; /* we never return here */ |
| @@ -227,7 +227,7 @@ out: | |||
| 227 | } | 227 | } |
| 228 | 228 | ||
| 229 | 229 | ||
| 230 | asmlinkage int sys_vm86(struct pt_regs regs) | 230 | int sys_vm86(struct pt_regs *regs) |
| 231 | { | 231 | { |
| 232 | struct kernel_vm86_struct info; /* declare this _on top_, | 232 | struct kernel_vm86_struct info; /* declare this _on top_, |
| 233 | * this avoids wasting of stack space. | 233 | * this avoids wasting of stack space. |
| @@ -239,12 +239,12 @@ asmlinkage int sys_vm86(struct pt_regs regs) | |||
| 239 | struct vm86plus_struct __user *v86; | 239 | struct vm86plus_struct __user *v86; |
| 240 | 240 | ||
| 241 | tsk = current; | 241 | tsk = current; |
| 242 | switch (regs.bx) { | 242 | switch (regs->bx) { |
| 243 | case VM86_REQUEST_IRQ: | 243 | case VM86_REQUEST_IRQ: |
| 244 | case VM86_FREE_IRQ: | 244 | case VM86_FREE_IRQ: |
| 245 | case VM86_GET_IRQ_BITS: | 245 | case VM86_GET_IRQ_BITS: |
| 246 | case VM86_GET_AND_RESET_IRQ: | 246 | case VM86_GET_AND_RESET_IRQ: |
| 247 | ret = do_vm86_irq_handling(regs.bx, (int)regs.cx); | 247 | ret = do_vm86_irq_handling(regs->bx, (int)regs->cx); |
| 248 | goto out; | 248 | goto out; |
| 249 | case VM86_PLUS_INSTALL_CHECK: | 249 | case VM86_PLUS_INSTALL_CHECK: |
| 250 | /* | 250 | /* |
| @@ -261,14 +261,14 @@ asmlinkage int sys_vm86(struct pt_regs regs) | |||
| 261 | ret = -EPERM; | 261 | ret = -EPERM; |
| 262 | if (tsk->thread.saved_sp0) | 262 | if (tsk->thread.saved_sp0) |
| 263 | goto out; | 263 | goto out; |
| 264 | v86 = (struct vm86plus_struct __user *)regs.cx; | 264 | v86 = (struct vm86plus_struct __user *)regs->cx; |
| 265 | tmp = copy_vm86_regs_from_user(&info.regs, &v86->regs, | 265 | tmp = copy_vm86_regs_from_user(&info.regs, &v86->regs, |
| 266 | offsetof(struct kernel_vm86_struct, regs32) - | 266 | offsetof(struct kernel_vm86_struct, regs32) - |
| 267 | sizeof(info.regs)); | 267 | sizeof(info.regs)); |
| 268 | ret = -EFAULT; | 268 | ret = -EFAULT; |
| 269 | if (tmp) | 269 | if (tmp) |
| 270 | goto out; | 270 | goto out; |
| 271 | info.regs32 = ®s; | 271 | info.regs32 = regs; |
| 272 | info.vm86plus.is_vm86pus = 1; | 272 | info.vm86plus.is_vm86pus = 1; |
| 273 | tsk->thread.vm86_info = (struct vm86_struct __user *)v86; | 273 | tsk->thread.vm86_info = (struct vm86_struct __user *)v86; |
| 274 | do_sys_vm86(&info, tsk); | 274 | do_sys_vm86(&info, tsk); |
| @@ -323,7 +323,7 @@ static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk | |||
| 323 | info->regs32->ax = 0; | 323 | info->regs32->ax = 0; |
| 324 | tsk->thread.saved_sp0 = tsk->thread.sp0; | 324 | tsk->thread.saved_sp0 = tsk->thread.sp0; |
| 325 | tsk->thread.saved_fs = info->regs32->fs; | 325 | tsk->thread.saved_fs = info->regs32->fs; |
| 326 | savesegment(gs, tsk->thread.saved_gs); | 326 | tsk->thread.saved_gs = get_user_gs(info->regs32); |
| 327 | 327 | ||
| 328 | tss = &per_cpu(init_tss, get_cpu()); | 328 | tss = &per_cpu(init_tss, get_cpu()); |
| 329 | tsk->thread.sp0 = (unsigned long) &info->VM86_TSS_ESP0; | 329 | tsk->thread.sp0 = (unsigned long) &info->VM86_TSS_ESP0; |
