diff options
| -rw-r--r-- | arch/m32r/include/asm/signal.h | 1 | ||||
| -rw-r--r-- | arch/m32r/include/asm/unistd.h | 1 | ||||
| -rw-r--r-- | arch/m32r/kernel/entry.S | 5 | ||||
| -rw-r--r-- | arch/m32r/kernel/ptrace.c | 7 | ||||
| -rw-r--r-- | arch/m32r/kernel/signal.c | 105 | ||||
| -rw-r--r-- | drivers/gpu/drm/drm_buffer.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_connector.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/atombios.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_kms.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo_util.c | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/ttm/ttm_page_alloc.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/vga/vgaarb.c | 2 | ||||
| -rw-r--r-- | drivers/staging/ti-st/st.h | 1 | ||||
| -rw-r--r-- | drivers/staging/ti-st/st_core.c | 9 | ||||
| -rw-r--r-- | drivers/staging/ti-st/st_core.h | 2 | ||||
| -rw-r--r-- | drivers/staging/ti-st/st_kim.c | 22 |
17 files changed, 91 insertions, 93 deletions
diff --git a/arch/m32r/include/asm/signal.h b/arch/m32r/include/asm/signal.h index 9c1acb2b1a92..b2eeb0de1c8d 100644 --- a/arch/m32r/include/asm/signal.h +++ b/arch/m32r/include/asm/signal.h | |||
| @@ -157,7 +157,6 @@ typedef struct sigaltstack { | |||
| 157 | #undef __HAVE_ARCH_SIG_BITOPS | 157 | #undef __HAVE_ARCH_SIG_BITOPS |
| 158 | 158 | ||
| 159 | struct pt_regs; | 159 | struct pt_regs; |
| 160 | extern int do_signal(struct pt_regs *regs, sigset_t *oldset); | ||
| 161 | 160 | ||
| 162 | #define ptrace_signal_deliver(regs, cookie) do { } while (0) | 161 | #define ptrace_signal_deliver(regs, cookie) do { } while (0) |
| 163 | 162 | ||
diff --git a/arch/m32r/include/asm/unistd.h b/arch/m32r/include/asm/unistd.h index 76125777483c..c70545689da8 100644 --- a/arch/m32r/include/asm/unistd.h +++ b/arch/m32r/include/asm/unistd.h | |||
| @@ -351,6 +351,7 @@ | |||
| 351 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT /*will be unused*/ | 351 | #define __ARCH_WANT_SYS_OLD_GETRLIMIT /*will be unused*/ |
| 352 | #define __ARCH_WANT_SYS_OLDUMOUNT | 352 | #define __ARCH_WANT_SYS_OLDUMOUNT |
| 353 | #define __ARCH_WANT_SYS_RT_SIGACTION | 353 | #define __ARCH_WANT_SYS_RT_SIGACTION |
| 354 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | ||
| 354 | 355 | ||
| 355 | #define __IGNORE_lchown | 356 | #define __IGNORE_lchown |
| 356 | #define __IGNORE_setuid | 357 | #define __IGNORE_setuid |
diff --git a/arch/m32r/kernel/entry.S b/arch/m32r/kernel/entry.S index 403869833b98..225412bc227e 100644 --- a/arch/m32r/kernel/entry.S +++ b/arch/m32r/kernel/entry.S | |||
| @@ -235,10 +235,9 @@ work_resched: | |||
| 235 | work_notifysig: ; deal with pending signals and | 235 | work_notifysig: ; deal with pending signals and |
| 236 | ; notify-resume requests | 236 | ; notify-resume requests |
| 237 | mv r0, sp ; arg1 : struct pt_regs *regs | 237 | mv r0, sp ; arg1 : struct pt_regs *regs |
| 238 | ldi r1, #0 ; arg2 : sigset_t *oldset | 238 | mv r1, r9 ; arg2 : __u32 thread_info_flags |
| 239 | mv r2, r9 ; arg3 : __u32 thread_info_flags | ||
| 240 | bl do_notify_resume | 239 | bl do_notify_resume |
| 241 | bra restore_all | 240 | bra resume_userspace |
| 242 | 241 | ||
| 243 | ; perform syscall exit tracing | 242 | ; perform syscall exit tracing |
| 244 | ALIGN | 243 | ALIGN |
diff --git a/arch/m32r/kernel/ptrace.c b/arch/m32r/kernel/ptrace.c index e555091eb97c..0021ade4cba8 100644 --- a/arch/m32r/kernel/ptrace.c +++ b/arch/m32r/kernel/ptrace.c | |||
| @@ -592,16 +592,17 @@ void user_enable_single_step(struct task_struct *child) | |||
| 592 | 592 | ||
| 593 | if (access_process_vm(child, pc&~3, &insn, sizeof(insn), 0) | 593 | if (access_process_vm(child, pc&~3, &insn, sizeof(insn), 0) |
| 594 | != sizeof(insn)) | 594 | != sizeof(insn)) |
| 595 | break; | 595 | return -EIO; |
| 596 | 596 | ||
| 597 | compute_next_pc(insn, pc, &next_pc, child); | 597 | compute_next_pc(insn, pc, &next_pc, child); |
| 598 | if (next_pc & 0x80000000) | 598 | if (next_pc & 0x80000000) |
| 599 | break; | 599 | return -EIO; |
| 600 | 600 | ||
| 601 | if (embed_debug_trap(child, next_pc)) | 601 | if (embed_debug_trap(child, next_pc)) |
| 602 | break; | 602 | return -EIO; |
| 603 | 603 | ||
| 604 | invalidate_cache(); | 604 | invalidate_cache(); |
| 605 | return 0; | ||
| 605 | } | 606 | } |
| 606 | 607 | ||
| 607 | void user_disable_single_step(struct task_struct *child) | 608 | void user_disable_single_step(struct task_struct *child) |
diff --git a/arch/m32r/kernel/signal.c b/arch/m32r/kernel/signal.c index 144b0f124fc7..7bbe38645ed5 100644 --- a/arch/m32r/kernel/signal.c +++ b/arch/m32r/kernel/signal.c | |||
| @@ -28,37 +28,6 @@ | |||
| 28 | 28 | ||
| 29 | #define DEBUG_SIG 0 | 29 | #define DEBUG_SIG 0 |
| 30 | 30 | ||
| 31 | #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) | ||
| 32 | |||
| 33 | int do_signal(struct pt_regs *, sigset_t *); | ||
| 34 | |||
| 35 | asmlinkage int | ||
| 36 | sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, | ||
| 37 | unsigned long r2, unsigned long r3, unsigned long r4, | ||
| 38 | unsigned long r5, unsigned long r6, struct pt_regs *regs) | ||
| 39 | { | ||
| 40 | sigset_t newset; | ||
| 41 | |||
| 42 | /* XXX: Don't preclude handling different sized sigset_t's. */ | ||
| 43 | if (sigsetsize != sizeof(sigset_t)) | ||
| 44 | return -EINVAL; | ||
| 45 | |||
| 46 | if (copy_from_user(&newset, unewset, sizeof(newset))) | ||
| 47 | return -EFAULT; | ||
| 48 | sigdelsetmask(&newset, sigmask(SIGKILL)|sigmask(SIGSTOP)); | ||
| 49 | |||
| 50 | spin_lock_irq(¤t->sighand->siglock); | ||
| 51 | current->saved_sigmask = current->blocked; | ||
| 52 | current->blocked = newset; | ||
| 53 | recalc_sigpending(); | ||
| 54 | spin_unlock_irq(¤t->sighand->siglock); | ||
| 55 | |||
| 56 | current->state = TASK_INTERRUPTIBLE; | ||
| 57 | schedule(); | ||
| 58 | set_thread_flag(TIF_RESTORE_SIGMASK); | ||
| 59 | return -ERESTARTNOHAND; | ||
| 60 | } | ||
| 61 | |||
| 62 | asmlinkage int | 31 | asmlinkage int |
| 63 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, | 32 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, |
| 64 | unsigned long r2, unsigned long r3, unsigned long r4, | 33 | unsigned long r2, unsigned long r3, unsigned long r4, |
| @@ -218,7 +187,7 @@ get_sigframe(struct k_sigaction *ka, unsigned long sp, size_t frame_size) | |||
| 218 | return (void __user *)((sp - frame_size) & -8ul); | 187 | return (void __user *)((sp - frame_size) & -8ul); |
| 219 | } | 188 | } |
| 220 | 189 | ||
| 221 | static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | 190 | static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, |
| 222 | sigset_t *set, struct pt_regs *regs) | 191 | sigset_t *set, struct pt_regs *regs) |
| 223 | { | 192 | { |
| 224 | struct rt_sigframe __user *frame; | 193 | struct rt_sigframe __user *frame; |
| @@ -275,22 +244,34 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
| 275 | current->comm, current->pid, frame, regs->pc); | 244 | current->comm, current->pid, frame, regs->pc); |
| 276 | #endif | 245 | #endif |
| 277 | 246 | ||
| 278 | return; | 247 | return 0; |
| 279 | 248 | ||
| 280 | give_sigsegv: | 249 | give_sigsegv: |
| 281 | force_sigsegv(sig, current); | 250 | force_sigsegv(sig, current); |
| 251 | return -EFAULT; | ||
| 252 | } | ||
| 253 | |||
| 254 | static int prev_insn(struct pt_regs *regs) | ||
| 255 | { | ||
| 256 | u16 inst; | ||
| 257 | if (get_user(&inst, (u16 __user *)(regs->bpc - 2))) | ||
| 258 | return -EFAULT; | ||
| 259 | if ((inst & 0xfff0) == 0x10f0) /* trap ? */ | ||
| 260 | regs->bpc -= 2; | ||
| 261 | else | ||
| 262 | regs->bpc -= 4; | ||
| 263 | regs->syscall_nr = -1; | ||
| 264 | return 0; | ||
| 282 | } | 265 | } |
| 283 | 266 | ||
| 284 | /* | 267 | /* |
| 285 | * OK, we're invoking a handler | 268 | * OK, we're invoking a handler |
| 286 | */ | 269 | */ |
| 287 | 270 | ||
| 288 | static void | 271 | static int |
| 289 | handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, | 272 | handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, |
| 290 | sigset_t *oldset, struct pt_regs *regs) | 273 | sigset_t *oldset, struct pt_regs *regs) |
| 291 | { | 274 | { |
| 292 | unsigned short inst; | ||
| 293 | |||
| 294 | /* Are we from a system call? */ | 275 | /* Are we from a system call? */ |
| 295 | if (regs->syscall_nr >= 0) { | 276 | if (regs->syscall_nr >= 0) { |
| 296 | /* If so, check system call restarting.. */ | 277 | /* If so, check system call restarting.. */ |
| @@ -308,16 +289,14 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, | |||
| 308 | /* fallthrough */ | 289 | /* fallthrough */ |
| 309 | case -ERESTARTNOINTR: | 290 | case -ERESTARTNOINTR: |
| 310 | regs->r0 = regs->orig_r0; | 291 | regs->r0 = regs->orig_r0; |
| 311 | inst = *(unsigned short *)(regs->bpc - 2); | 292 | if (prev_insn(regs) < 0) |
| 312 | if ((inst & 0xfff0) == 0x10f0) /* trap ? */ | 293 | return -EFAULT; |
| 313 | regs->bpc -= 2; | ||
| 314 | else | ||
| 315 | regs->bpc -= 4; | ||
| 316 | } | 294 | } |
| 317 | } | 295 | } |
| 318 | 296 | ||
| 319 | /* Set up the stack frame */ | 297 | /* Set up the stack frame */ |
| 320 | setup_rt_frame(sig, ka, info, oldset, regs); | 298 | if (setup_rt_frame(sig, ka, info, oldset, regs)) |
| 299 | return -EFAULT; | ||
| 321 | 300 | ||
| 322 | spin_lock_irq(¤t->sighand->siglock); | 301 | spin_lock_irq(¤t->sighand->siglock); |
| 323 | sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); | 302 | sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); |
| @@ -325,6 +304,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, | |||
| 325 | sigaddset(¤t->blocked,sig); | 304 | sigaddset(¤t->blocked,sig); |
| 326 | recalc_sigpending(); | 305 | recalc_sigpending(); |
| 327 | spin_unlock_irq(¤t->sighand->siglock); | 306 | spin_unlock_irq(¤t->sighand->siglock); |
| 307 | return 0; | ||
| 328 | } | 308 | } |
| 329 | 309 | ||
| 330 | /* | 310 | /* |
| @@ -332,12 +312,12 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info, | |||
| 332 | * want to handle. Thus you cannot kill init even with a SIGKILL even by | 312 | * want to handle. Thus you cannot kill init even with a SIGKILL even by |
| 333 | * mistake. | 313 | * mistake. |
| 334 | */ | 314 | */ |
| 335 | int do_signal(struct pt_regs *regs, sigset_t *oldset) | 315 | static void do_signal(struct pt_regs *regs) |
| 336 | { | 316 | { |
| 337 | siginfo_t info; | 317 | siginfo_t info; |
| 338 | int signr; | 318 | int signr; |
| 339 | struct k_sigaction ka; | 319 | struct k_sigaction ka; |
| 340 | unsigned short inst; | 320 | sigset_t *oldset; |
| 341 | 321 | ||
| 342 | /* | 322 | /* |
| 343 | * We want the common case to go fast, which | 323 | * We want the common case to go fast, which |
| @@ -346,12 +326,14 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset) | |||
| 346 | * if so. | 326 | * if so. |
| 347 | */ | 327 | */ |
| 348 | if (!user_mode(regs)) | 328 | if (!user_mode(regs)) |
| 349 | return 1; | 329 | return; |
| 350 | 330 | ||
| 351 | if (try_to_freeze()) | 331 | if (try_to_freeze()) |
| 352 | goto no_signal; | 332 | goto no_signal; |
| 353 | 333 | ||
| 354 | if (!oldset) | 334 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) |
| 335 | oldset = ¤t->saved_sigmask; | ||
| 336 | else | ||
| 355 | oldset = ¤t->blocked; | 337 | oldset = ¤t->blocked; |
| 356 | 338 | ||
| 357 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); | 339 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); |
| @@ -363,8 +345,10 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset) | |||
| 363 | */ | 345 | */ |
| 364 | 346 | ||
| 365 | /* Whee! Actually deliver the signal. */ | 347 | /* Whee! Actually deliver the signal. */ |
| 366 | handle_signal(signr, &ka, &info, oldset, regs); | 348 | if (handle_signal(signr, &ka, &info, oldset, regs) == 0) |
| 367 | return 1; | 349 | clear_thread_flag(TIF_RESTORE_SIGMASK); |
| 350 | |||
| 351 | return; | ||
| 368 | } | 352 | } |
| 369 | 353 | ||
| 370 | no_signal: | 354 | no_signal: |
| @@ -375,31 +359,24 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset) | |||
| 375 | regs->r0 == -ERESTARTSYS || | 359 | regs->r0 == -ERESTARTSYS || |
| 376 | regs->r0 == -ERESTARTNOINTR) { | 360 | regs->r0 == -ERESTARTNOINTR) { |
| 377 | regs->r0 = regs->orig_r0; | 361 | regs->r0 = regs->orig_r0; |
| 378 | inst = *(unsigned short *)(regs->bpc - 2); | 362 | prev_insn(regs); |
| 379 | if ((inst & 0xfff0) == 0x10f0) /* trap ? */ | 363 | } else if (regs->r0 == -ERESTART_RESTARTBLOCK){ |
| 380 | regs->bpc -= 2; | ||
| 381 | else | ||
| 382 | regs->bpc -= 4; | ||
| 383 | } | ||
| 384 | if (regs->r0 == -ERESTART_RESTARTBLOCK){ | ||
| 385 | regs->r0 = regs->orig_r0; | 364 | regs->r0 = regs->orig_r0; |
| 386 | regs->r7 = __NR_restart_syscall; | 365 | regs->r7 = __NR_restart_syscall; |
| 387 | inst = *(unsigned short *)(regs->bpc - 2); | 366 | prev_insn(regs); |
| 388 | if ((inst & 0xfff0) == 0x10f0) /* trap ? */ | ||
| 389 | regs->bpc -= 2; | ||
| 390 | else | ||
| 391 | regs->bpc -= 4; | ||
| 392 | } | 367 | } |
| 393 | } | 368 | } |
| 394 | return 0; | 369 | if (test_thread_flag(TIF_RESTORE_SIGMASK)) { |
| 370 | clear_thread_flag(TIF_RESTORE_SIGMASK); | ||
| 371 | sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); | ||
| 372 | } | ||
| 395 | } | 373 | } |
| 396 | 374 | ||
| 397 | /* | 375 | /* |
| 398 | * notification of userspace execution resumption | 376 | * notification of userspace execution resumption |
| 399 | * - triggered by current->work.notify_resume | 377 | * - triggered by current->work.notify_resume |
| 400 | */ | 378 | */ |
| 401 | void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, | 379 | void do_notify_resume(struct pt_regs *regs, __u32 thread_info_flags) |
| 402 | __u32 thread_info_flags) | ||
| 403 | { | 380 | { |
| 404 | /* Pending single-step? */ | 381 | /* Pending single-step? */ |
| 405 | if (thread_info_flags & _TIF_SINGLESTEP) | 382 | if (thread_info_flags & _TIF_SINGLESTEP) |
| @@ -407,7 +384,7 @@ void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, | |||
| 407 | 384 | ||
| 408 | /* deal with pending signal delivery */ | 385 | /* deal with pending signal delivery */ |
| 409 | if (thread_info_flags & _TIF_SIGPENDING) | 386 | if (thread_info_flags & _TIF_SIGPENDING) |
| 410 | do_signal(regs,oldset); | 387 | do_signal(regs); |
| 411 | 388 | ||
| 412 | if (thread_info_flags & _TIF_NOTIFY_RESUME) { | 389 | if (thread_info_flags & _TIF_NOTIFY_RESUME) { |
| 413 | clear_thread_flag(TIF_NOTIFY_RESUME); | 390 | clear_thread_flag(TIF_NOTIFY_RESUME); |
diff --git a/drivers/gpu/drm/drm_buffer.c b/drivers/gpu/drm/drm_buffer.c index 55d03ed05000..529a0dbe9fc6 100644 --- a/drivers/gpu/drm/drm_buffer.c +++ b/drivers/gpu/drm/drm_buffer.c | |||
| @@ -98,8 +98,8 @@ EXPORT_SYMBOL(drm_buffer_alloc); | |||
| 98 | * user_data: A pointer the data that is copied to the buffer. | 98 | * user_data: A pointer the data that is copied to the buffer. |
| 99 | * size: The Number of bytes to copy. | 99 | * size: The Number of bytes to copy. |
| 100 | */ | 100 | */ |
| 101 | extern int drm_buffer_copy_from_user(struct drm_buffer *buf, | 101 | int drm_buffer_copy_from_user(struct drm_buffer *buf, |
| 102 | void __user *user_data, int size) | 102 | void __user *user_data, int size) |
| 103 | { | 103 | { |
| 104 | int nr_pages = size / PAGE_SIZE + 1; | 104 | int nr_pages = size / PAGE_SIZE + 1; |
| 105 | int idx; | 105 | int idx; |
| @@ -163,7 +163,7 @@ void *drm_buffer_read_object(struct drm_buffer *buf, | |||
| 163 | { | 163 | { |
| 164 | int idx = drm_buffer_index(buf); | 164 | int idx = drm_buffer_index(buf); |
| 165 | int page = drm_buffer_page(buf); | 165 | int page = drm_buffer_page(buf); |
| 166 | void *obj = 0; | 166 | void *obj = NULL; |
| 167 | 167 | ||
| 168 | if (idx + objsize <= PAGE_SIZE) { | 168 | if (idx + objsize <= PAGE_SIZE) { |
| 169 | obj = &buf->data[page][idx]; | 169 | obj = &buf->data[page][idx]; |
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c index 87186a4bbf03..fc737037f751 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c | |||
| @@ -558,8 +558,10 @@ nouveau_connector_get_modes(struct drm_connector *connector) | |||
| 558 | if (nv_encoder->dcb->type == OUTPUT_LVDS && | 558 | if (nv_encoder->dcb->type == OUTPUT_LVDS && |
| 559 | (nv_encoder->dcb->lvdsconf.use_straps_for_mode || | 559 | (nv_encoder->dcb->lvdsconf.use_straps_for_mode || |
| 560 | dev_priv->vbios.fp_no_ddc) && nouveau_bios_fp_mode(dev, NULL)) { | 560 | dev_priv->vbios.fp_no_ddc) && nouveau_bios_fp_mode(dev, NULL)) { |
| 561 | nv_connector->native_mode = drm_mode_create(dev); | 561 | struct drm_display_mode mode; |
| 562 | nouveau_bios_fp_mode(dev, nv_connector->native_mode); | 562 | |
| 563 | nouveau_bios_fp_mode(dev, &mode); | ||
| 564 | nv_connector->native_mode = drm_mode_duplicate(dev, &mode); | ||
| 563 | } | 565 | } |
| 564 | 566 | ||
| 565 | /* Find the native mode if this is a digital panel, if we didn't | 567 | /* Find the native mode if this is a digital panel, if we didn't |
diff --git a/drivers/gpu/drm/radeon/atombios.h b/drivers/gpu/drm/radeon/atombios.h index 1bc72c3190a9..fe359a239df3 100644 --- a/drivers/gpu/drm/radeon/atombios.h +++ b/drivers/gpu/drm/radeon/atombios.h | |||
| @@ -4999,7 +4999,7 @@ typedef struct _SW_I2C_IO_DATA_PARAMETERS | |||
| 4999 | #define SW_I2C_CNTL_WRITE1BIT 6 | 4999 | #define SW_I2C_CNTL_WRITE1BIT 6 |
| 5000 | 5000 | ||
| 5001 | //==============================VESA definition Portion=============================== | 5001 | //==============================VESA definition Portion=============================== |
| 5002 | #define VESA_OEM_PRODUCT_REV '01.00' | 5002 | #define VESA_OEM_PRODUCT_REV "01.00" |
| 5003 | #define VESA_MODE_ATTRIBUTE_MODE_SUPPORT 0xBB //refer to VBE spec p.32, no TTY support | 5003 | #define VESA_MODE_ATTRIBUTE_MODE_SUPPORT 0xBB //refer to VBE spec p.32, no TTY support |
| 5004 | #define VESA_MODE_WIN_ATTRIBUTE 7 | 5004 | #define VESA_MODE_WIN_ATTRIBUTE 7 |
| 5005 | #define VESA_WIN_SIZE 64 | 5005 | #define VESA_WIN_SIZE 64 |
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index afc18d87fdca..ddc3adea1dda 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
| @@ -2729,7 +2729,7 @@ int r600_ib_test(struct radeon_device *rdev) | |||
| 2729 | if (i < rdev->usec_timeout) { | 2729 | if (i < rdev->usec_timeout) { |
| 2730 | DRM_INFO("ib test succeeded in %u usecs\n", i); | 2730 | DRM_INFO("ib test succeeded in %u usecs\n", i); |
| 2731 | } else { | 2731 | } else { |
| 2732 | DRM_ERROR("radeon: ib test failed (sracth(0x%04X)=0x%08X)\n", | 2732 | DRM_ERROR("radeon: ib test failed (scratch(0x%04X)=0x%08X)\n", |
| 2733 | scratch, tmp); | 2733 | scratch, tmp); |
| 2734 | r = -EINVAL; | 2734 | r = -EINVAL; |
| 2735 | } | 2735 | } |
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index 5eee3c41d124..8fbbe1c6ebbd 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c | |||
| @@ -203,6 +203,10 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) | |||
| 203 | */ | 203 | */ |
| 204 | int radeon_driver_firstopen_kms(struct drm_device *dev) | 204 | int radeon_driver_firstopen_kms(struct drm_device *dev) |
| 205 | { | 205 | { |
| 206 | struct radeon_device *rdev = dev->dev_private; | ||
| 207 | |||
| 208 | if (rdev->powered_down) | ||
| 209 | return -EINVAL; | ||
| 206 | return 0; | 210 | return 0; |
| 207 | } | 211 | } |
| 208 | 212 | ||
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c index 7cffb3e04232..3451a82adba7 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_util.c +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c | |||
| @@ -351,6 +351,7 @@ static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo, | |||
| 351 | INIT_LIST_HEAD(&fbo->lru); | 351 | INIT_LIST_HEAD(&fbo->lru); |
| 352 | INIT_LIST_HEAD(&fbo->swap); | 352 | INIT_LIST_HEAD(&fbo->swap); |
| 353 | fbo->vm_node = NULL; | 353 | fbo->vm_node = NULL; |
| 354 | atomic_set(&fbo->cpu_writers, 0); | ||
| 354 | 355 | ||
| 355 | fbo->sync_obj = driver->sync_obj_ref(bo->sync_obj); | 356 | fbo->sync_obj = driver->sync_obj_ref(bo->sync_obj); |
| 356 | kref_init(&fbo->list_kref); | 357 | kref_init(&fbo->list_kref); |
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c index ca904799f018..b1e02fffd3cc 100644 --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c | |||
| @@ -69,7 +69,7 @@ struct ttm_page_pool { | |||
| 69 | spinlock_t lock; | 69 | spinlock_t lock; |
| 70 | bool fill_lock; | 70 | bool fill_lock; |
| 71 | struct list_head list; | 71 | struct list_head list; |
| 72 | int gfp_flags; | 72 | gfp_t gfp_flags; |
| 73 | unsigned npages; | 73 | unsigned npages; |
| 74 | char *name; | 74 | char *name; |
| 75 | unsigned long nfrees; | 75 | unsigned long nfrees; |
| @@ -475,7 +475,7 @@ static void ttm_handle_caching_state_failure(struct list_head *pages, | |||
| 475 | * This function is reentrant if caller updates count depending on number of | 475 | * This function is reentrant if caller updates count depending on number of |
| 476 | * pages returned in pages array. | 476 | * pages returned in pages array. |
| 477 | */ | 477 | */ |
| 478 | static int ttm_alloc_new_pages(struct list_head *pages, int gfp_flags, | 478 | static int ttm_alloc_new_pages(struct list_head *pages, gfp_t gfp_flags, |
| 479 | int ttm_flags, enum ttm_caching_state cstate, unsigned count) | 479 | int ttm_flags, enum ttm_caching_state cstate, unsigned count) |
| 480 | { | 480 | { |
| 481 | struct page **caching_array; | 481 | struct page **caching_array; |
| @@ -666,7 +666,7 @@ int ttm_get_pages(struct list_head *pages, int flags, | |||
| 666 | { | 666 | { |
| 667 | struct ttm_page_pool *pool = ttm_get_pool(flags, cstate); | 667 | struct ttm_page_pool *pool = ttm_get_pool(flags, cstate); |
| 668 | struct page *p = NULL; | 668 | struct page *p = NULL; |
| 669 | int gfp_flags = GFP_USER; | 669 | gfp_t gfp_flags = GFP_USER; |
| 670 | int r; | 670 | int r; |
| 671 | 671 | ||
| 672 | /* set zero flag for page allocation if required */ | 672 | /* set zero flag for page allocation if required */ |
| @@ -818,7 +818,7 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages) | |||
| 818 | return 0; | 818 | return 0; |
| 819 | } | 819 | } |
| 820 | 820 | ||
| 821 | void ttm_page_alloc_fini() | 821 | void ttm_page_alloc_fini(void) |
| 822 | { | 822 | { |
| 823 | int i; | 823 | int i; |
| 824 | 824 | ||
diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c index b87569e96b16..f366f968155a 100644 --- a/drivers/gpu/vga/vgaarb.c +++ b/drivers/gpu/vga/vgaarb.c | |||
| @@ -598,7 +598,7 @@ static inline void vga_update_device_decodes(struct vga_device *vgadev, | |||
| 598 | pr_debug("vgaarb: decoding count now is: %d\n", vga_decode_count); | 598 | pr_debug("vgaarb: decoding count now is: %d\n", vga_decode_count); |
| 599 | } | 599 | } |
| 600 | 600 | ||
| 601 | void __vga_set_legacy_decoding(struct pci_dev *pdev, unsigned int decodes, bool userspace) | 601 | static void __vga_set_legacy_decoding(struct pci_dev *pdev, unsigned int decodes, bool userspace) |
| 602 | { | 602 | { |
| 603 | struct vga_device *vgadev; | 603 | struct vga_device *vgadev; |
| 604 | unsigned long flags; | 604 | unsigned long flags; |
diff --git a/drivers/staging/ti-st/st.h b/drivers/staging/ti-st/st.h index 9952579425b9..1b3060eb2921 100644 --- a/drivers/staging/ti-st/st.h +++ b/drivers/staging/ti-st/st.h | |||
| @@ -80,5 +80,4 @@ struct st_proto_s { | |||
| 80 | extern long st_register(struct st_proto_s *); | 80 | extern long st_register(struct st_proto_s *); |
| 81 | extern long st_unregister(enum proto_type); | 81 | extern long st_unregister(enum proto_type); |
| 82 | 82 | ||
| 83 | extern struct platform_device *st_get_plat_device(void); | ||
| 84 | #endif /* ST_H */ | 83 | #endif /* ST_H */ |
diff --git a/drivers/staging/ti-st/st_core.c b/drivers/staging/ti-st/st_core.c index 063c9b1db1ab..b85d8bfdf600 100644 --- a/drivers/staging/ti-st/st_core.c +++ b/drivers/staging/ti-st/st_core.c | |||
| @@ -38,7 +38,6 @@ | |||
| 38 | #include "st_ll.h" | 38 | #include "st_ll.h" |
| 39 | #include "st.h" | 39 | #include "st.h" |
| 40 | 40 | ||
| 41 | #define VERBOSE | ||
| 42 | /* strings to be used for rfkill entries and by | 41 | /* strings to be used for rfkill entries and by |
| 43 | * ST Core to be used for sysfs debug entry | 42 | * ST Core to be used for sysfs debug entry |
| 44 | */ | 43 | */ |
| @@ -581,7 +580,7 @@ long st_register(struct st_proto_s *new_proto) | |||
| 581 | long err = 0; | 580 | long err = 0; |
| 582 | unsigned long flags = 0; | 581 | unsigned long flags = 0; |
| 583 | 582 | ||
| 584 | st_kim_ref(&st_gdata); | 583 | st_kim_ref(&st_gdata, 0); |
| 585 | pr_info("%s(%d) ", __func__, new_proto->type); | 584 | pr_info("%s(%d) ", __func__, new_proto->type); |
| 586 | if (st_gdata == NULL || new_proto == NULL || new_proto->recv == NULL | 585 | if (st_gdata == NULL || new_proto == NULL || new_proto->recv == NULL |
| 587 | || new_proto->reg_complete_cb == NULL) { | 586 | || new_proto->reg_complete_cb == NULL) { |
| @@ -713,7 +712,7 @@ long st_unregister(enum proto_type type) | |||
| 713 | 712 | ||
| 714 | pr_debug("%s: %d ", __func__, type); | 713 | pr_debug("%s: %d ", __func__, type); |
| 715 | 714 | ||
| 716 | st_kim_ref(&st_gdata); | 715 | st_kim_ref(&st_gdata, 0); |
| 717 | if (type < ST_BT || type >= ST_MAX) { | 716 | if (type < ST_BT || type >= ST_MAX) { |
| 718 | pr_err(" protocol %d not supported", type); | 717 | pr_err(" protocol %d not supported", type); |
| 719 | return -EPROTONOSUPPORT; | 718 | return -EPROTONOSUPPORT; |
| @@ -767,7 +766,7 @@ long st_write(struct sk_buff *skb) | |||
| 767 | #endif | 766 | #endif |
| 768 | long len; | 767 | long len; |
| 769 | 768 | ||
| 770 | st_kim_ref(&st_gdata); | 769 | st_kim_ref(&st_gdata, 0); |
| 771 | if (unlikely(skb == NULL || st_gdata == NULL | 770 | if (unlikely(skb == NULL || st_gdata == NULL |
| 772 | || st_gdata->tty == NULL)) { | 771 | || st_gdata->tty == NULL)) { |
| 773 | pr_err("data/tty unavailable to perform write"); | 772 | pr_err("data/tty unavailable to perform write"); |
| @@ -818,7 +817,7 @@ static int st_tty_open(struct tty_struct *tty) | |||
| 818 | struct st_data_s *st_gdata; | 817 | struct st_data_s *st_gdata; |
| 819 | pr_info("%s ", __func__); | 818 | pr_info("%s ", __func__); |
| 820 | 819 | ||
| 821 | st_kim_ref(&st_gdata); | 820 | st_kim_ref(&st_gdata, 0); |
| 822 | st_gdata->tty = tty; | 821 | st_gdata->tty = tty; |
| 823 | tty->disc_data = st_gdata; | 822 | tty->disc_data = st_gdata; |
| 824 | 823 | ||
diff --git a/drivers/staging/ti-st/st_core.h b/drivers/staging/ti-st/st_core.h index e0c32d149f5f..8601320a679e 100644 --- a/drivers/staging/ti-st/st_core.h +++ b/drivers/staging/ti-st/st_core.h | |||
| @@ -117,7 +117,7 @@ int st_core_init(struct st_data_s **); | |||
| 117 | void st_core_exit(struct st_data_s *); | 117 | void st_core_exit(struct st_data_s *); |
| 118 | 118 | ||
| 119 | /* ask for reference from KIM */ | 119 | /* ask for reference from KIM */ |
| 120 | void st_kim_ref(struct st_data_s **); | 120 | void st_kim_ref(struct st_data_s **, int); |
| 121 | 121 | ||
| 122 | #define GPS_STUB_TEST | 122 | #define GPS_STUB_TEST |
| 123 | #ifdef GPS_STUB_TEST | 123 | #ifdef GPS_STUB_TEST |
diff --git a/drivers/staging/ti-st/st_kim.c b/drivers/staging/ti-st/st_kim.c index b4a6c7fdc4e6..9e99463f76e8 100644 --- a/drivers/staging/ti-st/st_kim.c +++ b/drivers/staging/ti-st/st_kim.c | |||
| @@ -72,11 +72,26 @@ const unsigned char *protocol_names[] = { | |||
| 72 | PROTO_ENTRY(ST_GPS, "GPS"), | 72 | PROTO_ENTRY(ST_GPS, "GPS"), |
| 73 | }; | 73 | }; |
| 74 | 74 | ||
| 75 | #define MAX_ST_DEVICES 3 /* Imagine 1 on each UART for now */ | ||
| 76 | struct platform_device *st_kim_devices[MAX_ST_DEVICES]; | ||
| 75 | 77 | ||
| 76 | /**********************************************************************/ | 78 | /**********************************************************************/ |
| 77 | /* internal functions */ | 79 | /* internal functions */ |
| 78 | 80 | ||
| 79 | /** | 81 | /** |
| 82 | * st_get_plat_device - | ||
| 83 | * function which returns the reference to the platform device | ||
| 84 | * requested by id. As of now only 1 such device exists (id=0) | ||
| 85 | * the context requesting for reference can get the id to be | ||
| 86 | * requested by a. The protocol driver which is registering or | ||
| 87 | * b. the tty device which is opened. | ||
| 88 | */ | ||
| 89 | static struct platform_device *st_get_plat_device(int id) | ||
| 90 | { | ||
| 91 | return st_kim_devices[id]; | ||
| 92 | } | ||
| 93 | |||
| 94 | /** | ||
| 80 | * validate_firmware_response - | 95 | * validate_firmware_response - |
| 81 | * function to return whether the firmware response was proper | 96 | * function to return whether the firmware response was proper |
| 82 | * in case of error don't complete so that waiting for proper | 97 | * in case of error don't complete so that waiting for proper |
| @@ -353,7 +368,7 @@ void st_kim_chip_toggle(enum proto_type type, enum kim_gpio_state state) | |||
| 353 | struct kim_data_s *kim_gdata; | 368 | struct kim_data_s *kim_gdata; |
| 354 | pr_info(" %s ", __func__); | 369 | pr_info(" %s ", __func__); |
| 355 | 370 | ||
| 356 | kim_pdev = st_get_plat_device(); | 371 | kim_pdev = st_get_plat_device(0); |
| 357 | kim_gdata = dev_get_drvdata(&kim_pdev->dev); | 372 | kim_gdata = dev_get_drvdata(&kim_pdev->dev); |
| 358 | 373 | ||
| 359 | if (kim_gdata->gpios[type] == -1) { | 374 | if (kim_gdata->gpios[type] == -1) { |
| @@ -574,12 +589,12 @@ static int kim_toggle_radio(void *data, bool blocked) | |||
| 574 | * This would enable multiple such platform devices to exist | 589 | * This would enable multiple such platform devices to exist |
| 575 | * on a given platform | 590 | * on a given platform |
| 576 | */ | 591 | */ |
| 577 | void st_kim_ref(struct st_data_s **core_data) | 592 | void st_kim_ref(struct st_data_s **core_data, int id) |
| 578 | { | 593 | { |
| 579 | struct platform_device *pdev; | 594 | struct platform_device *pdev; |
| 580 | struct kim_data_s *kim_gdata; | 595 | struct kim_data_s *kim_gdata; |
| 581 | /* get kim_gdata reference from platform device */ | 596 | /* get kim_gdata reference from platform device */ |
| 582 | pdev = st_get_plat_device(); | 597 | pdev = st_get_plat_device(id); |
| 583 | kim_gdata = dev_get_drvdata(&pdev->dev); | 598 | kim_gdata = dev_get_drvdata(&pdev->dev); |
| 584 | *core_data = kim_gdata->core_data; | 599 | *core_data = kim_gdata->core_data; |
| 585 | } | 600 | } |
| @@ -623,6 +638,7 @@ static int kim_probe(struct platform_device *pdev) | |||
| 623 | long *gpios = pdev->dev.platform_data; | 638 | long *gpios = pdev->dev.platform_data; |
| 624 | struct kim_data_s *kim_gdata; | 639 | struct kim_data_s *kim_gdata; |
| 625 | 640 | ||
| 641 | st_kim_devices[pdev->id] = pdev; | ||
| 626 | kim_gdata = kzalloc(sizeof(struct kim_data_s), GFP_ATOMIC); | 642 | kim_gdata = kzalloc(sizeof(struct kim_data_s), GFP_ATOMIC); |
| 627 | if (!kim_gdata) { | 643 | if (!kim_gdata) { |
| 628 | pr_err("no mem to allocate"); | 644 | pr_err("no mem to allocate"); |
