CC: [email protected] CC: [email protected] CC: [email protected] TO: Kees Cook <[email protected]> CC: Miguel Ojeda <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/overflow head: 18ce9ecf54d4ad2826d3afe3b128a00d4a9a5201 commit: b45c0896242fc93c9051fe5c2381491f4d427b7e [13/25] compiler_types.h: Remove __compiletime_object_size() :::::: branch date: 11 hours ago :::::: commit date: 11 hours ago config: riscv-randconfig-c006-20210822 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project a83d99c55ebb14532c414066a5aa3bdb65389965) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git/commit/?id=b45c0896242fc93c9051fe5c2381491f4d427b7e git remote add kees https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git git fetch --no-tags kees for-next/overflow git checkout b45c0896242fc93c9051fe5c2381491f4d427b7e # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) if (ksize > in_size) ^~~~~ drivers/dma-buf/dma-heap.c:164:2: note: Taking false branch if (ksize > in_size) ^ drivers/dma-buf/dma-heap.c:167:2: note: Control jumps to 'case 3222816768:' at line 168 switch (kcmd) { ^ drivers/dma-buf/dma-heap.c:169:9: note: Calling 'dma_heap_ioctl_allocate' ret = dma_heap_ioctl_allocate(file, kdata); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/dma-buf/dma-heap.c:101:6: note: Branch condition evaluates to a garbage value if (heap_allocation->fd) ^~~~~~~~~~~~~~~~~~~ Suppressed 12 warnings (5 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 13 warnings generated. Suppressed 13 warnings (6 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 13 warnings generated. Suppressed 13 warnings (6 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 16 warnings generated. drivers/regulator/qcom_spmi-regulator.c:390:8: warning: Excessive padding in 'struct spmi_regulator_mapping' (8 padding bytes, where 0 is optimal). Optimal fields order: ops, set_points, type, subtype, logical_type, revision_min, revision_max, hpm_min_load, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct spmi_regulator_mapping { ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ drivers/regulator/qcom_spmi-regulator.c:390:8: note: Excessive padding in 'struct spmi_regulator_mapping' (8 padding bytes, where 0 is optimal). Optimal fields order: ops, set_points, type, subtype, logical_type, revision_min, revision_max, hpm_min_load, consider reordering the fields or adding explicit padding members struct spmi_regulator_mapping { ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ drivers/regulator/qcom_spmi-regulator.c:401:8: warning: Excessive padding in 'struct spmi_regulator_data' (12 padding bytes, where 4 is optimal). Optimal fields order: name, supply, ocp, base, force_type, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct spmi_regulator_data { ~~~~~~~^~~~~~~~~~~~~~~~~~~~~ drivers/regulator/qcom_spmi-regulator.c:401:8: note: Excessive padding in 'struct spmi_regulator_data' (12 padding bytes, where 4 is optimal). Optimal fields order: name, supply, ocp, base, force_type, consider reordering the fields or adding explicit padding members struct spmi_regulator_data { ~~~~~~~^~~~~~~~~~~~~~~~~~~~~ drivers/regulator/qcom_spmi-regulator.c:1159:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/regulator/qcom_spmi-regulator.c:1159:2: note: Value stored to 'ret' is never read ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 13 warnings (6 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 13 warnings generated. Suppressed 13 warnings (6 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 13 warnings generated. Suppressed 13 warnings (6 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 13 warnings generated. Suppressed 13 warnings (6 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 13 warnings generated. Suppressed 13 warnings (6 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 13 warnings generated. Suppressed 13 warnings (6 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. Suppressed 11 warnings (4 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. Suppressed 11 warnings (4 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. >> drivers/video/fbdev/tmiofb.c:396:23: warning: The left operand of '>>' is a >> garbage value [clang-analyzer-core.UndefinedBinaryOperatorResult] tmio_iowrite16(*cmd >> 16, par->lcr + LCR_CMDH); ^ drivers/video/fbdev/tmiofb.c:507:2: note: Control jumps to 'case 2086900480:' at line 523 switch (cmd) { ^ drivers/video/fbdev/tmiofb.c:528:7: note: '?' condition is true if (get_user(len, argp)) ^ include/asm-generic/uaccess.h:229:2: note: expanded from macro 'get_user' access_ok(__p, sizeof(*ptr)) ? \ ^ include/asm-generic/uaccess.h:124:31: note: expanded from macro 'access_ok' #define access_ok(addr, size) __access_ok((unsigned long)(addr),(size)) ^ drivers/video/fbdev/tmiofb.c:528:7: note: Control jumps to 'case 4:' at line 528 if (get_user(len, argp)) ^ include/asm-generic/uaccess.h:230:3: note: expanded from macro 'get_user' __get_user((x), (__typeof__(*(ptr)) __user *)__p) :\ ^ include/asm-generic/uaccess.h:189:2: note: expanded from macro '__get_user' switch (sizeof(*(ptr))) { \ ^ drivers/video/fbdev/tmiofb.c:528:7: note: Execution continues on line 528 if (get_user(len, argp)) ^ include/asm-generic/uaccess.h:230:3: note: expanded from macro 'get_user' __get_user((x), (__typeof__(*(ptr)) __user *)__p) :\ ^ include/asm-generic/uaccess.h:209:3: note: expanded from macro '__get_user' break; \ ^ drivers/video/fbdev/tmiofb.c:528:3: note: Taking false branch if (get_user(len, argp)) ^ drivers/video/fbdev/tmiofb.c:530:7: note: Assuming the condition is false if (len > ARRAY_SIZE(acc)) ^~~~~~~~~~~~~~~~~~~~~ drivers/video/fbdev/tmiofb.c:530:3: note: Taking false branch if (len > ARRAY_SIZE(acc)) ^ drivers/video/fbdev/tmiofb.c:532:7: note: Calling 'copy_from_user' if (copy_from_user(acc, argp + 1, sizeof(u32) * len)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/uaccess.h:191:13: note: Calling 'check_copy_size' if (likely(check_copy_size(to, n, false))) ^ include/linux/compiler.h:77:40: note: expanded from macro 'likely' # define likely(x) __builtin_expect(!!(x), 1) ^ include/linux/thread_info.h:207:15: note: Assuming 'sz' is >= 0 if (unlikely(sz >= 0 && sz < bytes)) { ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/thread_info.h:207:15: note: Left side of '&&' is true if (unlikely(sz >= 0 && sz < bytes)) { ^ include/linux/thread_info.h:207:26: note: Assuming 'sz' is < 'bytes' if (unlikely(sz >= 0 && sz < bytes)) { ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/thread_info.h:207:2: note: Taking true branch if (unlikely(sz >= 0 && sz < bytes)) { ^ include/linux/thread_info.h:208:3: note: Taking true branch if (!__builtin_constant_p(bytes)) ^ include/linux/uaccess.h:191:13: note: Returning from 'check_copy_size' if (likely(check_copy_size(to, n, false))) ^ include/linux/compiler.h:77:40: note: expanded from macro 'likely' # define likely(x) __builtin_expect(!!(x), 1) ^ include/linux/uaccess.h:191:2: note: Taking false branch if (likely(check_copy_size(to, n, false))) ^ include/linux/uaccess.h:193:2: note: Returning value (loaded from 'n'), which participates in a condition later return n; ^~~~~~~~ drivers/video/fbdev/tmiofb.c:532:7: note: Returning from 'copy_from_user' if (copy_from_user(acc, argp + 1, sizeof(u32) * len)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/video/fbdev/tmiofb.c:532:7: note: Assuming the condition is false if (copy_from_user(acc, argp + 1, sizeof(u32) * len)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/video/fbdev/tmiofb.c:532:3: note: Taking false branch if (copy_from_user(acc, argp + 1, sizeof(u32) * len)) ^ drivers/video/fbdev/tmiofb.c:535:10: note: Calling 'tmiofb_acc_write' return tmiofb_acc_write(fbi, acc, len); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/video/fbdev/tmiofb.c:392:6: note: Assuming 'ret' is 0 if (ret) ^~~ drivers/video/fbdev/tmiofb.c:392:2: note: Taking false branch if (ret) -- ^~~~~~~~~~~~~~~~~ include/asm-generic/bitops/__ffs.h:35:2: note: Taking true branch if ((word & 0x3) == 0) { ^ include/asm-generic/bitops/__ffs.h:39:6: note: Assuming the condition is true if ((word & 0x1) == 0) ^~~~~~~~~~~~~~~~~ include/asm-generic/bitops/__ffs.h:39:2: note: Taking true branch if ((word & 0x1) == 0) ^ include/asm-generic/bitops/__ffs.h:40:3: note: The value 63 is assigned to 'num' num += 1; ^~~~~~~~ include/asm-generic/bitops/__ffs.h:41:2: note: Returning the value 63 (loaded from 'num') return num; ^~~~~~~~~~ drivers/soc/mediatek/mtk-devapc.c:130:20: note: Returning from '__ffs' min_shift_group = __ffs(val); ^~~~~~~~~~ drivers/soc/mediatek/mtk-devapc.c:130:2: note: The value 63 is assigned to 'min_shift_group' min_shift_group = __ffs(val); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/soc/mediatek/mtk-devapc.c:133:13: note: The result of the left shift is undefined due to shifting by '63', which is greater or equal to the width of type 'int' writel(0x1 << min_shift_group, pd_vio_shift_sel_reg); ^ arch/riscv/include/asm/mmio.h:144:48: note: expanded from macro 'writel' #define writel(v, c) ({ __io_bw(); writel_cpu((v), (c)); __io_aw(); }) ^ arch/riscv/include/asm/mmio.h:93:71: note: expanded from macro 'writel_cpu' #define writel_cpu(v, c) ((void)__raw_writel((__force u32)cpu_to_le32(v), (c))) ^ include/uapi/linux/byteorder/little_endian.h:33:51: note: expanded from macro '__cpu_to_le32' #define __cpu_to_le32(x) ((__force __le32)(__u32)(x)) ^ Suppressed 11 warnings (4 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 18 warnings generated. net/atm/common.c:238:2: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] skb_queue_walk_safe(&queue, skb, tmp) { ^ include/linux/skbuff.h:3537:33: note: expanded from macro 'skb_queue_walk_safe' for (skb = (queue)->next, tmp = skb->next; \ ^ ~~~~~~~~~ net/atm/common.c:231:2: note: Calling '__skb_queue_head_init' __skb_queue_head_init(&queue); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/atm/common.c:231:2: note: Returning from '__skb_queue_head_init' __skb_queue_head_init(&queue); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/atm/common.c:234:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(&rq->lock, flags); ^ include/linux/spinlock.h:384:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:250:2: note: expanded from macro 'raw_spin_lock_irqsave' do { \ ^ net/atm/common.c:234:2: note: Loop condition is false. Exiting loop spin_lock_irqsave(&rq->lock, flags); ^ include/linux/spinlock.h:382:43: note: expanded from macro 'spin_lock_irqsave' #define spin_lock_irqsave(lock, flags) \ ^ net/atm/common.c:235:2: note: Calling 'skb_queue_splice_init' skb_queue_splice_init(rq, &queue); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/skbuff.h:1979:6: note: Assuming the condition is false if (!skb_queue_empty(list)) { ^~~~~~~~~~~~~~~~~~~~~~ include/linux/skbuff.h:1979:2: note: Taking false branch if (!skb_queue_empty(list)) { ^ net/atm/common.c:235:2: note: Returning from 'skb_queue_splice_init' skb_queue_splice_init(rq, &queue); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/atm/common.c:238:2: note: Assigned value is garbage or undefined skb_queue_walk_safe(&queue, skb, tmp) { ^ include/linux/skbuff.h:3537:33: note: expanded from macro 'skb_queue_walk_safe' for (skb = (queue)->next, tmp = skb->next; \ ^ ~~~~~~~~~ Suppressed 17 warnings (10 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 17 warnings generated. Suppressed 17 warnings (10 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 17 warnings generated. Suppressed 17 warnings (10 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 20 warnings generated. Suppressed 20 warnings (10 in non-user code, 10 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 17 warnings generated. Suppressed 17 warnings (10 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 13 warnings generated. Suppressed 13 warnings (6 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 18 warnings generated. >> net/atm/lec.c:693:23: warning: The left operand of '<' is a garbage value >> [clang-analyzer-core.UndefinedBinaryOperatorResult] if (ioc_data.dev_num < 0 || ioc_data.dev_num >= MAX_LEC_ITF) ^ net/atm/lec.c:996:2: note: Control jumps to 'case 25041:' at line 999 switch (cmd) { ^ net/atm/lec.c:1000:3: note: Taking false branch if (!capable(CAP_NET_ADMIN)) ^ net/atm/lec.c:1002:3: note: Execution continues on line 1007 break; ^ net/atm/lec.c:1007:2: note: Control jumps to 'case 25041:' at line 1016 switch (cmd) { ^ net/atm/lec.c:1017:9: note: Calling 'lec_vcc_attach' err = lec_vcc_attach(vcc, (void __user *)arg); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/atm/lec.c:690:15: note: Calling 'copy_from_user' bytes_left = copy_from_user(&ioc_data, arg, sizeof(struct atmlec_ioc)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/uaccess.h:191:2: note: Taking false branch if (likely(check_copy_size(to, n, false))) ^ include/linux/uaccess.h:193:2: note: Returning without writing to 'to->dev_num' return n; ^ net/atm/lec.c:690:15: note: Returning from 'copy_from_user' bytes_left = copy_from_user(&ioc_data, arg, sizeof(struct atmlec_ioc)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/atm/lec.c:691:6: note: 'bytes_left' is not equal to 0 if (bytes_left != 0) ^~~~~~~~~~ net/atm/lec.c:691:2: note: Taking true branch if (bytes_left != 0) ^ net/atm/lec.c:693:23: note: The left operand of '<' is a garbage value if (ioc_data.dev_num < 0 || ioc_data.dev_num >= MAX_LEC_ITF) ~~~~~~~~~~~~~~~~ ^ Suppressed 17 warnings (10 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 19 warnings generated. net/decnet/af_decnet.c:1765:4: warning: Value stored to 'rv' is never read [clang-analyzer-deadcode.DeadStores] rv = -EFAULT; ^ ~~~~~~~ net/decnet/af_decnet.c:1765:4: note: Value stored to 'rv' is never read rv = -EFAULT; ^ ~~~~~~~ net/decnet/af_decnet.c:1962:2: warning: Value stored to 'mss' is never read [clang-analyzer-deadcode.DeadStores] mss = scp->segsize_rem; ^ ~~~~~~~~~~~~~~~~ net/decnet/af_decnet.c:1962:2: note: Value stored to 'mss' is never read mss = scp->segsize_rem; ^ ~~~~~~~~~~~~~~~~ Suppressed 17 warnings (10 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 18 warnings generated. net/decnet/dn_nsp_in.c:763:3: warning: Value stored to 'ptr' is never read [clang-analyzer-deadcode.DeadStores] ptr += 2; ^ ~ net/decnet/dn_nsp_in.c:763:3: note: Value stored to 'ptr' is never read ptr += 2; ^ ~ Suppressed 17 warnings (10 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 17 warnings generated. Suppressed 17 warnings (10 in non-user code, 7 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 21 warnings generated. net/decnet/dn_route.c:827:20: warning: Value stored to 'cb' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct dn_skb_cb *cb = DN_SKB_CB(skb); ^~ net/decnet/dn_route.c:827:20: note: Value stored to 'cb' during its initialization is never read struct dn_skb_cb *cb = DN_SKB_CB(skb); ^~ net/decnet/dn_route.c:839:20: warning: Value stored to 'cb' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct dn_skb_cb *cb = DN_SKB_CB(skb); ^~ net/decnet/dn_route.c:839:20: note: Value stored to 'cb' during its initialization is never read struct dn_skb_cb *cb = DN_SKB_CB(skb); ^~ net/decnet/dn_route.c:890:39: warning: Access to field 'mtu' results in a dereference of a null pointer (loaded from field 'dev') [clang-analyzer-core.NullDereference] if (dst_metric(&rt->dst, RTAX_MTU) > rt->dst.dev->mtu) ^ net/decnet/dn_route.c:1652:2: note: Taking false branch if (!net_eq(net, &init_net)) ^ net/decnet/dn_route.c:1657:6: note: Assuming 'err' is >= 0 if (err < 0) ^~~~~~~ net/decnet/dn_route.c:1657:2: note: Taking false branch if (err < 0) ^ net/decnet/dn_route.c:1664:6: note: Assuming 'skb' is not equal to NULL if (skb == NULL) ^~~~~~~~~~~ net/decnet/dn_route.c:1664:2: note: Taking false branch if (skb == NULL) ^ net/decnet/dn_route.c:1669:6: note: Assuming the condition is true if (tb[RTA_SRC]) vim +396 drivers/video/fbdev/tmiofb.c b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 381 b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 382 /* b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 383 * Writes an accelerator command to the accelerator's FIFO. b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 384 */ b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 385 static int b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 386 tmiofb_acc_write(struct fb_info *info, const u32 *cmd, unsigned int count) b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 387 { b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 388 struct tmiofb_par *par = info->par; b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 389 int ret; b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 390 b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 391 ret = tmiofb_acc_wait(info, TMIOFB_FIFO_SIZE - count); b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 392 if (ret) b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 393 return ret; b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 394 b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 395 for (; count; count--, cmd++) { b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 @396 tmio_iowrite16(*cmd >> 16, par->lcr + LCR_CMDH); b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 397 tmio_iowrite16(*cmd, par->lcr + LCR_CMDL); b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 398 } b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 399 b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 400 return ret; b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 401 } b53cde3557b8f9 drivers/video/tmiofb.c Dmitry Baryshkov 2008-10-15 402 :::::: The code at line 396 was first introduced by commit :::::: b53cde3557b8f97e6a635782875d442551a89bf1 fbdev: add new TMIO framebuffer driver :::::: TO: Dmitry Baryshkov <[email protected]> :::::: CC: Linus Torvalds <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
