[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202406290757.qGal0V0S-lkp@intel.com>
Date: Sat, 29 Jun 2024 08:20:11 +0800
From: kernel test robot <lkp@...el.com>
To: Xavier <xavier_qy@....com>, mingo@...hat.com, peterz@...radead.org,
juri.lelli@...hat.com, vincent.guittot@...aro.org
Cc: llvm@...ts.linux.dev, oe-kbuild-all@...ts.linux.dev,
dietmar.eggemann@....com, rostedt@...dmis.org, bsegall@...gle.com,
mgorman@...e.de, bristot@...hat.com, vschneid@...hat.com,
linux-kernel@...r.kernel.org, Xavier <xavier_qy@....com>
Subject: Re: [PATCH-RT sched v1 1/2] RT SCHED: Optimize the enqueue and
dequeue operations for rt_se
Hi Xavier,
kernel test robot noticed the following build errors:
[auto build test ERROR on tip/sched/core]
[also build test ERROR on shuah-kselftest/next shuah-kselftest/fixes peterz-queue/sched/core linus/master v6.10-rc5 next-20240628]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Xavier/RT-SCHED-Optimize-the-enqueue-and-dequeue-operations-for-rt_se/20240628-211332
base: tip/sched/core
patch link: https://lore.kernel.org/r/20240627172156.235421-2-xavier_qy%40163.com
patch subject: [PATCH-RT sched v1 1/2] RT SCHED: Optimize the enqueue and dequeue operations for rt_se
config: s390-allnoconfig
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project 326ba38a991250a8587a399a260b0f7af2c9166a)
reproduce (this is a W=1 build):
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202406290757.qGal0V0S-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from kernel/sched/build_policy.c:24:
In file included from include/linux/livepatch.h:12:
In file included from include/linux/module.h:19:
In file included from include/linux/elf.h:6:
In file included from arch/s390/include/asm/elf.h:173:
In file included from arch/s390/include/asm/mmu_context.h:11:
In file included from arch/s390/include/asm/pgalloc.h:18:
In file included from include/linux/mm.h:2253:
include/linux/vmstat.h:514:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
514 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
| ~~~~~~~~~~~ ^ ~~~
In file included from kernel/sched/build_policy.c:34:
In file included from kernel/sched/sched.h:63:
In file included from include/linux/tick.h:8:
In file included from include/linux/clockchips.h:14:
In file included from include/linux/clocksource.h:22:
In file included from arch/s390/include/asm/io.h:93:
include/asm-generic/io.h:548:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
548 | val = __raw_readb(PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:561:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
561 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded from macro '__le16_to_cpu'
37 | #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
| ^
include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
102 | #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
| ^
In file included from kernel/sched/build_policy.c:34:
In file included from kernel/sched/sched.h:63:
In file included from include/linux/tick.h:8:
In file included from include/linux/clockchips.h:14:
In file included from include/linux/clocksource.h:22:
In file included from arch/s390/include/asm/io.h:93:
include/asm-generic/io.h:574:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
574 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded from macro '__le32_to_cpu'
35 | #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
| ^
include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
| ^
In file included from kernel/sched/build_policy.c:34:
In file included from kernel/sched/sched.h:63:
In file included from include/linux/tick.h:8:
In file included from include/linux/clockchips.h:14:
In file included from include/linux/clocksource.h:22:
In file included from arch/s390/include/asm/io.h:93:
include/asm-generic/io.h:585:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
585 | __raw_writeb(value, PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:595:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
595 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:605:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
605 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:693:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
693 | readsb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:701:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
701 | readsw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:709:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
709 | readsl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:718:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
718 | writesb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:727:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
727 | writesw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:736:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
736 | writesl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
In file included from kernel/sched/build_policy.c:45:
>> kernel/sched/rt.c:1560:16: error: no member named 'parent' in 'struct sched_rt_entity'
1560 | if (!rt_se->parent) {
| ~~~~~ ^
kernel/sched/rt.c:1575:16: error: no member named 'parent' in 'struct sched_rt_entity'
1575 | if (!rt_se->parent)
| ~~~~~ ^
kernel/sched/rt.c:1616:18: error: no member named 'parent' in 'struct sched_rt_entity'
1616 | rt_se = rt_se->parent;
| ~~~~~ ^
kernel/sched/rt.c:1662:18: error: no member named 'parent' in 'struct sched_rt_entity'
1662 | rt_se = rt_se->parent;
| ~~~~~ ^
13 warnings and 4 errors generated.
vim +1560 kernel/sched/rt.c
1473
1474 /*
1475 * To optimize the enqueue and dequeue of rt_se, this strategy employs a
1476 * bottom-up removal approach. Specifically, when removing an rt_se at a
1477 * certain level, if it is determined that the highest priority of the rq
1478 * associated with that rt_se has not changed, there is no need to continue
1479 * removing rt_se at higher levels. At this point, only the total number
1480 * of removed rt_se needs to be recorded, and the rt_nr_running count of
1481 * higher-level rq should be removed accordingly.
1482 *
1483 * For enqueue operations, if an rt_se at a certain level is in the rq,
1484 * it is still necessary to check the priority of the higher-level rq.
1485 * If the priority of the higher-level rq is found to be lower than that
1486 * of the rt_se to be added, it should be removed, as updating the highest
1487 * priority of the rq during addition will cause the rq to be repositioned
1488 * in the parent rq.
1489 *
1490 * Conversely, for dequeue operations, if an rt_se at a certain level is
1491 * not in the rq, the operation can be exited immediately to reduce
1492 * unnecessary checks and handling.
1493 *
1494 * The return value refers to the last rt_se that was removed for enqueue
1495 * operations. And for dequeue operations, it refers to the last rt_se
1496 * that was either removed or had its rt_nr_running updated.
1497 */
1498 static struct sched_rt_entity *dequeue_rt_stack(struct sched_rt_entity *rt_se,
1499 unsigned int flags, int for_enqueue)
1500 {
1501 struct sched_rt_entity *last = rt_se;
1502 struct sched_rt_entity *origin = rt_se;
1503 unsigned int del_rt_nr = 0;
1504 unsigned int del_rr_nr = 0;
1505 int prio_changed = rt_se_prio(rt_se);
1506 int sub_on_rq = 1;
1507
1508 for_each_sched_rt_entity(rt_se) {
1509 if (on_rt_rq(rt_se)) {
1510 if (sub_on_rq) {
1511 /*
1512 * The number of tasks removed from the sub-level rt_se also needs
1513 * to be subtracted from the rq of the current rt_se, as the current
1514 * rt_se's rq no longer includes the number of removed tasks.
1515 */
1516 dec_rq_nr_running(rt_se, del_rt_nr, del_rr_nr);
1517
1518 if (prio_changed) {
1519 /*
1520 * If the removal of the lower-level rt_se causes the
1521 * highest priority of the current rq to change, then the
1522 * current rt_se also needs to be removed from its parent
1523 * rq, and the number of deleted tasks should be
1524 * accumulated.
1525 */
1526 del_rt_nr += rt_se_nr_running(rt_se);
1527 del_rr_nr += rt_se_rr_nr_running(rt_se);
1528 prio_changed = __dequeue_rt_entity(rt_se,
1529 prio_changed, flags);
1530 last = rt_se;
1531 } else if (!for_enqueue) {
1532 /* For dequeue, last may only rt_nr_running was modified.*/
1533 last = rt_se;
1534 }
1535 } else {
1536 /*
1537 * Entering this branch must be for enqueue, as dequeue would break
1538 * if an rt_se is not online.
1539 * If the sub-level node is not online, and the current rt_se's
1540 * priority is lower than the one being added, current rt_se need
1541 * to be removed.
1542 */
1543 prio_changed = rt_se_prio(rt_se);
1544 if (prio_changed > rt_se_prio(origin)) {
1545 del_rt_nr += rt_se_nr_running(rt_se);
1546 del_rr_nr += rt_se_rr_nr_running(rt_se);
1547 prio_changed = __dequeue_rt_entity(rt_se,
1548 prio_changed, flags);
1549 last = rt_se;
1550 } else {
1551 prio_changed = 0;
1552 }
1553 }
1554
1555 /*
1556 * If the current rt_se is on the top rt_rq, then the already deleted
1557 * nodes, plus the count of the rt_rq where current rt_se located,
1558 * need to be removed from the top_rt_rq.
1559 */
> 1560 if (!rt_se->parent) {
1561 dequeue_top_rt_rq(rt_rq_of_se(rt_se),
1562 del_rt_nr + rt_rq_of_se(rt_se)->rt_nr_running);
1563 }
1564 sub_on_rq = 1;
1565 } else if (for_enqueue) {
1566 /*
1567 * In the case of an enqueue operation, if a certain level is found to be
1568 * not online, then the previous counts need to be reset to zero.
1569 */
1570 prio_changed = 0;
1571 sub_on_rq = 0;
1572 del_rt_nr = 0;
1573 del_rr_nr = 0;
1574
1575 if (!rt_se->parent)
1576 dequeue_top_rt_rq(rt_rq_of_se(rt_se),
1577 rt_rq_of_se(rt_se)->rt_nr_running);
1578 } else {
1579 last = rt_se;
1580 break;
1581 }
1582 }
1583
1584 return last;
1585 }
1586
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
View attachment "reproduce" of type "text/plain" (808 bytes)
View attachment "config" of type "text/plain" (29165 bytes)
Powered by blists - more mailing lists