/* * drivers/video/clgenfb.h - Cirrus Logic chipset constants * * Copyright 1999 Jeff Garzik * * Original clgenfb author: Frank Neumann * * Based on retz3fb.c and clgen.c: * Copyright (C) 1997 Jes Sorensen * Copyright (C) 1996 Frank Neumann * *************************************************************** * * Format this code with GNU indent '-kr -i8 -pcs' options. * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive * for more details. * */ #ifndef __CLGENFB_H__ #define __CLGENFB_H__ /* OLD COMMENT: definitions for Piccolo/SD64 VGA controller chip */ /* OLD COMMENT: these definitions might most of the time also work */ /* OLD COMMENT: for other CL-GD542x/543x based boards.. */ /*** External/General Registers ***/ #define CL_POS102 0x102 /* POS102 register */ #define CL_VSSM 0x46e8 /* Adapter Sleep */ #define CL_VSSM2 0x3c3 /* Motherboard Sleep */ /*** VGA Sequencer Registers ***/ /* the following are from the "extension registers" group */ #define CL_SEQR6 0x6 /* Unlock ALL Extensions */ #define CL_SEQR7 0x7 /* Extended Sequencer Mode */ #define CL_SEQR8 0x8 /* EEPROM Control */ #define CL_SEQR9 0x9 /* Scratch Pad 0 (do not access!) */ #define CL_SEQRA 0xa /* Scratch Pad 1 (do not access!) */ #define CL_SEQRB 0xb /* VCLK0 Numerator */ #define CL_SEQRC 0xc /* VCLK1 Numerator */ #define CL_SEQRD 0xd /* VCLK2 Numerator */ #define CL_SEQRE 0xe /* VCLK3 Numerator */ #define CL_SEQRF 0xf /* DRAM Control */ #define CL_SEQR10 0x10 /* Graphics Cursor X Position */ #define CL_SEQR11 0x11 /* Graphics Cursor Y Position */ #define CL_SEQR12 0x12 /* Graphics Cursor Attributes */ #define CL_SEQR13 0x13 /* Graphics Cursor Pattern Address Offset */ #define CL_SEQR14 0x14 /* Scratch Pad 2 (CL-GD5426/'28 Only) (do not access!) */ #define CL_SEQR15 0x15 /* Scratch Pad 3 (CL-GD5426/'28 Only) (do not access!) */ #define CL_SEQR16 0x16 /* Performance Tuning (CL-GD5424/'26/'28 Only) */ #define CL_SEQR17 0x17 /* Configuration ReadBack and Extended Control (CL-GF5428 Only) */ #define CL_SEQR18 0x18 /* Signature Generator Control (Not CL-GD5420) */ #define CL_SEQR19 0x19 /* Signature Generator Result Low Byte (Not CL-GD5420) */ #define CL_SEQR1A 0x1a /* Signature Generator Result High Byte (Not CL-GD5420) */ #define CL_SEQR1B 0x1b /* VCLK0 Denominator and Post-Scalar Value */ #define CL_SEQR1C 0x1c /* VCLK1 Denominator and Post-Scalar Value */ #define CL_SEQR1D 0x1d /* VCLK2 Denominator and Post-Scalar Value */ #define CL_SEQR1E 0x1e /* VCLK3 Denominator and Post-Scalar Value */ #define CL_SEQR1F 0x1f /* BIOS ROM write enable and MCLK Select */ /*** CRT Controller Registers ***/ #define CL_CRT22 0x22 /* Graphics Data Latches ReadBack */ #define CL_CRT24 0x24 /* Attribute Controller Toggle ReadBack */ #define CL_CRT26 0x26 /* Attribute Controller Index ReadBack */ /* the following are from the "extension registers" group */ #define CL_CRT19 0x19 /* Interlace End */ #define CL_CRT1A 0x1a /* Interlace Control */ #define CL_CRT1B 0x1b /* Extended Display Controls */ #define CL_CRT1C 0x1c /* Sync adjust and genlock register */ #define CL_CRT1D 0x1d /* Overlay Extended Control register */ #define CL_CRT1E 0x1e /* Another overflow register */ #define CL_CRT25 0x25 /* Part Status Register */ #define CL_CRT27 0x27 /* ID Register */ #define CL_CRT51 0x51 /* P4 disable "flicker fixer" */ /*** Graphics Controller Registers ***/ /* the following are from the "extension registers" group */ #define CL_GR9 0x9 /* Offset Register 0 */ #define CL_GRA 0xa /* Offset Register 1 */ #define CL_GRB 0xb /* Graphics Controller Mode Extensions */ #define CL_GRC 0xc /* Color Key (CL-GD5424/'26/'28 Only) */ #define CL_GRD 0xd /* Color Key Mask (CL-GD5424/'26/'28 Only) */ #define CL_GRE 0xe /* Miscellaneous Control (Cl-GD5428 Only) */ #define CL_GRF 0xf /* Display Compression Control register */ #define CL_GR10 0x10 /* 16-bit Pixel BG Color High Byte (Not CL-GD5420) */ #define CL_GR11 0x11 /* 16-bit Pixel FG Color High Byte (Not CL-GD5420) */ #define CL_GR12 0x12 /* Background Color Byte 2 Register */ #define CL_GR13 0x13 /* Foreground Color Byte 2 Register */ #define CL_GR14 0x14 /* Background Color Byte 3 Register */ #define CL_GR15 0x15 /* Foreground Color Byte 3 Register */ /* the following are CL-GD5426/'28 specific blitter registers */ #define CL_GR20 0x20 /* BLT Width Low */ #define CL_GR21 0x21 /* BLT Width High */ #define CL_GR22 0x22 /* BLT Height Low */ #define CL_GR23 0x23 /* BLT Height High */ #define CL_GR24 0x24 /* BLT Destination Pitch Low */ #define CL_GR25 0x25 /* BLT Destination Pitch High */ #define CL_GR26 0x26 /* BLT Source Pitch Low */ #define CL_GR27 0x27 /* BLT Source Pitch High */ #define CL_GR28 0x28 /* BLT Destination Start Low */ #define CL_GR29 0x29 /* BLT Destination Start Mid */ #define CL_GR2A 0x2a /* BLT Destination Start High */ #define CL_GR2C 0x2c /* BLT Source Start Low */ #define CL_GR2D 0x2d /* BLT Source Start Mid */ #define CL_GR2E 0x2e /* BLT Source Start High */ #define CL_GR2F 0x2f /* Picasso IV Blitter compat mode..? */ #define CL_GR30 0x30 /* BLT Mode */ #define CL_GR31 0x31 /* BLT Start/Status */ #define CL_GR32 0x32 /* BLT Raster Operation */ #define CL_GR33 0x33 /* another P4 "compat" register.. */ #define CL_GR34 0x34 /* Transparent Color Select Low */ #define CL_GR35 0x35 /* Transparent Color Select High */ #define CL_GR38 0x38 /* Source Transparent Color Mask Low */ #define CL_GR39 0x39 /* Source Transparent Color Mask High */ /*** Attribute Controller Registers ***/ #define CL_AR33 0x33 /* The "real" Pixel Panning register (?) */ #define CL_AR34 0x34 /* TEST */ #endif /* __CLGENFB_H__ */ 2c5d9555d6d937966d79d4c6529a5f7b9206e405 (diff)
drm/i915: Check for NULL i915_vma in intel_unpin_fb_obj()
I've seen this trigger twice now, where the i915_gem_object_to_ggtt() call in intel_unpin_fb_obj() returns NULL, resulting in an oops immediately afterwards as the (inlined) call to i915_vma_unpin_fence() tries to dereference it. It seems to be some race condition where the object is going away at shutdown time, since both times happened when shutting down the X server. The call chains were different: - VT ioctl(KDSETMODE, KD_TEXT): intel_cleanup_plane_fb+0x5b/0xa0 [i915] drm_atomic_helper_cleanup_planes+0x6f/0x90 [drm_kms_helper] intel_atomic_commit_tail+0x749/0xfe0 [i915] intel_atomic_commit+0x3cb/0x4f0 [i915] drm_atomic_commit+0x4b/0x50 [drm] restore_fbdev_mode+0x14c/0x2a0 [drm_kms_helper] drm_fb_helper_restore_fbdev_mode_unlocked+0x34/0x80 [drm_kms_helper] drm_fb_helper_set_par+0x2d/0x60 [drm_kms_helper] intel_fbdev_set_par+0x18/0x70 [i915] fb_set_var+0x236/0x460 fbcon_blank+0x30f/0x350 do_unblank_screen+0xd2/0x1a0 vt_ioctl+0x507/0x12a0 tty_ioctl+0x355/0xc30 do_vfs_ioctl+0xa3/0x5e0 SyS_ioctl+0x79/0x90 entry_SYSCALL_64_fastpath+0x13/0x94 - i915 unpin_work workqueue: intel_unpin_work_fn+0x58/0x140 [i915] process_one_work+0x1f1/0x480 worker_thread+0x48/0x4d0 kthread+0x101/0x140 and this patch purely papers over the issue by adding a NULL pointer check and a WARN_ON_ONCE() to avoid the oops that would then generally make the machine unresponsive. Other callers of i915_gem_object_to_ggtt() seem to also check for the returned pointer being NULL and warn about it, so this clearly has happened before in other places. [ Reported it originally to the i915 developers on Jan 8, applying the ugly workaround on my own now after triggering the problem for the second time with no feedback. This is likely to be the same bug reported as https://bugs.freedesktop.org/show_bug.cgi?id=98829 https://bugs.freedesktop.org/show_bug.cgi?id=99134 which has a patch for the underlying problem, but it hasn't gotten to me, so I'm applying the workaround. ] Cc: Daniel Vetter <daniel.vetter@intel.com> Cc: Jani Nikula <jani.nikula@linux.intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Imre Deak <imre.deak@intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/usb/storage/unusual_usbat.h')