[alibaba-cloud:linux-next 11098/11535] kernel/cgroup/cpuset.c:963:1: warning: the frame size of 3088 bytes is larger than 2048 bytes
by kernel test robot
tree: https://github.com/alibaba/cloud-kernel.git linux-next
head: 4da723592714ee2993664252216d9d5b5a3df3eb
commit: 61e5885959be9af0b6942ec2a3ea0e7ccc48bf05 [11098/11535] alinux: sched: Introduce per-cgroup idle accounting
config: x86_64-rhel (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0
reproduce (this is a W=1 build):
git checkout 61e5885959be9af0b6942ec2a3ea0e7ccc48bf05
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>, old ones prefixed by <<):
kernel/cgroup/cpuset.c: In function 'cpuset_cancel_attach':
kernel/cgroup/cpuset.c:1515:17: warning: variable 'cs' set but not used [-Wunused-but-set-variable]
1515 | struct cpuset *cs;
| ^~
kernel/cgroup/cpuset.c: In function 'update_cpumasks_hier':
>> kernel/cgroup/cpuset.c:963:1: warning: the frame size of 3088 bytes is larger than 2048 bytes [-Wframe-larger-than=]
963 | }
| ^
kernel/cgroup/cpuset.c:2313: warning: Function parameter or member 'work' not described in 'cpuset_hotplug_workfn'
kernel/cgroup/cpuset.c:2643: warning: Function parameter or member 'rotor' not described in 'cpuset_spread_node'
vim +963 kernel/cgroup/cpuset.c
0b2f630a28d53b kernel/cpuset.c Miao Xie 2008-07-25 883
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 884 /*
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 885 * update_cpumasks_hier - Update effective cpumasks and tasks in the subtree
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 886 * @cs: the cpuset to consider
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 887 * @new_cpus: temp variable for calculating new effective_cpus
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 888 *
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 889 * When congifured cpumask is changed, the effective cpumasks of this cpuset
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 890 * and all its descendants need to be updated.
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 891 *
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 892 * On legacy hierachy, effective_cpus will be the same with cpu_allowed.
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 893 *
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 894 * Called with cpuset_mutex held
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 895 */
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 896 static void update_cpumasks_hier(struct cpuset *cs, struct cpumask *new_cpus)
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 897 {
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 898 struct cpuset *cp;
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 899 struct cpumask added, deleted, old_cpus;
492eb21b98f88e kernel/cpuset.c Tejun Heo 2013-08-08 900 struct cgroup_subsys_state *pos_css;
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 901 bool need_rebuild_sched_domains = false;
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 902
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 903 rcu_read_lock();
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 904 cpuset_for_each_descendant_pre(cp, pos_css, cs) {
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 905 struct cpuset *parent = parent_cs(cp);
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 906
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 907 cpumask_and(new_cpus, cp->cpus_allowed, parent->effective_cpus);
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 908
554b0d1c845e42 kernel/cpuset.c Li Zefan 2014-07-09 909 /*
554b0d1c845e42 kernel/cpuset.c Li Zefan 2014-07-09 910 * If it becomes empty, inherit the effective mask of the
554b0d1c845e42 kernel/cpuset.c Li Zefan 2014-07-09 911 * parent, which is guaranteed to have some CPUs.
554b0d1c845e42 kernel/cpuset.c Li Zefan 2014-07-09 912 */
b8d1b8ee93df8f kernel/cgroup/cpuset.c Waiman Long 2017-08-17 913 if (is_in_v2_mode() && cpumask_empty(new_cpus))
554b0d1c845e42 kernel/cpuset.c Li Zefan 2014-07-09 914 cpumask_copy(new_cpus, parent->effective_cpus);
554b0d1c845e42 kernel/cpuset.c Li Zefan 2014-07-09 915
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 916 if (cpumask_empty(cp->effective_cpus))
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 917 cpumask_copy(&old_cpus, parent->effective_cpus);
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 918 else
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 919 cpumask_copy(&old_cpus, cp->effective_cpus);
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 920
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 921 /* Skip the whole subtree if the cpumask remains the same. */
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 922 if (cpumask_equal(new_cpus, cp->effective_cpus)) {
492eb21b98f88e kernel/cpuset.c Tejun Heo 2013-08-08 923 pos_css = css_rightmost_descendant(pos_css);
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 924 continue;
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 925 }
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 926
ec903c0c858e49 kernel/cpuset.c Tejun Heo 2014-05-13 927 if (!css_tryget_online(&cp->css))
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 928 continue;
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 929 rcu_read_unlock();
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 930
8447a0fee97443 kernel/cpuset.c Vladimir Davydov 2014-10-20 931 spin_lock_irq(&callback_lock);
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 932 cpumask_copy(cp->effective_cpus, new_cpus);
8447a0fee97443 kernel/cpuset.c Vladimir Davydov 2014-10-20 933 spin_unlock_irq(&callback_lock);
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 934
b8d1b8ee93df8f kernel/cgroup/cpuset.c Waiman Long 2017-08-17 935 WARN_ON(!is_in_v2_mode() &&
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 936 !cpumask_equal(cp->cpus_allowed, cp->effective_cpus));
734d45130cb4f6 kernel/cpuset.c Li Zefan 2014-07-09 937
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 938 /* add = new - old = new & (~old) */
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 939 cpumask_andnot(&added, new_cpus, &old_cpus);
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 940 cpuacct_cpuset_changed(cs->css.cgroup, NULL, &added);
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 941
d66393e54e0a9d kernel/cpuset.c Tejun Heo 2014-02-13 942 update_tasks_cpumask(cp);
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 943
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 944 /* deleted = old - new = old & (~new) */
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 945 cpumask_andnot(&deleted, &old_cpus, new_cpus);
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 946 cpuacct_cpuset_changed(cs->css.cgroup, &deleted, NULL);
61e5885959be9a kernel/cgroup/cpuset.c Yihao Wu 2020-03-10 947
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 948 /*
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 949 * If the effective cpumask of any non-empty cpuset is changed,
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 950 * we need to rebuild sched domains.
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 951 */
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 952 if (!cpumask_empty(cp->cpus_allowed) &&
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 953 is_sched_load_balance(cp))
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 954 need_rebuild_sched_domains = true;
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 955
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 956 rcu_read_lock();
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 957 css_put(&cp->css);
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 958 }
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 959 rcu_read_unlock();
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 960
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 961 if (need_rebuild_sched_domains)
8b5f1c52dcd1ac kernel/cpuset.c Li Zefan 2014-07-09 962 rebuild_sched_domains_locked();
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 @963 }
5c5cc62321d9df kernel/cpuset.c Li Zefan 2013-06-09 964
:::::: The code at line 963 was first introduced by commit
:::::: 5c5cc62321d9df7a9a608346fc649c4528380c8f cpuset: allow to keep tasks in empty cpusets
:::::: TO: Li Zefan <lizefan(a)huawei.com>
:::::: CC: Tejun Heo <tj(a)kernel.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
2 years, 3 months
[sound:topic/dma-fix2 150/150] sound/core/pcm_memory.c:44:45: error: lvalue required as left operand of assignment
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git topic/dma-fix2
head: de846f4c8c865ca0fe3952ee80ad165f4c64ea34
commit: de846f4c8c865ca0fe3952ee80ad165f4c64ea34 [150/150] ALSA: pcm: Use SG-buffer only when direct DMA is available
config: nios2-allyesconfig (attached as .config)
compiler: nios2-linux-gcc (GCC) 9.3.0
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
git checkout de846f4c8c865ca0fe3952ee80ad165f4c64ea34
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=nios2
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>, old ones prefixed by <<):
sound/core/pcm_memory.c: In function 'do_alloc_pages':
>> sound/core/pcm_memory.c:44:45: error: lvalue required as left operand of assignment
44 | (type == SNDRV_DMA_TYPE_DEV_SG || type = SNDRV_DMA_TYPE_DEV_UC_SG) &&
| ^
>> sound/core/pcm_memory.c:45:6: error: implicit declaration of function 'dma_is_direct'; did you mean 'io_is_direct'? [-Werror=implicit-function-declaration]
45 | dma_is_direct(get_dma_ops(dev))) {
| ^~~~~~~~~~~~~
| io_is_direct
>> sound/core/pcm_memory.c:45:20: error: implicit declaration of function 'get_dma_ops' [-Werror=implicit-function-declaration]
45 | dma_is_direct(get_dma_ops(dev))) {
| ^~~~~~~~~~~
In file included from include/linux/printk.h:326,
from include/linux/kernel.h:15,
from include/asm-generic/bug.h:19,
from ./arch/nios2/include/generated/asm/bug.h:1,
from include/linux/bug.h:5,
from include/linux/io.h:11,
from sound/core/pcm_memory.c:7:
>> sound/core/pcm_memory.c:47:11: error: 'device' undeclared (first use in this function)
47 | dev_dbg(device, "Use continuous page allocatorn");
| ^~~~~~
include/linux/dynamic_debug.h:125:15: note: in definition of macro '__dynamic_func_call'
125 | func(&id, ##__VA_ARGS__); | ^~~~~~~~~~~
include/linux/dynamic_debug.h:157:2: note: in expansion of macro '_dynamic_func_call'
157 | _dynamic_func_call(fmt,__dynamic_dev_dbg, | ^~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:114:2: note: in expansion of macro 'dynamic_dev_dbg'
114 | dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~
>> sound/core/pcm_memory.c:47:3: note: in expansion of macro 'dev_dbg'
47 | dev_dbg(device, "Use continuous page allocatorn");
| ^~~~~~~
sound/core/pcm_memory.c:47:11: note: each undeclared identifier is reported only once for each function it appears in
47 | dev_dbg(device, "Use continuous page allocatorn");
| ^~~~~~
include/linux/dynamic_debug.h:125:15: note: in definition of macro '__dynamic_func_call'
125 | func(&id, ##__VA_ARGS__); | ^~~~~~~~~~~
include/linux/dynamic_debug.h:157:2: note: in expansion of macro '_dynamic_func_call'
157 | _dynamic_func_call(fmt,__dynamic_dev_dbg, | ^~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:114:2: note: in expansion of macro 'dynamic_dev_dbg'
114 | dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~
>> sound/core/pcm_memory.c:47:3: note: in expansion of macro 'dev_dbg'
47 | dev_dbg(device, "Use continuous page allocatorn");
| ^~~~~~~
cc1: some warnings being treated as errors
vim +44 sound/core/pcm_memory.c
33
34 static int do_alloc_pages(struct snd_card *card, int type, struct device *dev,
35 size_t size, struct snd_dma_buffer *dmab)
36 {
37 int err;
38
39 if (max_alloc_per_card &&
40 card->total_pcm_alloc_bytes + size > max_alloc_per_card)
41 return -ENOMEM;
42
43 if (IS_ENABLED(CONFIG_SND_DMA_SGBUF) &&
> 44 (type == SNDRV_DMA_TYPE_DEV_SG || type = SNDRV_DMA_TYPE_DEV_UC_SG) &&
> 45 dma_is_direct(get_dma_ops(dev))) {
46 /* mutate to continuous page allocation */
> 47 dev_dbg(device, "Use continuous page allocator\n");
48 if (type == SNDRV_DMA_TYPE_DEV_SG)
49 type = SNDRV_DMA_TYPE_DEV;
50 else
51 type = SNDRV_DMA_TYPE_DEV_UC;
52 }
53
54 err = snd_dma_alloc_pages(type, dev, size, dmab);
55 if (!err) {
56 mutex_lock(&card->memory_mutex);
57 card->total_pcm_alloc_bytes += dmab->bytes;
58 mutex_unlock(&card->memory_mutex);
59 }
60 return err;
61 }
62
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
2 years, 3 months
[alibaba-cloud:linux-next 10894/11535] htmldocs: Documentation/alibaba/interfaces.rst:97: (SEVERE/4) Unexpected section title.
by kernel test robot
Hi Xunlei,
FYI, the error/warning still remains.
tree: https://github.com/alibaba/cloud-kernel.git linux-next
head: 4da723592714ee2993664252216d9d5b5a3df3eb
commit: 279df2ffcc1de5b6f8c584b23998f426257ae983 [10894/11535] alinux: doc: Add Documentation/alibaba/interfaces.rst
reproduce: make htmldocs
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>, old ones prefixed by <<):
reST markup error:
>> Documentation/alibaba/interfaces.rst:97: (SEVERE/4) Unexpected section title.
vim +97 Documentation/alibaba/interfaces.rst
8
9 memory.wmark_min_adj
10 ====================
11 This file is under memory cgroup v1.
12
13 In co-location environment, there are more or less some memory
14 overcommitment, then BATCH tasks may break the shared global min
15 watermark resulting in all types of applications falling into
16 the direct reclaim slow path hurting the RT of LS tasks.
17 (NOTE: BATCH tasks tolerate big latency spike even in seconds
18 as long as doesn't hurt its overal throughput. While LS tasks
19 are very Latency-Sensitive, they may time out or fail in case
20 of sudden latency spike lasts like hundreds of ms typically.)
21
22 Actually BATCH tasks are not sensitive to memory latency, they
23 can be assigned a strict min watermark which is different from
24 that of LS tasks(which can be aissgned a lenient min watermark
25 accordingly), thus isolating each other in case of global memory
26 allocation.
27
28 memory.wmark_min_adj stands for memcg global WMARK_MIN adjustment,
29 it is used to realize separate min watermarks above-mentioned for
30 memcgs, its valid value is within [-25, 50], specifically:
31 negative value means to be relative to [0, WMARK_MIN],
32 positive value means to be relative to [WMARK_MIN, WMARK_LOW].
33
34 For examples::
35
36 -25 means memcg WMARK_MIN is "WMARK_MIN + (WMARK_MIN - 0) * (-25%)"
37 50 means memcg WMARK_MIN is "WMARK_MIN + (WMARK_LOW - WMARK_MIN) * 50%"
38
39 Negative memory.wmark_min_adj means high QoS requirements, it can
40 allocate below the global WMARK_MIN, which is kind of like the idea
41 behind ALLOC_HARDER, see gfp_to_alloc_flags().
42
43 Positive memory.wmark_min_adj means low QoS requirements, thus when
44 allocation broke memcg min watermark, it should trigger direct reclaim
45 traditionally, and we trigger throttle instead to further prevent them
46 from disturbing others. The throttle time is simply linearly proportional
47 to the pages consumed below memcg's min watermark. The normal throttle
48 time once should be within [1ms, 100ms], and the maximal throttle time
49 is 1000ms. The throttle is only triggered under global memory pressure.
50
51 With this interface, we can assign positive values for BATCH memcgs
52 and negative values for LS memcgs. Note that root memcg doesn't have
53 this file.
54
55 memory.wmark_min_adj default value is 0, and inherit from its parent,
56 Note that the final effective wmark_min_adj will consider all the
57 hierarchical values, its value is the maximal(most conservative)
58 wmark_min_adj along the hierarchy but excluding intermediate default
59 values(zero).
60
61 For example::
62
63 The following hierarchy
64 root
65 / \
66 A D
67 / \
68 B C
69 / \
70 E F
71
72 wmark_min_adj: A -10, B -25, C 0, D 50, E -25, F 50
73 wmark_min_eadj: A -10, B -10, C 0, D 50, E -10, F 50
74
75 "echo xxx > memory.wmark_min_adj" set "wmark_min_adj".
76 "cat memory.wmark_min_adj" shows the value of "wmark_min_eadj".
77
78 memory.exstat
79 =============
80 This file is under memory cgroup v1.
81
82 memory.exstat stands for "extra/extended memory.stat", which is supposed
83 to provide hierarchical statistics.
84
85 "wmark_min_throttled_ms" field is the total throttled time in milliseconds
86 due to positive memory.wmark_min_adj under global memory pressure.
87
88 zombie memcgs reaper
89 ====================
90 After memcg was deleted, page caches still reference to this memcg
91 causing large number of dead(zombie) memcgs in the system. Then it
92 slows down access to "/sys/fs/cgroup/cpu/memory.stat", etc due to
93 tons of iterations, further causing various latencies. "zombie memcgs
94 reaper" is a tool to reclaim these dead memcgs. It has two modes:
95
96 "Background kthread reaper" mode
> 97 --------------------------------
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
2 years, 3 months
[linux-next:master 14415/15967] cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 3d155ae4358baf4831609c2f9cd09396a2b8badf
commit: 628be9a7bed955aab004b076f5c6a44c32c90ad9 [14415/15967] media: atomisp: use just one mamoiada_params.h
config: x86_64-randconfig-r036-20200609 (attached as .config)
compiler: gcc-5 (Ubuntu 5.5.0-12ubuntu1) 5.5.0 20171010
reproduce (this is a W=1 build):
git checkout 628be9a7bed955aab004b076f5c6a44c32c90ad9
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>, old ones prefixed by <<):
cc1: warning: drivers/staging/media/atomisp//pci/hive_isp_css_include/memory_access/: No such file or directory [-Wmissing-include-dirs]
>> cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory [-Wmissing-include-dirs]
--
cc1: warning: drivers/staging/media/atomisp//pci/hive_isp_css_include/memory_access/: No such file or directory [-Wmissing-include-dirs]
>> cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory [-Wmissing-include-dirs]
drivers/staging/media/atomisp/pci/atomisp_cmd.c: In function 'atomisp_get_metadata':
drivers/staging/media/atomisp/pci/atomisp_cmd.c:2806:31: warning: variable 'stream_config' set but not used [-Wunused-but-set-variable]
struct ia_css_stream_config *stream_config;
^
drivers/staging/media/atomisp/pci/atomisp_cmd.c: In function 'atomisp_get_metadata_by_type':
drivers/staging/media/atomisp/pci/atomisp_cmd.c:2885:31: warning: variable 'stream_config' set but not used [-Wunused-but-set-variable]
struct ia_css_stream_config *stream_config;
^
--
cc1: warning: drivers/staging/media/atomisp//pci/hive_isp_css_include/memory_access/: No such file or directory [-Wmissing-include-dirs]
>> cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory [-Wmissing-include-dirs]
drivers/staging/media/atomisp/pci/atomisp_compat_css20.c: In function 'atomisp_css2_dbg_print':
drivers/staging/media/atomisp/pci/atomisp_compat_css20.c:159:2: warning: function might be possible candidate for 'gnu_printf' format attribute [-Wsuggest-attribute=format]
vprintk(fmt, args);
^
drivers/staging/media/atomisp/pci/atomisp_compat_css20.c: In function 'atomisp_css2_dbg_ftrace_print':
drivers/staging/media/atomisp/pci/atomisp_compat_css20.c:165:2: warning: function might be possible candidate for 'gnu_printf' format attribute [-Wsuggest-attribute=format]
ftrace_vprintk(fmt, args);
^
drivers/staging/media/atomisp/pci/atomisp_compat_css20.c:165:2: warning: function might be possible candidate for 'gnu_printf' format attribute [-Wsuggest-attribute=format]
drivers/staging/media/atomisp/pci/atomisp_compat_css20.c: In function 'atomisp_css2_err_print':
drivers/staging/media/atomisp/pci/atomisp_compat_css20.c:171:2: warning: function might be possible candidate for 'gnu_printf' format attribute [-Wsuggest-attribute=format]
vprintk(fmt, args);
^
--
cc1: warning: drivers/staging/media/atomisp//pci/hive_isp_css_include/memory_access/: No such file or directory [-Wmissing-include-dirs]
>> cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory [-Wmissing-include-dirs]
drivers/staging/media/atomisp/pci/atomisp_v4l2.c: In function 'is_valid_device':
drivers/staging/media/atomisp/pci/atomisp_v4l2.c:1513:15: warning: variable 'a0_max_id' set but not used [-Wunused-but-set-variable]
unsigned int a0_max_id = 0;
^
--
cc1: warning: drivers/staging/media/atomisp//pci/hive_isp_css_include/memory_access/: No such file or directory [-Wmissing-include-dirs]
>> cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory [-Wmissing-include-dirs]
drivers/staging/media/atomisp/pci/sh_css_mipi.c: In function 'allocate_mipi_frames':
drivers/staging/media/atomisp/pci/sh_css_mipi.c:415:27: warning: variable 'mipi_intermediate_info' set but not used [-Wunused-but-set-variable]
struct ia_css_frame_info mipi_intermediate_info;
^
--
cc1: warning: drivers/staging/media/atomisp//pci/hive_isp_css_include/memory_access/: No such file or directory [-Wmissing-include-dirs]
>> cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory [-Wmissing-include-dirs]
drivers/staging/media/atomisp/pci/sh_css.c: In function 'alloc_continuous_frames':
drivers/staging/media/atomisp/pci/sh_css.c:2735:22: warning: variable 'capture_pipe' set but not used [-Wunused-but-set-variable]
struct ia_css_pipe *capture_pipe = NULL;
^
drivers/staging/media/atomisp/pci/sh_css.c: In function 'create_host_video_pipeline':
drivers/staging/media/atomisp/pci/sh_css.c:3567:15: warning: variable 'num_output_pins' set but not used [-Wunused-but-set-variable]
unsigned int num_output_pins;
^
drivers/staging/media/atomisp/pci/sh_css.c: In function 'preview_start':
drivers/staging/media/atomisp/pci/sh_css.c:3976:55: warning: variable 'vf_pp_binary' set but not used [-Wunused-but-set-variable]
struct ia_css_binary *copy_binary, *preview_binary, *vf_pp_binary = NULL;
^
drivers/staging/media/atomisp/pci/sh_css.c:3976:38: warning: variable 'preview_binary' set but not used [-Wunused-but-set-variable]
struct ia_css_binary *copy_binary, *preview_binary, *vf_pp_binary = NULL;
^
drivers/staging/media/atomisp/pci/sh_css.c:3976:24: warning: variable 'copy_binary' set but not used [-Wunused-but-set-variable]
struct ia_css_binary *copy_binary, *preview_binary, *vf_pp_binary = NULL;
^
drivers/staging/media/atomisp/pci/sh_css.c:3975:26: warning: variable 'me' set but not used [-Wunused-but-set-variable]
struct ia_css_pipeline *me;
^
drivers/staging/media/atomisp/pci/sh_css.c: In function 'video_start':
drivers/staging/media/atomisp/pci/sh_css.c:5803:24: warning: variable 'copy_binary' set but not used [-Wunused-but-set-variable]
struct ia_css_binary *copy_binary;
^
drivers/staging/media/atomisp/pci/sh_css.c: In function 'yuvpp_start':
drivers/staging/media/atomisp/pci/sh_css.c:7389:24: warning: variable 'copy_binary' set but not used [-Wunused-but-set-variable]
struct ia_css_binary *copy_binary;
^
drivers/staging/media/atomisp/pci/sh_css.c: In function 'create_host_yuvpp_pipeline':
drivers/staging/media/atomisp/pci/sh_css.c:7521:26: warning: variable 'num_vf_pp_stage' set but not used [-Wunused-but-set-variable]
unsigned int num_stage, num_vf_pp_stage, num_output_stage;
^
drivers/staging/media/atomisp/pci/sh_css.c: In function 'ia_css_pipe_map_queue':
drivers/staging/media/atomisp/pci/sh_css.c:10514:22: warning: variable 'pipe_id' set but not used [-Wunused-but-set-variable]
enum ia_css_pipe_id pipe_id;
^
--
cc1: warning: drivers/staging/media/atomisp//pci/hive_isp_css_include/memory_access/: No such file or directory [-Wmissing-include-dirs]
>> cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory [-Wmissing-include-dirs]
drivers/staging/media/atomisp/pci/sh_css_param_shading.c: In function 'prepare_shading_table':
drivers/staging/media/atomisp/pci/sh_css_param_shading.c:239:4: warning: variable 'padded_width' set but not used [-Wunused-but-set-variable]
padded_width,
^
--
cc1: warning: drivers/staging/media/atomisp//pci/hive_isp_css_include/memory_access/: No such file or directory [-Wmissing-include-dirs]
>> cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory [-Wmissing-include-dirs]
drivers/staging/media/atomisp/pci/sh_css_params.c: In function 'ia_css_params_alloc_convert_sctbl':
drivers/staging/media/atomisp/pci/sh_css_params.c:1637:36: warning: variable 'row_padding' set but not used [-Wunused-but-set-variable]
unsigned int i, j, aligned_width, row_padding;
^
--
cc1: warning: drivers/staging/media/atomisp//pci/hive_isp_css_include/memory_access/: No such file or directory [-Wmissing-include-dirs]
>> cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory [-Wmissing-include-dirs]
drivers/staging/media/atomisp/pci/isp/kernels/dvs/dvs_1.0/ia_css_dvs.host.c: In function 'convert_allocate_dvs_6axis_config':
drivers/staging/media/atomisp/pci/isp/kernels/dvs/dvs_1.0/ia_css_dvs.host.c:237:31: warning: variable 'isp_data_ptr' set but not used [-Wunused-but-set-variable]
struct gdc_warp_param_mem_s *isp_data_ptr;
^
--
cc1: warning: drivers/staging/media/atomisp//pci/hive_isp_css_include/memory_access/: No such file or directory [-Wmissing-include-dirs]
>> cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory [-Wmissing-include-dirs]
drivers/staging/media/atomisp/pci/isp/kernels/sdis/sdis_2/ia_css_sdis2.host.c: In function 'ia_css_get_isp_dvs2_coefficients':
drivers/staging/media/atomisp/pci/isp/kernels/sdis/sdis_2/ia_css_sdis2.host.c:119:28: warning: variable 'ver_num_isp' set but not used [-Wunused-but-set-variable]
unsigned int hor_num_isp, ver_num_isp;
^
drivers/staging/media/atomisp/pci/isp/kernels/sdis/sdis_2/ia_css_sdis2.host.c:119:15: warning: variable 'hor_num_isp' set but not used [-Wunused-but-set-variable]
unsigned int hor_num_isp, ver_num_isp;
^
--
cc1: warning: drivers/staging/media/atomisp//pci/hive_isp_css_include/memory_access/: No such file or directory [-Wmissing-include-dirs]
>> cc1: warning: drivers/staging/media/atomisp//pci/css_2400_system/hrt/: No such file or directory [-Wmissing-include-dirs]
drivers/staging/media/atomisp/pci/isp/kernels/vf/vf_1.0/ia_css_vf.host.c: In function 'ia_css_vf_configure':
drivers/staging/media/atomisp/pci/isp/kernels/vf/vf_1.0/ia_css_vf.host.c:127:6: warning: variable 'err' set but not used [-Wunused-but-set-variable]
int err;
^
..
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
2 years, 3 months
[alibaba-cloud:linux-next 11285/11535] arch/x86/um/user-offsets.c:13:46: warning: initialized field overwritten
by kernel test robot
Hi Aleksa,
First bad commit (maybe != root cause):
tree: https://github.com/alibaba/cloud-kernel.git linux-next
head: 4da723592714ee2993664252216d9d5b5a3df3eb
commit: 5b9369e5de06e80452e2773085a595ffb5988fad [11285/11535] open: introduce openat2(2) syscall
config: um-allnoconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0
reproduce (this is a W=1 build):
git checkout 5b9369e5de06e80452e2773085a595ffb5988fad
# save the attached .config to linux build tree
make W=1 ARCH=um
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>, old ones prefixed by <<):
>> arch/x86/um/user-offsets.c:13:46: warning: initialized field overwritten [-Woverride-init]
13 | #define __SYSCALL_I386(nr, sym, qual) [nr] = 1,
| ^
arch/x86/include/generated/asm/syscalls_32.h:1844:1: note: in expansion of macro '__SYSCALL_I386'
1844 | __SYSCALL_I386(427, __ia32_sys_openat2, )
| ^~~~~~~~~~~~~~
arch/x86/um/user-offsets.c:13:46: note: (near initialization for 'syscalls[427]')
13 | #define __SYSCALL_I386(nr, sym, qual) [nr] = 1,
| ^
arch/x86/include/generated/asm/syscalls_32.h:1844:1: note: in expansion of macro '__SYSCALL_I386'
1844 | __SYSCALL_I386(427, __ia32_sys_openat2, )
| ^~~~~~~~~~~~~~
arch/x86/um/user-offsets.c:30:6: warning: no previous prototype for 'foo' [-Wmissing-prototypes]
30 | void foo(void)
| ^~~
--
>> arch/x86/um/user-offsets.c:13:46: warning: initialized field overwritten [-Woverride-init]
13 | #define __SYSCALL_I386(nr, sym, qual) [nr] = 1,
| ^
arch/x86/include/generated/asm/syscalls_32.h:1844:1: note: in expansion of macro '__SYSCALL_I386'
1844 | __SYSCALL_I386(427, __ia32_sys_openat2, )
| ^~~~~~~~~~~~~~
arch/x86/um/user-offsets.c:13:46: note: (near initialization for 'syscalls[427]')
13 | #define __SYSCALL_I386(nr, sym, qual) [nr] = 1,
| ^
arch/x86/include/generated/asm/syscalls_32.h:1844:1: note: in expansion of macro '__SYSCALL_I386'
1844 | __SYSCALL_I386(427, __ia32_sys_openat2, )
| ^~~~~~~~~~~~~~
arch/x86/um/user-offsets.c:30:6: warning: no previous prototype for 'foo' [-Wmissing-prototypes]
30 | void foo(void)
| ^~~
In file included from arch/um/kernel/asm-offsets.c:1:
arch/x86/um/shared/sysdep/kernel-offsets.h:9:6: warning: no previous prototype for 'foo' [-Wmissing-prototypes]
9 | void foo(void)
| ^~~
vim +13 arch/x86/um/user-offsets.c
8d0b9dc9be3919 arch/um/sys-x86_64/user-offsets.c Al Viro 2005-05-05 11
45db1c6176c817 arch/x86/um/user-offsets.c H. Peter Anvin 2011-12-05 12 #ifdef __i386__
cfcbadb49dabb0 arch/x86/um/user-offsets.c Andy Lutomirski 2016-01-28 @13 #define __SYSCALL_I386(nr, sym, qual) [nr] = 1,
45db1c6176c817 arch/x86/um/user-offsets.c H. Peter Anvin 2011-12-05 14 static char syscalls[] = {
45db1c6176c817 arch/x86/um/user-offsets.c H. Peter Anvin 2011-12-05 15 #include <asm/syscalls_32.h>
45db1c6176c817 arch/x86/um/user-offsets.c H. Peter Anvin 2011-12-05 16 };
45db1c6176c817 arch/x86/um/user-offsets.c H. Peter Anvin 2011-12-05 17 #else
cfcbadb49dabb0 arch/x86/um/user-offsets.c Andy Lutomirski 2016-01-28 18 #define __SYSCALL_64(nr, sym, qual) [nr] = 1,
45db1c6176c817 arch/x86/um/user-offsets.c H. Peter Anvin 2011-12-05 19 static char syscalls[] = {
45db1c6176c817 arch/x86/um/user-offsets.c H. Peter Anvin 2011-12-05 20 #include <asm/syscalls_64.h>
45db1c6176c817 arch/x86/um/user-offsets.c H. Peter Anvin 2011-12-05 21 };
45db1c6176c817 arch/x86/um/user-offsets.c H. Peter Anvin 2011-12-05 22 #endif
45db1c6176c817 arch/x86/um/user-offsets.c H. Peter Anvin 2011-12-05 23
:::::: The code at line 13 was first introduced by commit
:::::: cfcbadb49dabb05efa23e1a0f95f3391c0a815bc x86/syscalls: Add syscall entry qualifiers
:::::: TO: Andy Lutomirski <luto(a)kernel.org>
:::::: CC: Ingo Molnar <mingo(a)kernel.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
2 years, 3 months
[alibaba-cloud:linux-next 11445/11535] include/net/compat.h:45:40: error: unknown type name 'compat_uptr_t'; did you mean
by kernel test robot
tree: https://github.com/alibaba/cloud-kernel.git linux-next
head: 4da723592714ee2993664252216d9d5b5a3df3eb
commit: 992cfc11fd216afa8c3dbec7399c48d44e4710d2 [11445/11535] net: abstract out normal and compat msghdr import
config: openrisc-randconfig-r034-20200610 (attached as .config)
compiler: or1k-linux-gcc (GCC) 9.3.0
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
git checkout 992cfc11fd216afa8c3dbec7399c48d44e4710d2
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=openrisc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>, old ones prefixed by <<):
In file included from net/socket.c:97:
>> include/net/compat.h:45:40: error: unknown type name 'compat_uptr_t'; did you mean 'compat_time_t'?
45 | struct sockaddr __user **save_addr, compat_uptr_t *ptr,
| ^~~~~~~~~~~~~
| compat_time_t
>> include/net/compat.h:46:4: error: unknown type name 'compat_size_t'; did you mean 'compat_time_t'?
46 | compat_size_t *len);
| ^~~~~~~~~~~~~
| compat_time_t
vim +45 include/net/compat.h
43
44 int __get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr __user *umsg,
> 45 struct sockaddr __user **save_addr, compat_uptr_t *ptr,
> 46 compat_size_t *len);
47 int get_compat_msghdr(struct msghdr *, struct compat_msghdr __user *,
48 struct sockaddr __user **, struct iovec **);
49 struct sock_fprog __user *get_compat_bpf_fprog(char __user *optval);
50 int put_cmsg_compat(struct msghdr*, int, int, int, void *);
51
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
2 years, 3 months
[alibaba-cloud:linux-next 293/644] arch/x86/kernel/cpu/cacheinfo.c:685:6: warning: no previous prototype for function 'cacheinfo_hygon_init_llc_id'
by kernel test robot
tree: https://github.com/alibaba/cloud-kernel.git linux-next
head: e07b931e8ed58352ad4839243454571b6ce59222
commit: a56df460c3ef27d27cbce7f78829ed479e9491aa [293/644] HYGON: x86/cpu: Get cache info and setup cache cpumap for Hygon Dhyana
config: x86_64-defconfig (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project bc2b70982be8f5250cd0082a7190f8b417bd4dfe)
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 x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
git checkout a56df460c3ef27d27cbce7f78829ed479e9491aa
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>, old ones prefixed by <<):
arch/x86/kernel/cpu/cacheinfo.c:647:6: warning: no previous prototype for function 'cacheinfo_amd_init_llc_id' [-Wmissing-prototypes]
void cacheinfo_amd_init_llc_id(struct cpuinfo_x86 *c, int cpu, u8 node_id)
^
arch/x86/kernel/cpu/cacheinfo.c:647:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void cacheinfo_amd_init_llc_id(struct cpuinfo_x86 *c, int cpu, u8 node_id)
^
static
>> arch/x86/kernel/cpu/cacheinfo.c:685:6: warning: no previous prototype for function 'cacheinfo_hygon_init_llc_id' [-Wmissing-prototypes]
void cacheinfo_hygon_init_llc_id(struct cpuinfo_x86 *c, int cpu, u8 node_id)
^
arch/x86/kernel/cpu/cacheinfo.c:685:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void cacheinfo_hygon_init_llc_id(struct cpuinfo_x86 *c, int cpu, u8 node_id)
^
static
2 warnings generated.
vim +/cacheinfo_hygon_init_llc_id +685 arch/x86/kernel/cpu/cacheinfo.c
684
> 685 void cacheinfo_hygon_init_llc_id(struct cpuinfo_x86 *c, int cpu, u8 node_id)
686 {
687 /*
688 * We may have multiple LLCs if L3 caches exist, so check if we
689 * have an L3 cache by looking at the L3 cache CPUID leaf.
690 */
691 if (!cpuid_edx(0x80000006))
692 return;
693
694 /*
695 * LLC is at the core complex level.
696 * Core complex ID is ApicId[3] for these processors.
697 */
698 per_cpu(cpu_llc_id, cpu) = c->apicid >> 3;
699 }
700
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
2 years, 3 months
Re: [PATCH] crypto: hisilicon - fix strncpy warning with strlcpy
by Eric Biggers
On Sun, Jun 07, 2020 at 01:03:45PM +0000, David Laight wrote:
> From: Herbert Xu
> > Sent: 05 June 2020 13:17
> ...
> > Better yet use strscpy which will even return an error for you.
>
> It really ought to return the buffer length on truncation.
> Then you can loop:
> while(...)
> buf += strxxxcpy(buf, src, buf_end - buf);
> and only check right at the end.
>
> David
scnprintf() can be used for that.
But that doesn't seem relevant to this patch.
- Eric
2 years, 3 months
Re: gcc-5: error: -gz is not supported in this configuration
by Fangrui Song
> But if that gcc was originally
> _configured_ with a version of binutils that doesn't support -gz=zlib,
I agree with this theory :)
On 2020-06-10, Arvind Sankar wrote:
>On Tue, Jun 09, 2020 at 11:23:31PM -0400, Arvind Sankar wrote:
>> On Tue, Jun 09, 2020 at 11:12:25PM -0400, Arvind Sankar wrote:
>> > The output of gcc-5 -dumpspecs may also be useful.
>> >
>> > The exact Kconfig check should have been
>> > gcc-5 -Werror -gz=zlib -S -x c /dev/null -o /dev/null
>> >
>> > I can't see how that would succeed if the a.c test didn't but maybe just
>> > in case?
>>
>> Oh wait, -S instead of -c. Which means it runs neither the assembler nor
>> the linker, so gcc won't error out. But if that gcc was originally
>> _configured_ with a version of binutils that doesn't support -gz=zlib,
>> it will give an error on -c regardless of whether the runtime binutils
>> would actually support it or not.
>
>I think the below might be better than passing the option via -Wa, since
>gcc will translate -gz=zlib into the right assembler option anyway, and
>it will also generate an error if the compiler driver was misconfigured
>and won't support the option even if the rest of the toolchain does,
>fixing the config dependency.
>
>Unless this doesn't work with Clang?
Clang>=6 supports -gz=zlib
>Alternatively (or even in addition), we should redefine cc-option to use
>-c, it uses -S in the Kconfig version, apparently for speed, but -c in
>the Kbuild version.
Unifying cc-option in scripts/Kbuild.include & scripts/Kconfig.include
sounds good.
>diff --git a/Makefile b/Makefile
>index 839f9fee22cb..cb29e56f227a 100644
>--- a/Makefile
>+++ b/Makefile
>@@ -842,7 +842,7 @@ endif
>
> ifdef CONFIG_DEBUG_INFO_COMPRESSED
> DEBUG_CFLAGS += -gz=zlib
>-KBUILD_AFLAGS += -Wa,--compress-debug-sections=zlib
>+KBUILD_AFLAGS += -gz=zlib
> KBUILD_LDFLAGS += --compress-debug-sections=zlib
> endif
>
>diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
>index cb98741601bd..94ce36be470c 100644
>--- a/lib/Kconfig.debug
>+++ b/lib/Kconfig.debug
>@@ -229,7 +229,7 @@ config DEBUG_INFO_COMPRESSED
> bool "Compressed debugging information"
> depends on DEBUG_INFO
> depends on $(cc-option,-gz=zlib)
>- depends on $(as-option,-Wa$(comma)--compress-debug-sections=zlib)
>+ depends on $(as-option,-gz=zlib)
> depends on $(ld-option,--compress-debug-sections=zlib)
> help
> Compress the debug information using zlib. Requires GCC 5.0+ or Clang
This patch looks good.
(clang cc1as only supports(hardcodes) a limited number of -Wa, options
(it parses the options by itself, rather than delegating to GNU as like
GCC). If there is a compiler driver option, that is usually preferable)
2 years, 3 months