From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [nsaenz-rpi:pcplists-rcu-drain-v1 2/2] mm/page_alloc.c:3245:28: sparse: sparse: incorrect type in assignment (different address spaces)
Date: Sat, 05 Feb 2022 01:18:00 +0800 [thread overview]
Message-ID: <202202050150.PQssjWMS-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 10716 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git pcplists-rcu-drain-v1
head: 01b58921eae8d67b3ad6b05e73c2a1dd7106ae28
commit: 01b58921eae8d67b3ad6b05e73c2a1dd7106ae28 [2/2] mm/page_alloc: Add remote draining support to per-cpu lists
config: h8300-randconfig-s032-20220201 (https://download.01.org/0day-ci/archive/20220205/202202050150.PQssjWMS-lkp(a)intel.com/config)
compiler: h8300-linux-gcc (GCC) 11.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git/commit/?id=01b58921eae8d67b3ad6b05e73c2a1dd7106ae28
git remote add nsaenz-rpi https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git
git fetch --no-tags nsaenz-rpi pcplists-rcu-drain-v1
git checkout 01b58921eae8d67b3ad6b05e73c2a1dd7106ae28
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=h8300 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
mm/page_alloc.c:1475:30: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:1475:30: sparse: expected struct list_head *list
mm/page_alloc.c:1475:30: sparse: got struct list_head [noderef] *
>> mm/page_alloc.c:3245:28: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pcplists [noderef] *lp @@ got struct pcplists [noderef] __rcu * @@
mm/page_alloc.c:3245:28: sparse: expected struct pcplists [noderef] *lp
mm/page_alloc.c:3245:28: sparse: got struct pcplists [noderef] __rcu *
mm/page_alloc.c:3250:36: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pcplists [noderef] *lp @@ got struct pcplists [noderef] __rcu * @@
mm/page_alloc.c:3250:36: sparse: expected struct pcplists [noderef] *lp
mm/page_alloc.c:3250:36: sparse: got struct pcplists [noderef] __rcu *
mm/page_alloc.c:3435:40: sparse: sparse: incorrect type in argument 2 (different modifiers) @@ expected struct list_head *head @@ got struct list_head [noderef] * @@
mm/page_alloc.c:3435:40: sparse: expected struct list_head *head
mm/page_alloc.c:3435:40: sparse: got struct list_head [noderef] *
mm/page_alloc.c:3726:14: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:3726:14: sparse: expected struct list_head *list
mm/page_alloc.c:3726:14: sparse: got struct list_head [noderef] *
mm/page_alloc.c:3727:15: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected int *count @@ got int [noderef] * @@
mm/page_alloc.c:3727:15: sparse: expected int *count
mm/page_alloc.c:3727:15: sparse: got int [noderef] *
mm/page_alloc.c:5349:18: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *pcp_list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:5349:18: sparse: expected struct list_head *pcp_list
mm/page_alloc.c:5349:18: sparse: got struct list_head [noderef] *
mm/page_alloc.c:5350:15: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected int *count @@ got int [noderef] * @@
mm/page_alloc.c:5350:15: sparse: expected int *count
mm/page_alloc.c:5350:15: sparse: got int [noderef] *
mm/page_alloc.c:5966:28: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pcplists [noderef] *lp @@ got struct pcplists [noderef] __rcu * @@
mm/page_alloc.c:5966:28: sparse: expected struct pcplists [noderef] *lp
mm/page_alloc.c:5966:28: sparse: got struct pcplists [noderef] __rcu *
mm/page_alloc.c:6064:28: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pcplists [noderef] *lp @@ got struct pcplists [noderef] __rcu * @@
mm/page_alloc.c:6064:28: sparse: expected struct pcplists [noderef] *lp
mm/page_alloc.c:6064:28: sparse: got struct pcplists [noderef] __rcu *
>> mm/page_alloc.c:7020:17: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pcplists [noderef] __rcu *lp @@ got struct pcplists [noderef] * @@
mm/page_alloc.c:7020:17: sparse: expected struct pcplists [noderef] __rcu *lp
mm/page_alloc.c:7020:17: sparse: got struct pcplists [noderef] *
>> mm/page_alloc.c:7024:47: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct list_head *list @@ got struct list_head [noderef] __rcu * @@
mm/page_alloc.c:7024:47: sparse: expected struct list_head *list
mm/page_alloc.c:7024:47: sparse: got struct list_head [noderef] __rcu *
mm/page_alloc.c:7025:50: sparse: sparse: incorrect type in argument 1 (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:7025:50: sparse: expected struct list_head *list
mm/page_alloc.c:7025:50: sparse: got struct list_head [noderef] *
mm/page_alloc.c:1460:17: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:1515:9: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3157:13: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3158:42: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3246:29: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3251:37: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3286:36: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3293:25: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3436:9: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3438:13: sparse: sparse: dereference of noderef expression
mm/page_alloc.c: note: in included file (through include/linux/mm.h):
include/linux/gfp.h:368:27: sparse: sparse: restricted gfp_t degrades to integer
include/linux/gfp.h:368:27: sparse: sparse: restricted gfp_t degrades to integer
mm/page_alloc.c:5967:37: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:6065:37: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:6069:17: sparse: sparse: dereference of noderef expression
vim +3245 mm/page_alloc.c
3194
3195 /*
3196 * The implementation of drain_all_pages(), exposing an extra parameter to
3197 * drain on all cpus.
3198 *
3199 * drain_all_pages() is optimized to only execute on cpus where pcplists are
3200 * not empty. The check for non-emptiness can however race with a free to
3201 * pcplist that has not yet increased the lp->count from 0 to 1. Callers
3202 * that need the guarantee that every CPU has drained can disable the
3203 * optimizing racy check.
3204 */
3205 static void __drain_all_pages(struct zone *zone, bool force_all_cpus)
3206 {
3207 struct per_cpu_pages *pcp;
3208 struct zone *z;
3209 int cpu;
3210
3211 /*
3212 * Allocate in the BSS so we won't require allocation in
3213 * direct reclaim path for CONFIG_CPUMASK_OFFSTACK=y
3214 */
3215 static cpumask_t cpus_with_pcps;
3216
3217 /*
3218 * Do not drain if one is already in progress unless it's specific to
3219 * a zone. Such callers are primarily CMA and memory hotplug and need
3220 * the drain to be complete when the call returns.
3221 */
3222 if (unlikely(!mutex_trylock(&pcpu_drain_mutex))) {
3223 if (!zone)
3224 return;
3225 mutex_lock(&pcpu_drain_mutex);
3226 }
3227
3228 /*
3229 * We don't care about racing with CPU hotplug event
3230 * as offline notification will cause the notified
3231 * cpu to drain that CPU pcps and on_each_cpu_mask
3232 * disables preemption as part of its processing
3233 */
3234 for_each_online_cpu(cpu) {
3235 bool has_pcps = false;
3236 struct pcplists *lp;
3237
3238 if (force_all_cpus) {
3239 /*
3240 * The lp->count check is racy, some callers need a
3241 * guarantee that no cpu is missed.
3242 */
3243 has_pcps = true;
3244 } else if (zone) {
> 3245 lp = READ_ONCE(per_cpu_ptr(zone->per_cpu_pageset, cpu)->lp);
3246 if (lp->count)
3247 has_pcps = true;
3248 } else {
3249 for_each_populated_zone(z) {
3250 lp = READ_ONCE(per_cpu_ptr(z->per_cpu_pageset, cpu)->lp);
3251 if (lp->count) {
3252 has_pcps = true;
3253 break;
3254 }
3255 }
3256 }
3257
3258 if (has_pcps)
3259 cpumask_set_cpu(cpu, &cpus_with_pcps);
3260 else
3261 cpumask_clear_cpu(cpu, &cpus_with_pcps);
3262 }
3263
3264 if (!force_all_cpus && cpumask_empty(&cpus_with_pcps))
3265 goto exit;
3266
3267 for_each_cpu(cpu, &cpus_with_pcps) {
3268 for_each_populated_zone(z) {
3269 if (zone && zone != z)
3270 continue;
3271
3272 pcp = per_cpu_ptr(z->per_cpu_pageset, cpu);
3273 pcp->drain = rcu_replace_pointer(pcp->lp, pcp->drain,
3274 mutex_is_locked(&pcpu_drain_mutex));
3275 }
3276 }
3277
3278 synchronize_rcu();
3279
3280 for_each_cpu(cpu, &cpus_with_pcps) {
3281 for_each_populated_zone(z) {
3282 unsigned long flags;
3283 int count;
3284
3285 pcp = per_cpu_ptr(z->per_cpu_pageset, cpu);
3286 count = pcp->drain->count;
3287 if (!count)
3288 continue;
3289
3290 local_irq_save(flags);
3291 free_pcppages_bulk(z, count, READ_ONCE(pcp->batch), pcp->drain);
3292 local_irq_restore(flags);
3293 VM_BUG_ON(pcp->drain->count);
3294 }
3295 }
3296
3297 exit:
3298 mutex_unlock(&pcpu_drain_mutex);
3299 }
3300
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Nicolas Saenz Julienne <nsaenzju@redhat.com>
Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org
Subject: [nsaenz-rpi:pcplists-rcu-drain-v1 2/2] mm/page_alloc.c:3245:28: sparse: sparse: incorrect type in assignment (different address spaces)
Date: Sat, 5 Feb 2022 01:18:00 +0800 [thread overview]
Message-ID: <202202050150.PQssjWMS-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git pcplists-rcu-drain-v1
head: 01b58921eae8d67b3ad6b05e73c2a1dd7106ae28
commit: 01b58921eae8d67b3ad6b05e73c2a1dd7106ae28 [2/2] mm/page_alloc: Add remote draining support to per-cpu lists
config: h8300-randconfig-s032-20220201 (https://download.01.org/0day-ci/archive/20220205/202202050150.PQssjWMS-lkp@intel.com/config)
compiler: h8300-linux-gcc (GCC) 11.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git/commit/?id=01b58921eae8d67b3ad6b05e73c2a1dd7106ae28
git remote add nsaenz-rpi https://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git
git fetch --no-tags nsaenz-rpi pcplists-rcu-drain-v1
git checkout 01b58921eae8d67b3ad6b05e73c2a1dd7106ae28
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=h8300 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
mm/page_alloc.c:1475:30: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:1475:30: sparse: expected struct list_head *list
mm/page_alloc.c:1475:30: sparse: got struct list_head [noderef] *
>> mm/page_alloc.c:3245:28: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pcplists [noderef] *lp @@ got struct pcplists [noderef] __rcu * @@
mm/page_alloc.c:3245:28: sparse: expected struct pcplists [noderef] *lp
mm/page_alloc.c:3245:28: sparse: got struct pcplists [noderef] __rcu *
mm/page_alloc.c:3250:36: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pcplists [noderef] *lp @@ got struct pcplists [noderef] __rcu * @@
mm/page_alloc.c:3250:36: sparse: expected struct pcplists [noderef] *lp
mm/page_alloc.c:3250:36: sparse: got struct pcplists [noderef] __rcu *
mm/page_alloc.c:3435:40: sparse: sparse: incorrect type in argument 2 (different modifiers) @@ expected struct list_head *head @@ got struct list_head [noderef] * @@
mm/page_alloc.c:3435:40: sparse: expected struct list_head *head
mm/page_alloc.c:3435:40: sparse: got struct list_head [noderef] *
mm/page_alloc.c:3726:14: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:3726:14: sparse: expected struct list_head *list
mm/page_alloc.c:3726:14: sparse: got struct list_head [noderef] *
mm/page_alloc.c:3727:15: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected int *count @@ got int [noderef] * @@
mm/page_alloc.c:3727:15: sparse: expected int *count
mm/page_alloc.c:3727:15: sparse: got int [noderef] *
mm/page_alloc.c:5349:18: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected struct list_head *pcp_list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:5349:18: sparse: expected struct list_head *pcp_list
mm/page_alloc.c:5349:18: sparse: got struct list_head [noderef] *
mm/page_alloc.c:5350:15: sparse: sparse: incorrect type in assignment (different modifiers) @@ expected int *count @@ got int [noderef] * @@
mm/page_alloc.c:5350:15: sparse: expected int *count
mm/page_alloc.c:5350:15: sparse: got int [noderef] *
mm/page_alloc.c:5966:28: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pcplists [noderef] *lp @@ got struct pcplists [noderef] __rcu * @@
mm/page_alloc.c:5966:28: sparse: expected struct pcplists [noderef] *lp
mm/page_alloc.c:5966:28: sparse: got struct pcplists [noderef] __rcu *
mm/page_alloc.c:6064:28: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pcplists [noderef] *lp @@ got struct pcplists [noderef] __rcu * @@
mm/page_alloc.c:6064:28: sparse: expected struct pcplists [noderef] *lp
mm/page_alloc.c:6064:28: sparse: got struct pcplists [noderef] __rcu *
>> mm/page_alloc.c:7020:17: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct pcplists [noderef] __rcu *lp @@ got struct pcplists [noderef] * @@
mm/page_alloc.c:7020:17: sparse: expected struct pcplists [noderef] __rcu *lp
mm/page_alloc.c:7020:17: sparse: got struct pcplists [noderef] *
>> mm/page_alloc.c:7024:47: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct list_head *list @@ got struct list_head [noderef] __rcu * @@
mm/page_alloc.c:7024:47: sparse: expected struct list_head *list
mm/page_alloc.c:7024:47: sparse: got struct list_head [noderef] __rcu *
mm/page_alloc.c:7025:50: sparse: sparse: incorrect type in argument 1 (different modifiers) @@ expected struct list_head *list @@ got struct list_head [noderef] * @@
mm/page_alloc.c:7025:50: sparse: expected struct list_head *list
mm/page_alloc.c:7025:50: sparse: got struct list_head [noderef] *
mm/page_alloc.c:1460:17: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:1515:9: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3157:13: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3158:42: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3246:29: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3251:37: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3286:36: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3293:25: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3436:9: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:3438:13: sparse: sparse: dereference of noderef expression
mm/page_alloc.c: note: in included file (through include/linux/mm.h):
include/linux/gfp.h:368:27: sparse: sparse: restricted gfp_t degrades to integer
include/linux/gfp.h:368:27: sparse: sparse: restricted gfp_t degrades to integer
mm/page_alloc.c:5967:37: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:6065:37: sparse: sparse: dereference of noderef expression
mm/page_alloc.c:6069:17: sparse: sparse: dereference of noderef expression
vim +3245 mm/page_alloc.c
3194
3195 /*
3196 * The implementation of drain_all_pages(), exposing an extra parameter to
3197 * drain on all cpus.
3198 *
3199 * drain_all_pages() is optimized to only execute on cpus where pcplists are
3200 * not empty. The check for non-emptiness can however race with a free to
3201 * pcplist that has not yet increased the lp->count from 0 to 1. Callers
3202 * that need the guarantee that every CPU has drained can disable the
3203 * optimizing racy check.
3204 */
3205 static void __drain_all_pages(struct zone *zone, bool force_all_cpus)
3206 {
3207 struct per_cpu_pages *pcp;
3208 struct zone *z;
3209 int cpu;
3210
3211 /*
3212 * Allocate in the BSS so we won't require allocation in
3213 * direct reclaim path for CONFIG_CPUMASK_OFFSTACK=y
3214 */
3215 static cpumask_t cpus_with_pcps;
3216
3217 /*
3218 * Do not drain if one is already in progress unless it's specific to
3219 * a zone. Such callers are primarily CMA and memory hotplug and need
3220 * the drain to be complete when the call returns.
3221 */
3222 if (unlikely(!mutex_trylock(&pcpu_drain_mutex))) {
3223 if (!zone)
3224 return;
3225 mutex_lock(&pcpu_drain_mutex);
3226 }
3227
3228 /*
3229 * We don't care about racing with CPU hotplug event
3230 * as offline notification will cause the notified
3231 * cpu to drain that CPU pcps and on_each_cpu_mask
3232 * disables preemption as part of its processing
3233 */
3234 for_each_online_cpu(cpu) {
3235 bool has_pcps = false;
3236 struct pcplists *lp;
3237
3238 if (force_all_cpus) {
3239 /*
3240 * The lp->count check is racy, some callers need a
3241 * guarantee that no cpu is missed.
3242 */
3243 has_pcps = true;
3244 } else if (zone) {
> 3245 lp = READ_ONCE(per_cpu_ptr(zone->per_cpu_pageset, cpu)->lp);
3246 if (lp->count)
3247 has_pcps = true;
3248 } else {
3249 for_each_populated_zone(z) {
3250 lp = READ_ONCE(per_cpu_ptr(z->per_cpu_pageset, cpu)->lp);
3251 if (lp->count) {
3252 has_pcps = true;
3253 break;
3254 }
3255 }
3256 }
3257
3258 if (has_pcps)
3259 cpumask_set_cpu(cpu, &cpus_with_pcps);
3260 else
3261 cpumask_clear_cpu(cpu, &cpus_with_pcps);
3262 }
3263
3264 if (!force_all_cpus && cpumask_empty(&cpus_with_pcps))
3265 goto exit;
3266
3267 for_each_cpu(cpu, &cpus_with_pcps) {
3268 for_each_populated_zone(z) {
3269 if (zone && zone != z)
3270 continue;
3271
3272 pcp = per_cpu_ptr(z->per_cpu_pageset, cpu);
3273 pcp->drain = rcu_replace_pointer(pcp->lp, pcp->drain,
3274 mutex_is_locked(&pcpu_drain_mutex));
3275 }
3276 }
3277
3278 synchronize_rcu();
3279
3280 for_each_cpu(cpu, &cpus_with_pcps) {
3281 for_each_populated_zone(z) {
3282 unsigned long flags;
3283 int count;
3284
3285 pcp = per_cpu_ptr(z->per_cpu_pageset, cpu);
3286 count = pcp->drain->count;
3287 if (!count)
3288 continue;
3289
3290 local_irq_save(flags);
3291 free_pcppages_bulk(z, count, READ_ONCE(pcp->batch), pcp->drain);
3292 local_irq_restore(flags);
3293 VM_BUG_ON(pcp->drain->count);
3294 }
3295 }
3296
3297 exit:
3298 mutex_unlock(&pcpu_drain_mutex);
3299 }
3300
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
next reply other threads:[~2022-02-04 17:18 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-04 17:18 kernel test robot [this message]
2022-02-04 17:18 ` [nsaenz-rpi:pcplists-rcu-drain-v1 2/2] mm/page_alloc.c:3245:28: sparse: sparse: incorrect type in assignment (different address spaces) kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202202050150.PQssjWMS-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.