/* * Copyright (c) 2012-2013 Hisilicon Limited. * Copyright (c) 2012-2013 Linaro Limited. * * Author: Haojian Zhuang * Xin Li * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * */ #ifndef __DTS_HI3620_CLOCK_H #define __DTS_HI3620_CLOCK_H #define HI3620_NONE_CLOCK 0 /* fixed rate & fixed factor clocks */ #define HI3620_OSC32K 1 #define HI3620_OSC26M 2 #define HI3620_PCLK 3 #define HI3620_PLL_ARM0 4 #define HI3620_PLL_ARM1 5 #define HI3620_PLL_PERI 6 #define HI3620_PLL_USB 7 #define HI3620_PLL_HDMI 8 #define HI3620_PLL_GPU 9 #define HI3620_RCLK_TCXO 10 #define HI3620_RCLK_CFGAXI 11 #define HI3620_RCLK_PICO 12 /* mux clocks */ #define HI3620_TIMER0_MUX 32 #define HI3620_TIMER1_MUX 33 #define HI3620_TIMER2_MUX 34 #define HI3620_TIMER3_MUX 35 #define HI3620_TIMER4_MUX 36 #define HI3620_TIMER5_MUX 37 #define HI3620_TIMER6_MUX 38 #define HI3620_TIMER7_MUX 39 #define HI3620_TIMER8_MUX 40 #define HI3620_TIMER9_MUX 41 #define HI3620_UART0_MUX 42 #define HI3620_UART1_MUX 43 #define HI3620_UART2_MUX 44 #define HI3620_UART3_MUX 45 #define HI3620_UART4_MUX 46 #define HI3620_SPI0_MUX 47 #define HI3620_SPI1_MUX 48 #define HI3620_SPI2_MUX 49 #define HI3620_SAXI_MUX 50 #define HI3620_PWM0_MUX 51 #define HI3620_PWM1_MUX 52 #define HI3620_SD_MUX 53 #define HI3620_MMC1_MUX 54 #define HI3620_MMC1_MUX2 55 #define HI3620_G2D_MUX 56 #define HI3620_VENC_MUX 57 #define HI3620_VDEC_MUX 58 #define HI3620_VPP_MUX 59 #define HI3620_EDC0_MUX 60 #define HI3620_LDI0_MUX 61 #define HI3620_EDC1_MUX 62 #define HI3620_LDI1_MUX 63 #define HI3620_RCLK_HSIC 64 #define HI3620_MMC2_MUX 65 #define HI3620_MMC3_MUX 66 /* divider clocks */ #define HI3620_SHAREAXI_DIV 128 #define HI3620_CFGAXI_DIV 129 #define HI3620_SD_DIV 130 #define HI3620_MMC1_DIV 131 #define HI3620_HSIC_DIV 132 #define HI3620_MMC2_DIV 133 #define HI3620_MMC3_DIV 134 /* gate clocks */ #define HI3620_TIMERCLK01 160 #define HI3620_TIMER_RCLK01 161 #define HI3620_TIMERCLK23 162 #define HI3620_TIMER_RCLK23 163 #define HI3620_TIMERCLK45 164 #define HI3620_TIMERCLK67 165 #define HI3620_TIMERCLK89 166 #define HI3620_RTCCLK 167 #define HI3620_KPC_CLK 168 #define HI3620_GPIOCLK0 169 #define HI3620_GPIOCLK1 170 #define HI3620_GPIOCLK2 171 #define HI3620_GPIOCLK3 172 #define HI3620_GPIOCLK4 173 #define HI3620_GPIOCLK5 174 #define HI3620_GPIOCLK6 175 #define HI3620_GPIOCLK7 176 #define HI3620_GPIOCLK8 177 #define HI3620_GPIOCLK9 178 #define HI3620_GPIOCLK10 179 #define HI3620_GPIOCLK11 180 #define HI3620_GPIOCLK12 181 #define HI3620_GPIOCLK13 182 #define HI3620_GPIOCLK14 183 #define HI3620_GPIOCLK15 184 #define HI3620_GPIOCLK16 185 #define HI3620_GPIOCLK17 186 #define HI3620_GPIOCLK18 187 #define HI3620_GPIOCLK19 188 #define HI3620_GPIOCLK20 189 #define HI3620_GPIOCLK21 190 #define HI3620_DPHY0_CLK 191 #define HI3620_DPHY1_CLK 192 #define HI3620_DPHY2_CLK 193 #define HI3620_USBPHY_CLK 194 #define HI3620_ACP_CLK 195 #define HI3620_PWMCLK0 196 #define HI3620_PWMCLK1 197 #define HI3620_UARTCLK0 198 #define HI3620_UARTCLK1 199 #define HI3620_UARTCLK2 200 #define HI3620_UARTCLK3 201 #define HI3620_UARTCLK4 202 #define HI3620_SPICLK0 203 #define HI3620_SPICLK1 204 #define HI3620_SPICLK2 205 #define HI3620_I2CCLK0 206 #define HI3620_I2CCLK1 207 #define HI3620_I2CCLK2 208 #define HI3620_I2CCLK3 209 #define HI3620_SCI_CLK 210 #define HI3620_DDRC_PER_CLK 211 #define HI3620_DMAC_CLK 212 #define HI3620_USB2DVC_CLK 213 #define HI3620_SD_CLK 214 #define HI3620_MMC_CLK1 215 #define HI3620_MMC_CLK2 216 #define HI3620_MMC_CLK3 217 #define HI3620_MCU_CLK 218 #define HI3620_SD_CIUCLK 0 #define HI3620_MMC_CIUCLK1 1 #define HI3620_MMC_CIUCLK2 2 #define HI3620_MMC_CIUCLK3 3 #define HI3620_NR_CLKS 219 #endif /* __DTS_HI3620_CLOCK_H */ /option>mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-01-29 13:50:06 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2017-01-29 13:50:06 -0800
commit39cb2c9a316e77f6dfba96c543e55b6672d5a37e (patch)
tree98fe974ee4e20121253de7f61fc8d01bdb3821c1 /tools/vm/slabinfo-gnuplot.sh
parent2c5d9555d6d937966d79d4c6529a5f7b9206e405 (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 'tools/vm/slabinfo-gnuplot.sh')