* kernel/trace/trace_osnoise.c:1471:2: warning: %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint]
@ 2021-08-20 17:11 kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2021-08-20 17:11 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 16707 bytes --]
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Daniel Bristot de Oliveira <bristot@redhat.com>
CC: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
Hi Daniel,
First bad commit (maybe != root cause):
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: d992fe5318d8d7af9510b879439a3c7f283da442
commit: 498627b4ac85780b9962ed9b5c5abbefd884ef8e trace/osnoise: Fix return value on osnoise_init_hotplug_support
date: 8 weeks ago
:::::: branch date: 19 hours ago
:::::: commit date: 8 weeks ago
compiler: or1k-linux-gcc (GCC) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
cppcheck possible warnings: (new ones prefixed by >>, may not real problems)
>> kernel/trace/trace_osnoise.c:1611:8: warning: snprintf format string requires 2 parameters but only 1 is given. [wrongPrintfScanfArgNum]
len = snprintf(NULL, 0, "%*pbln", cpumask_pr_args(&osnoise_cpumask)) + 1;
^
kernel/trace/trace_osnoise.c:1618:8: warning: snprintf format string requires 2 parameters but only 1 is given. [wrongPrintfScanfArgNum]
len = snprintf(mask_str, len, "%*pbln", cpumask_pr_args(&osnoise_cpumask));
^
vim +1471 kernel/trace/trace_osnoise.c
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1453
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1454 /*
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1455 * start_kthread - Start a workload tread
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1456 */
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1457 static int start_kthread(unsigned int cpu)
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1458 {
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1459 struct task_struct *kthread;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1460 void *main = osnoise_main;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1461 char comm[24];
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1462
a955d7eac1779b4 Daniel Bristot de Oliveira 2021-06-22 1463 #ifdef CONFIG_TIMERLAT_TRACER
a955d7eac1779b4 Daniel Bristot de Oliveira 2021-06-22 1464 if (osnoise_data.timerlat_tracer) {
a955d7eac1779b4 Daniel Bristot de Oliveira 2021-06-22 1465 snprintf(comm, 24, "timerlat/%d", cpu);
a955d7eac1779b4 Daniel Bristot de Oliveira 2021-06-22 1466 main = timerlat_main;
a955d7eac1779b4 Daniel Bristot de Oliveira 2021-06-22 1467 } else {
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1468 snprintf(comm, 24, "osnoise/%d", cpu);
a955d7eac1779b4 Daniel Bristot de Oliveira 2021-06-22 1469 }
a955d7eac1779b4 Daniel Bristot de Oliveira 2021-06-22 1470 #else
a955d7eac1779b4 Daniel Bristot de Oliveira 2021-06-22 @1471 snprintf(comm, 24, "osnoise/%d", cpu);
a955d7eac1779b4 Daniel Bristot de Oliveira 2021-06-22 1472 #endif
a955d7eac1779b4 Daniel Bristot de Oliveira 2021-06-22 1473 kthread = kthread_create_on_cpu(main, NULL, cpu, comm);
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1474
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1475 if (IS_ERR(kthread)) {
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1476 pr_err(BANNER "could not start sampling thread\n");
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1477 stop_per_cpu_kthreads();
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1478 return -ENOMEM;
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1479 }
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1480
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1481 per_cpu(per_cpu_osnoise_var, cpu).kthread = kthread;
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1482 wake_up_process(kthread);
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1483
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1484 return 0;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1485 }
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1486
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1487 /*
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1488 * start_per_cpu_kthread - Kick off per-cpu osnoise sampling kthreads
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1489 *
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1490 * This starts the kernel thread that will look for osnoise on many
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1491 * cpus.
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1492 */
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1493 static int start_per_cpu_kthreads(struct trace_array *tr)
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1494 {
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1495 struct cpumask *current_mask = &save_cpumask;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1496 int retval;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1497 int cpu;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1498
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1499 get_online_cpus();
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1500 /*
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1501 * Run only on CPUs in which trace and osnoise are allowed to run.
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1502 */
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1503 cpumask_and(current_mask, tr->tracing_cpumask, &osnoise_cpumask);
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1504 /*
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1505 * And the CPU is online.
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1506 */
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1507 cpumask_and(current_mask, cpu_online_mask, current_mask);
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1508
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1509 for_each_possible_cpu(cpu)
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1510 per_cpu(per_cpu_osnoise_var, cpu).kthread = NULL;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1511
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1512 for_each_cpu(cpu, current_mask) {
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1513 retval = start_kthread(cpu);
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1514 if (retval) {
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1515 stop_per_cpu_kthreads();
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1516 return retval;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1517 }
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1518 }
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1519
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1520 put_online_cpus();
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1521
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1522 return 0;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1523 }
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1524
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1525 #ifdef CONFIG_HOTPLUG_CPU
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1526 static void osnoise_hotplug_workfn(struct work_struct *dummy)
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1527 {
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1528 struct trace_array *tr = osnoise_trace;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1529 unsigned int cpu = smp_processor_id();
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1530
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1531
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1532 mutex_lock(&trace_types_lock);
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1533
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1534 if (!osnoise_busy)
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1535 goto out_unlock_trace;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1536
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1537 mutex_lock(&interface_lock);
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1538 get_online_cpus();
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1539
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1540 if (!cpumask_test_cpu(cpu, &osnoise_cpumask))
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1541 goto out_unlock;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1542
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1543 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask))
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1544 goto out_unlock;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1545
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1546 start_kthread(cpu);
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1547
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1548 out_unlock:
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1549 put_online_cpus();
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1550 mutex_unlock(&interface_lock);
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1551 out_unlock_trace:
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1552 mutex_unlock(&trace_types_lock);
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1553 }
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1554
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1555 static DECLARE_WORK(osnoise_hotplug_work, osnoise_hotplug_workfn);
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1556
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1557 /*
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1558 * osnoise_cpu_init - CPU hotplug online callback function
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1559 */
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1560 static int osnoise_cpu_init(unsigned int cpu)
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1561 {
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1562 schedule_work_on(cpu, &osnoise_hotplug_work);
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1563 return 0;
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1564 }
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1565
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1566 /*
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1567 * osnoise_cpu_die - CPU hotplug offline callback function
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1568 */
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1569 static int osnoise_cpu_die(unsigned int cpu)
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1570 {
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1571 stop_kthread(cpu);
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1572 return 0;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1573 }
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1574
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1575 static void osnoise_init_hotplug_support(void)
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1576 {
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1577 int ret;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1578
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1579 ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "trace/osnoise:online",
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1580 osnoise_cpu_init, osnoise_cpu_die);
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1581 if (ret < 0)
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1582 pr_warn(BANNER "Error to init cpu hotplug support\n");
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1583
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1584 return;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1585 }
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1586 #else /* CONFIG_HOTPLUG_CPU */
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1587 static void osnoise_init_hotplug_support(void)
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1588 {
498627b4ac85780 Daniel Bristot de Oliveira 2021-06-28 1589 return;
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1590 }
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1591 #endif /* CONFIG_HOTPLUG_CPU */
c8895e271f7994a Daniel Bristot de Oliveira 2021-06-22 1592
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1593 /*
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1594 * osnoise_cpus_read - Read function for reading the "cpus" file
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1595 * @filp: The active open file structure
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1596 * @ubuf: The userspace provided buffer to read value into
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1597 * @cnt: The maximum number of bytes to read
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1598 * @ppos: The current "file" position
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1599 *
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1600 * Prints the "cpus" output into the user-provided buffer.
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1601 */
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1602 static ssize_t
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1603 osnoise_cpus_read(struct file *filp, char __user *ubuf, size_t count,
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1604 loff_t *ppos)
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1605 {
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1606 char *mask_str;
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1607 int len;
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1608
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1609 mutex_lock(&interface_lock);
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1610
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 @1611 len = snprintf(NULL, 0, "%*pbl\n", cpumask_pr_args(&osnoise_cpumask)) + 1;
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1612 mask_str = kmalloc(len, GFP_KERNEL);
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1613 if (!mask_str) {
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1614 count = -ENOMEM;
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1615 goto out_unlock;
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1616 }
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1617
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1618 len = snprintf(mask_str, len, "%*pbl\n", cpumask_pr_args(&osnoise_cpumask));
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1619 if (len >= count) {
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1620 count = -EINVAL;
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1621 goto out_free;
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1622 }
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1623
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1624 count = simple_read_from_buffer(ubuf, count, ppos, mask_str, len);
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1625
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1626 out_free:
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1627 kfree(mask_str);
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1628 out_unlock:
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1629 mutex_unlock(&interface_lock);
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1630
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1631 return count;
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1632 }
bce29ac9ce0bb0b Daniel Bristot de Oliveira 2021-06-22 1633
:::::: The code at line 1471 was first introduced by commit
:::::: a955d7eac1779b437ceb24fc352026a2cbcec140 trace: Add timerlat tracer
:::::: TO: Daniel Bristot de Oliveira <bristot@redhat.com>
:::::: CC: Steven Rostedt (VMware) <rostedt@goodmis.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
^ permalink raw reply [flat|nested] 2+ messages in thread
* kernel/trace/trace_osnoise.c:1471:2: warning: %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint]
@ 2022-01-09 17:39 kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2022-01-09 17:39 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 16468 bytes --]
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Daniel Bristot de Oliveira <bristot@redhat.com>
CC: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 4634129ad9fdc89d10b597fc6f8f4336fb61e105
commit: 498627b4ac85780b9962ed9b5c5abbefd884ef8e trace/osnoise: Fix return value on osnoise_init_hotplug_support
date: 7 months ago
:::::: branch date: 17 hours ago
:::::: commit date: 7 months ago
compiler: arc-elf-gcc (GCC) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
cppcheck possible warnings: (new ones prefixed by >>, may not real problems)
>> kernel/trace/trace_osnoise.c:1611:8: warning: snprintf format string requires 2 parameters but only 1 is given. [wrongPrintfScanfArgNum]
len = snprintf(NULL, 0, "%*pbln", cpumask_pr_args(&osnoise_cpumask)) + 1;
^
kernel/trace/trace_osnoise.c:1618:8: warning: snprintf format string requires 2 parameters but only 1 is given. [wrongPrintfScanfArgNum]
len = snprintf(mask_str, len, "%*pbln", cpumask_pr_args(&osnoise_cpumask));
^
vim +1471 kernel/trace/trace_osnoise.c
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1453
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1454 /*
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1455 * start_kthread - Start a workload tread
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1456 */
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1457 static int start_kthread(unsigned int cpu)
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1458 {
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1459 struct task_struct *kthread;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1460 void *main = osnoise_main;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1461 char comm[24];
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1462
a955d7eac1779b Daniel Bristot de Oliveira 2021-06-22 1463 #ifdef CONFIG_TIMERLAT_TRACER
a955d7eac1779b Daniel Bristot de Oliveira 2021-06-22 1464 if (osnoise_data.timerlat_tracer) {
a955d7eac1779b Daniel Bristot de Oliveira 2021-06-22 1465 snprintf(comm, 24, "timerlat/%d", cpu);
a955d7eac1779b Daniel Bristot de Oliveira 2021-06-22 1466 main = timerlat_main;
a955d7eac1779b Daniel Bristot de Oliveira 2021-06-22 1467 } else {
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1468 snprintf(comm, 24, "osnoise/%d", cpu);
a955d7eac1779b Daniel Bristot de Oliveira 2021-06-22 1469 }
a955d7eac1779b Daniel Bristot de Oliveira 2021-06-22 1470 #else
a955d7eac1779b Daniel Bristot de Oliveira 2021-06-22 @1471 snprintf(comm, 24, "osnoise/%d", cpu);
a955d7eac1779b Daniel Bristot de Oliveira 2021-06-22 1472 #endif
a955d7eac1779b Daniel Bristot de Oliveira 2021-06-22 1473 kthread = kthread_create_on_cpu(main, NULL, cpu, comm);
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1474
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1475 if (IS_ERR(kthread)) {
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1476 pr_err(BANNER "could not start sampling thread\n");
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1477 stop_per_cpu_kthreads();
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1478 return -ENOMEM;
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1479 }
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1480
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1481 per_cpu(per_cpu_osnoise_var, cpu).kthread = kthread;
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1482 wake_up_process(kthread);
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1483
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1484 return 0;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1485 }
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1486
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1487 /*
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1488 * start_per_cpu_kthread - Kick off per-cpu osnoise sampling kthreads
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1489 *
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1490 * This starts the kernel thread that will look for osnoise on many
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1491 * cpus.
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1492 */
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1493 static int start_per_cpu_kthreads(struct trace_array *tr)
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1494 {
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1495 struct cpumask *current_mask = &save_cpumask;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1496 int retval;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1497 int cpu;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1498
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1499 get_online_cpus();
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1500 /*
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1501 * Run only on CPUs in which trace and osnoise are allowed to run.
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1502 */
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1503 cpumask_and(current_mask, tr->tracing_cpumask, &osnoise_cpumask);
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1504 /*
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1505 * And the CPU is online.
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1506 */
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1507 cpumask_and(current_mask, cpu_online_mask, current_mask);
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1508
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1509 for_each_possible_cpu(cpu)
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1510 per_cpu(per_cpu_osnoise_var, cpu).kthread = NULL;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1511
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1512 for_each_cpu(cpu, current_mask) {
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1513 retval = start_kthread(cpu);
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1514 if (retval) {
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1515 stop_per_cpu_kthreads();
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1516 return retval;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1517 }
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1518 }
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1519
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1520 put_online_cpus();
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1521
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1522 return 0;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1523 }
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1524
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1525 #ifdef CONFIG_HOTPLUG_CPU
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1526 static void osnoise_hotplug_workfn(struct work_struct *dummy)
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1527 {
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1528 struct trace_array *tr = osnoise_trace;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1529 unsigned int cpu = smp_processor_id();
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1530
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1531
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1532 mutex_lock(&trace_types_lock);
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1533
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1534 if (!osnoise_busy)
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1535 goto out_unlock_trace;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1536
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1537 mutex_lock(&interface_lock);
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1538 get_online_cpus();
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1539
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1540 if (!cpumask_test_cpu(cpu, &osnoise_cpumask))
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1541 goto out_unlock;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1542
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1543 if (!cpumask_test_cpu(cpu, tr->tracing_cpumask))
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1544 goto out_unlock;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1545
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1546 start_kthread(cpu);
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1547
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1548 out_unlock:
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1549 put_online_cpus();
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1550 mutex_unlock(&interface_lock);
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1551 out_unlock_trace:
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1552 mutex_unlock(&trace_types_lock);
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1553 }
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1554
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1555 static DECLARE_WORK(osnoise_hotplug_work, osnoise_hotplug_workfn);
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1556
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1557 /*
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1558 * osnoise_cpu_init - CPU hotplug online callback function
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1559 */
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1560 static int osnoise_cpu_init(unsigned int cpu)
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1561 {
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1562 schedule_work_on(cpu, &osnoise_hotplug_work);
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1563 return 0;
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1564 }
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1565
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1566 /*
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1567 * osnoise_cpu_die - CPU hotplug offline callback function
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1568 */
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1569 static int osnoise_cpu_die(unsigned int cpu)
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1570 {
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1571 stop_kthread(cpu);
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1572 return 0;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1573 }
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1574
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1575 static void osnoise_init_hotplug_support(void)
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1576 {
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1577 int ret;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1578
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1579 ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "trace/osnoise:online",
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1580 osnoise_cpu_init, osnoise_cpu_die);
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1581 if (ret < 0)
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1582 pr_warn(BANNER "Error to init cpu hotplug support\n");
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1583
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1584 return;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1585 }
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1586 #else /* CONFIG_HOTPLUG_CPU */
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1587 static void osnoise_init_hotplug_support(void)
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1588 {
498627b4ac8578 Daniel Bristot de Oliveira 2021-06-28 1589 return;
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1590 }
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1591 #endif /* CONFIG_HOTPLUG_CPU */
c8895e271f7994 Daniel Bristot de Oliveira 2021-06-22 1592
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1593 /*
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1594 * osnoise_cpus_read - Read function for reading the "cpus" file
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1595 * @filp: The active open file structure
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1596 * @ubuf: The userspace provided buffer to read value into
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1597 * @cnt: The maximum number of bytes to read
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1598 * @ppos: The current "file" position
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1599 *
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1600 * Prints the "cpus" output into the user-provided buffer.
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1601 */
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1602 static ssize_t
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1603 osnoise_cpus_read(struct file *filp, char __user *ubuf, size_t count,
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1604 loff_t *ppos)
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1605 {
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1606 char *mask_str;
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1607 int len;
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1608
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1609 mutex_lock(&interface_lock);
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1610
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 @1611 len = snprintf(NULL, 0, "%*pbl\n", cpumask_pr_args(&osnoise_cpumask)) + 1;
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1612 mask_str = kmalloc(len, GFP_KERNEL);
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1613 if (!mask_str) {
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1614 count = -ENOMEM;
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1615 goto out_unlock;
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1616 }
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1617
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1618 len = snprintf(mask_str, len, "%*pbl\n", cpumask_pr_args(&osnoise_cpumask));
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1619 if (len >= count) {
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1620 count = -EINVAL;
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1621 goto out_free;
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1622 }
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1623
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1624 count = simple_read_from_buffer(ubuf, count, ppos, mask_str, len);
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1625
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1626 out_free:
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1627 kfree(mask_str);
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1628 out_unlock:
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1629 mutex_unlock(&interface_lock);
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1630
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1631 return count;
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1632 }
bce29ac9ce0bb0 Daniel Bristot de Oliveira 2021-06-22 1633
:::::: The code at line 1471 was first introduced by commit
:::::: a955d7eac1779b437ceb24fc352026a2cbcec140 trace: Add timerlat tracer
:::::: TO: Daniel Bristot de Oliveira <bristot@redhat.com>
:::::: CC: Steven Rostedt (VMware) <rostedt@goodmis.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-01-09 17:39 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-09 17:39 kernel/trace/trace_osnoise.c:1471:2: warning: %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint] kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2021-08-20 17:11 kernel test robot
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.