* [PATCH] firmware: ti_sci: simplify resource allocation
@ 2026-04-30 22:11 Rosen Penev
2026-05-03 15:17 ` kernel test robot
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Rosen Penev @ 2026-04-30 22:11 UTC (permalink / raw)
To: linux-kernel
Cc: Nishanth Menon, Tero Kristo, Santosh Shilimkar, Kees Cook,
Gustavo A. R. Silva,
moderated list:TEXAS INSTRUMENTS' SYSTEM CONTROL INTERFACE
(TI...),
linux-hardening@vger.kernel.org (open list:KERNEL HARDENING (not
covered by other areas):Keyword:b__counted_by(_le|_be)?
Use a flexible array member to combine allocations.
Add __counted_by for extra runtime analysis.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/firmware/ti_sci.c | 7 +------
include/linux/soc/ti/ti_sci_protocol.h | 2 +-
2 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
index e027a2bd8f26..04d99c1fafa1 100644
--- a/drivers/firmware/ti_sci.c
+++ b/drivers/firmware/ti_sci.c
@@ -3574,16 +3574,11 @@ devm_ti_sci_get_resource_sets(const struct ti_sci_handle *handle,
bool valid_set = false;
int i, ret, res_count;
- res = devm_kzalloc(dev, sizeof(*res), GFP_KERNEL);
+ res = devm_kzalloc(dev, struct_size(res, desc, sets), GFP_KERNEL);
if (!res)
return ERR_PTR(-ENOMEM);
res->sets = sets;
- res->desc = devm_kcalloc(dev, res->sets, sizeof(*res->desc),
- GFP_KERNEL);
- if (!res->desc)
- return ERR_PTR(-ENOMEM);
-
for (i = 0; i < res->sets; i++) {
ret = handle->ops.rm_core_ops.get_range(handle, dev_id,
sub_types[i],
diff --git a/include/linux/soc/ti/ti_sci_protocol.h b/include/linux/soc/ti/ti_sci_protocol.h
index fd104b666836..7632bb11c862 100644
--- a/include/linux/soc/ti/ti_sci_protocol.h
+++ b/include/linux/soc/ti/ti_sci_protocol.h
@@ -599,7 +599,7 @@ struct ti_sci_handle {
struct ti_sci_resource {
u16 sets;
raw_spinlock_t lock;
- struct ti_sci_resource_desc *desc;
+ struct ti_sci_resource_desc desc[] __counted_by(sets);
};
#if IS_ENABLED(CONFIG_TI_SCI_PROTOCOL)
--
2.54.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] firmware: ti_sci: simplify resource allocation
2026-04-30 22:11 [PATCH] firmware: ti_sci: simplify resource allocation Rosen Penev
@ 2026-05-03 15:17 ` kernel test robot
2026-05-03 15:42 ` kernel test robot
2026-09-03 17:47 ` Nishanth Menon
2 siblings, 0 replies; 7+ messages in thread
From: kernel test robot @ 2026-05-03 15:17 UTC (permalink / raw)
To: Rosen Penev, linux-kernel; +Cc: llvm, oe-kbuild-all
Hi Rosen,
kernel test robot noticed the following build errors:
[auto build test ERROR on linus/master]
[also build test ERROR on v7.1-rc1 next-20260430]
[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/Rosen-Penev/firmware-ti_sci-simplify-resource-allocation/20260502-175729
base: linus/master
patch link: https://lore.kernel.org/r/20260430221123.79947-1-rosenp%40gmail.com
patch subject: [PATCH] firmware: ti_sci: simplify resource allocation
config: arm64-allmodconfig (https://download.01.org/0day-ci/archive/20260503/202605032340.fMCE9leQ-lkp@intel.com/config)
compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260503/202605032340.fMCE9leQ-lkp@intel.com/reproduce)
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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202605032340.fMCE9leQ-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
>> drivers/dma/ti/k3-udma.c:4689:15: error: array type 'struct ti_sci_resource_desc[]' is not assignable
4689 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
| ~~~~~~~~~~~~ ^
>> drivers/dma/ti/k3-udma.c:4690:15: warning: address of array 'irq_res.desc' will always evaluate to 'true' [-Wpointer-bool-conversion]
4690 | if (!irq_res.desc)
| ~~~~~~~~~^~~~
drivers/dma/ti/k3-udma.c:4881:15: error: array type 'struct ti_sci_resource_desc[]' is not assignable
4881 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
| ~~~~~~~~~~~~ ^
drivers/dma/ti/k3-udma.c:4882:15: warning: address of array 'irq_res.desc' will always evaluate to 'true' [-Wpointer-bool-conversion]
4882 | if (!irq_res.desc)
| ~~~~~~~~~^~~~
drivers/dma/ti/k3-udma.c:5083:15: error: array type 'struct ti_sci_resource_desc[]' is not assignable
5083 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
| ~~~~~~~~~~~~ ^
drivers/dma/ti/k3-udma.c:5084:15: warning: address of array 'irq_res.desc' will always evaluate to 'true' [-Wpointer-bool-conversion]
5084 | if (!irq_res.desc)
| ~~~~~~~~~^~~~
3 warnings and 3 errors generated.
vim +4689 drivers/dma/ti/k3-udma.c
017794739702d4 Peter Ujfalusi 2020-12-08 4582
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4583 static int udma_setup_resources(struct udma_dev *ud)
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4584 {
017794739702d4 Peter Ujfalusi 2020-12-08 4585 int ret, i, j;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4586 struct device *dev = ud->dev;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4587 struct ti_sci_resource *rm_res, irq_res;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4588 struct udma_tisci_rm *tisci_rm = &ud->tisci_rm;
017794739702d4 Peter Ujfalusi 2020-12-08 4589 u32 cap3;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4590
daf4ad0499aa4f Peter Ujfalusi 2020-07-17 4591 /* Set up the throughput level start indexes */
017794739702d4 Peter Ujfalusi 2020-12-08 4592 cap3 = udma_read(ud->mmrs[MMR_GCFG], 0x2c);
daf4ad0499aa4f Peter Ujfalusi 2020-07-17 4593 if (of_device_is_compatible(dev->of_node,
daf4ad0499aa4f Peter Ujfalusi 2020-07-17 4594 "ti,am654-navss-main-udmap")) {
8844898028d412 Peter Ujfalusi 2020-12-08 4595 ud->tchan_tpl.levels = 2;
8844898028d412 Peter Ujfalusi 2020-12-08 4596 ud->tchan_tpl.start_idx[0] = 8;
daf4ad0499aa4f Peter Ujfalusi 2020-07-17 4597 } else if (of_device_is_compatible(dev->of_node,
daf4ad0499aa4f Peter Ujfalusi 2020-07-17 4598 "ti,am654-navss-mcu-udmap")) {
8844898028d412 Peter Ujfalusi 2020-12-08 4599 ud->tchan_tpl.levels = 2;
8844898028d412 Peter Ujfalusi 2020-12-08 4600 ud->tchan_tpl.start_idx[0] = 2;
daf4ad0499aa4f Peter Ujfalusi 2020-07-17 4601 } else if (UDMA_CAP3_UCHAN_CNT(cap3)) {
8844898028d412 Peter Ujfalusi 2020-12-08 4602 ud->tchan_tpl.levels = 3;
8844898028d412 Peter Ujfalusi 2020-12-08 4603 ud->tchan_tpl.start_idx[1] = UDMA_CAP3_UCHAN_CNT(cap3);
8844898028d412 Peter Ujfalusi 2020-12-08 4604 ud->tchan_tpl.start_idx[0] = UDMA_CAP3_HCHAN_CNT(cap3);
daf4ad0499aa4f Peter Ujfalusi 2020-07-17 4605 } else if (UDMA_CAP3_HCHAN_CNT(cap3)) {
8844898028d412 Peter Ujfalusi 2020-12-08 4606 ud->tchan_tpl.levels = 2;
8844898028d412 Peter Ujfalusi 2020-12-08 4607 ud->tchan_tpl.start_idx[0] = UDMA_CAP3_HCHAN_CNT(cap3);
daf4ad0499aa4f Peter Ujfalusi 2020-07-17 4608 } else {
8844898028d412 Peter Ujfalusi 2020-12-08 4609 ud->tchan_tpl.levels = 1;
daf4ad0499aa4f Peter Ujfalusi 2020-07-17 4610 }
daf4ad0499aa4f Peter Ujfalusi 2020-07-17 4611
8844898028d412 Peter Ujfalusi 2020-12-08 4612 ud->rchan_tpl.levels = ud->tchan_tpl.levels;
8844898028d412 Peter Ujfalusi 2020-12-08 4613 ud->rchan_tpl.start_idx[0] = ud->tchan_tpl.start_idx[0];
8844898028d412 Peter Ujfalusi 2020-12-08 4614 ud->rchan_tpl.start_idx[1] = ud->tchan_tpl.start_idx[1];
8844898028d412 Peter Ujfalusi 2020-12-08 4615
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4616 ud->tchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->tchan_cnt),
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4617 sizeof(unsigned long), GFP_KERNEL);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4618 ud->tchans = devm_kcalloc(dev, ud->tchan_cnt, sizeof(*ud->tchans),
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4619 GFP_KERNEL);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4620 ud->rchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->rchan_cnt),
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4621 sizeof(unsigned long), GFP_KERNEL);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4622 ud->rchans = devm_kcalloc(dev, ud->rchan_cnt, sizeof(*ud->rchans),
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4623 GFP_KERNEL);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4624 ud->rflow_gp_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->rflow_cnt),
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4625 sizeof(unsigned long),
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4626 GFP_KERNEL);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4627 ud->rflow_gp_map_allocated = devm_kcalloc(dev,
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4628 BITS_TO_LONGS(ud->rflow_cnt),
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4629 sizeof(unsigned long),
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4630 GFP_KERNEL);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4631 ud->rflow_in_use = devm_kcalloc(dev, BITS_TO_LONGS(ud->rflow_cnt),
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4632 sizeof(unsigned long),
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4633 GFP_KERNEL);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4634 ud->rflows = devm_kcalloc(dev, ud->rflow_cnt, sizeof(*ud->rflows),
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4635 GFP_KERNEL);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4636
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4637 if (!ud->tchan_map || !ud->rchan_map || !ud->rflow_gp_map ||
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4638 !ud->rflow_gp_map_allocated || !ud->tchans || !ud->rchans ||
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4639 !ud->rflows || !ud->rflow_in_use)
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4640 return -ENOMEM;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4641
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4642 /*
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4643 * RX flows with the same Ids as RX channels are reserved to be used
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4644 * as default flows if remote HW can't generate flow_ids. Those
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4645 * RX flows can be requested only explicitly by id.
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4646 */
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4647 bitmap_set(ud->rflow_gp_map_allocated, 0, ud->rchan_cnt);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4648
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4649 /* by default no GP rflows are assigned to Linux */
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4650 bitmap_set(ud->rflow_gp_map, 0, ud->rflow_cnt);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4651
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4652 /* Get resource ranges from tisci */
017794739702d4 Peter Ujfalusi 2020-12-08 4653 for (i = 0; i < RM_RANGE_LAST; i++) {
d2abc982333c02 Peter Ujfalusi 2020-12-08 4654 if (i == RM_RANGE_BCHAN || i == RM_RANGE_TFLOW)
017794739702d4 Peter Ujfalusi 2020-12-08 4655 continue;
017794739702d4 Peter Ujfalusi 2020-12-08 4656
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4657 tisci_rm->rm_ranges[i] =
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4658 devm_ti_sci_get_of_resource(tisci_rm->tisci, dev,
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4659 tisci_rm->tisci_dev_id,
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4660 (char *)range_names[i]);
017794739702d4 Peter Ujfalusi 2020-12-08 4661 }
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4662
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4663 /* tchan ranges */
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4664 rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4665 if (IS_ERR(rm_res)) {
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4666 bitmap_zero(ud->tchan_map, ud->tchan_cnt);
80936d68665be8 Vignesh Raghavendra 2021-12-09 4667 irq_res.sets = 1;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4668 } else {
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4669 bitmap_fill(ud->tchan_map, ud->tchan_cnt);
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4670 for (i = 0; i < rm_res->sets; i++)
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4671 udma_mark_resource_ranges(ud, ud->tchan_map,
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4672 &rm_res->desc[i], "tchan");
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4673 irq_res.sets = rm_res->sets;
80936d68665be8 Vignesh Raghavendra 2021-12-09 4674 }
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4675
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4676 /* rchan and matching default flow ranges */
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4677 rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4678 if (IS_ERR(rm_res)) {
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4679 bitmap_zero(ud->rchan_map, ud->rchan_cnt);
80936d68665be8 Vignesh Raghavendra 2021-12-09 4680 irq_res.sets++;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4681 } else {
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4682 bitmap_fill(ud->rchan_map, ud->rchan_cnt);
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4683 for (i = 0; i < rm_res->sets; i++)
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4684 udma_mark_resource_ranges(ud, ud->rchan_map,
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4685 &rm_res->desc[i], "rchan");
80936d68665be8 Vignesh Raghavendra 2021-12-09 4686 irq_res.sets += rm_res->sets;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4687 }
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4688
bf4afc53b77aea Linus Torvalds 2026-02-21 @4689 irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
80936d68665be8 Vignesh Raghavendra 2021-12-09 @4690 if (!irq_res.desc)
80936d68665be8 Vignesh Raghavendra 2021-12-09 4691 return -ENOMEM;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4692 rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
80936d68665be8 Vignesh Raghavendra 2021-12-09 4693 if (IS_ERR(rm_res)) {
80936d68665be8 Vignesh Raghavendra 2021-12-09 4694 irq_res.desc[0].start = 0;
80936d68665be8 Vignesh Raghavendra 2021-12-09 4695 irq_res.desc[0].num = ud->tchan_cnt;
80936d68665be8 Vignesh Raghavendra 2021-12-09 4696 i = 1;
80936d68665be8 Vignesh Raghavendra 2021-12-09 4697 } else {
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4698 for (i = 0; i < rm_res->sets; i++) {
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4699 irq_res.desc[i].start = rm_res->desc[i].start;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4700 irq_res.desc[i].num = rm_res->desc[i].num;
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4701 irq_res.desc[i].start_sec = rm_res->desc[i].start_sec;
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4702 irq_res.desc[i].num_sec = rm_res->desc[i].num_sec;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4703 }
80936d68665be8 Vignesh Raghavendra 2021-12-09 4704 }
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4705 rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
80936d68665be8 Vignesh Raghavendra 2021-12-09 4706 if (IS_ERR(rm_res)) {
80936d68665be8 Vignesh Raghavendra 2021-12-09 4707 irq_res.desc[i].start = 0;
80936d68665be8 Vignesh Raghavendra 2021-12-09 4708 irq_res.desc[i].num = ud->rchan_cnt;
80936d68665be8 Vignesh Raghavendra 2021-12-09 4709 } else {
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4710 for (j = 0; j < rm_res->sets; j++, i++) {
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4711 if (rm_res->desc[j].num) {
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4712 irq_res.desc[i].start = rm_res->desc[j].start +
017794739702d4 Peter Ujfalusi 2020-12-08 4713 ud->soc_data->oes.udma_rchan;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4714 irq_res.desc[i].num = rm_res->desc[j].num;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4715 }
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4716 if (rm_res->desc[j].num_sec) {
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4717 irq_res.desc[i].start_sec = rm_res->desc[j].start_sec +
017794739702d4 Peter Ujfalusi 2020-12-08 4718 ud->soc_data->oes.udma_rchan;
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4719 irq_res.desc[i].num_sec = rm_res->desc[j].num_sec;
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4720 }
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4721 }
80936d68665be8 Vignesh Raghavendra 2021-12-09 4722 }
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4723 ret = ti_sci_inta_msi_domain_alloc_irqs(ud->dev, &irq_res);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4724 kfree(irq_res.desc);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4725 if (ret) {
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4726 dev_err(ud->dev, "Failed to allocate MSI interrupts\n");
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4727 return ret;
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4728 }
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4729
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4730 /* GP rflow ranges */
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4731 rm_res = tisci_rm->rm_ranges[RM_RANGE_RFLOW];
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4732 if (IS_ERR(rm_res)) {
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4733 /* all gp flows are assigned exclusively to Linux */
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4734 bitmap_clear(ud->rflow_gp_map, ud->rchan_cnt,
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4735 ud->rflow_cnt - ud->rchan_cnt);
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4736 } else {
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4737 for (i = 0; i < rm_res->sets; i++)
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4738 udma_mark_resource_ranges(ud, ud->rflow_gp_map,
1609c15a20b8e0 Peter Ujfalusi 2020-12-08 4739 &rm_res->desc[i], "gp-rflow");
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4740 }
25dcb5dd7b7ce5 Peter Ujfalusi 2019-12-23 4741
017794739702d4 Peter Ujfalusi 2020-12-08 4742 return 0;
017794739702d4 Peter Ujfalusi 2020-12-08 4743 }
017794739702d4 Peter Ujfalusi 2020-12-08 4744
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] firmware: ti_sci: simplify resource allocation
2026-04-30 22:11 [PATCH] firmware: ti_sci: simplify resource allocation Rosen Penev
2026-05-03 15:17 ` kernel test robot
@ 2026-05-03 15:42 ` kernel test robot
2026-09-03 17:47 ` Nishanth Menon
2 siblings, 0 replies; 7+ messages in thread
From: kernel test robot @ 2026-05-03 15:42 UTC (permalink / raw)
To: Rosen Penev, linux-kernel; +Cc: oe-kbuild-all
Hi Rosen,
kernel test robot noticed the following build errors:
[auto build test ERROR on linus/master]
[also build test ERROR on v7.1-rc1 next-20260430]
[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/Rosen-Penev/firmware-ti_sci-simplify-resource-allocation/20260502-175729
base: linus/master
patch link: https://lore.kernel.org/r/20260430221123.79947-1-rosenp%40gmail.com
patch subject: [PATCH] firmware: ti_sci: simplify resource allocation
config: arm64-defconfig (https://download.01.org/0day-ci/archive/20260503/202605032309.O6PkOirl-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 15.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260503/202605032309.O6PkOirl-lkp@intel.com/reproduce)
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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202605032309.O6PkOirl-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/dma/ti/k3-udma.c: In function 'udma_setup_resources':
>> drivers/dma/ti/k3-udma.c:4689:22: error: invalid use of flexible array member
4689 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
| ^
drivers/dma/ti/k3-udma.c: In function 'bcdma_setup_resources':
drivers/dma/ti/k3-udma.c:4881:22: error: invalid use of flexible array member
4881 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
| ^
drivers/dma/ti/k3-udma.c: In function 'pktdma_setup_resources':
drivers/dma/ti/k3-udma.c:5083:22: error: invalid use of flexible array member
5083 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
| ^
vim +4689 drivers/dma/ti/k3-udma.c
017794739702d44 Peter Ujfalusi 2020-12-08 4582
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4583 static int udma_setup_resources(struct udma_dev *ud)
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4584 {
017794739702d44 Peter Ujfalusi 2020-12-08 4585 int ret, i, j;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4586 struct device *dev = ud->dev;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4587 struct ti_sci_resource *rm_res, irq_res;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4588 struct udma_tisci_rm *tisci_rm = &ud->tisci_rm;
017794739702d44 Peter Ujfalusi 2020-12-08 4589 u32 cap3;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4590
daf4ad0499aa4f7 Peter Ujfalusi 2020-07-17 4591 /* Set up the throughput level start indexes */
017794739702d44 Peter Ujfalusi 2020-12-08 4592 cap3 = udma_read(ud->mmrs[MMR_GCFG], 0x2c);
daf4ad0499aa4f7 Peter Ujfalusi 2020-07-17 4593 if (of_device_is_compatible(dev->of_node,
daf4ad0499aa4f7 Peter Ujfalusi 2020-07-17 4594 "ti,am654-navss-main-udmap")) {
8844898028d4127 Peter Ujfalusi 2020-12-08 4595 ud->tchan_tpl.levels = 2;
8844898028d4127 Peter Ujfalusi 2020-12-08 4596 ud->tchan_tpl.start_idx[0] = 8;
daf4ad0499aa4f7 Peter Ujfalusi 2020-07-17 4597 } else if (of_device_is_compatible(dev->of_node,
daf4ad0499aa4f7 Peter Ujfalusi 2020-07-17 4598 "ti,am654-navss-mcu-udmap")) {
8844898028d4127 Peter Ujfalusi 2020-12-08 4599 ud->tchan_tpl.levels = 2;
8844898028d4127 Peter Ujfalusi 2020-12-08 4600 ud->tchan_tpl.start_idx[0] = 2;
daf4ad0499aa4f7 Peter Ujfalusi 2020-07-17 4601 } else if (UDMA_CAP3_UCHAN_CNT(cap3)) {
8844898028d4127 Peter Ujfalusi 2020-12-08 4602 ud->tchan_tpl.levels = 3;
8844898028d4127 Peter Ujfalusi 2020-12-08 4603 ud->tchan_tpl.start_idx[1] = UDMA_CAP3_UCHAN_CNT(cap3);
8844898028d4127 Peter Ujfalusi 2020-12-08 4604 ud->tchan_tpl.start_idx[0] = UDMA_CAP3_HCHAN_CNT(cap3);
daf4ad0499aa4f7 Peter Ujfalusi 2020-07-17 4605 } else if (UDMA_CAP3_HCHAN_CNT(cap3)) {
8844898028d4127 Peter Ujfalusi 2020-12-08 4606 ud->tchan_tpl.levels = 2;
8844898028d4127 Peter Ujfalusi 2020-12-08 4607 ud->tchan_tpl.start_idx[0] = UDMA_CAP3_HCHAN_CNT(cap3);
daf4ad0499aa4f7 Peter Ujfalusi 2020-07-17 4608 } else {
8844898028d4127 Peter Ujfalusi 2020-12-08 4609 ud->tchan_tpl.levels = 1;
daf4ad0499aa4f7 Peter Ujfalusi 2020-07-17 4610 }
daf4ad0499aa4f7 Peter Ujfalusi 2020-07-17 4611
8844898028d4127 Peter Ujfalusi 2020-12-08 4612 ud->rchan_tpl.levels = ud->tchan_tpl.levels;
8844898028d4127 Peter Ujfalusi 2020-12-08 4613 ud->rchan_tpl.start_idx[0] = ud->tchan_tpl.start_idx[0];
8844898028d4127 Peter Ujfalusi 2020-12-08 4614 ud->rchan_tpl.start_idx[1] = ud->tchan_tpl.start_idx[1];
8844898028d4127 Peter Ujfalusi 2020-12-08 4615
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4616 ud->tchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->tchan_cnt),
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4617 sizeof(unsigned long), GFP_KERNEL);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4618 ud->tchans = devm_kcalloc(dev, ud->tchan_cnt, sizeof(*ud->tchans),
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4619 GFP_KERNEL);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4620 ud->rchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->rchan_cnt),
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4621 sizeof(unsigned long), GFP_KERNEL);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4622 ud->rchans = devm_kcalloc(dev, ud->rchan_cnt, sizeof(*ud->rchans),
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4623 GFP_KERNEL);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4624 ud->rflow_gp_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->rflow_cnt),
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4625 sizeof(unsigned long),
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4626 GFP_KERNEL);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4627 ud->rflow_gp_map_allocated = devm_kcalloc(dev,
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4628 BITS_TO_LONGS(ud->rflow_cnt),
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4629 sizeof(unsigned long),
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4630 GFP_KERNEL);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4631 ud->rflow_in_use = devm_kcalloc(dev, BITS_TO_LONGS(ud->rflow_cnt),
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4632 sizeof(unsigned long),
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4633 GFP_KERNEL);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4634 ud->rflows = devm_kcalloc(dev, ud->rflow_cnt, sizeof(*ud->rflows),
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4635 GFP_KERNEL);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4636
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4637 if (!ud->tchan_map || !ud->rchan_map || !ud->rflow_gp_map ||
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4638 !ud->rflow_gp_map_allocated || !ud->tchans || !ud->rchans ||
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4639 !ud->rflows || !ud->rflow_in_use)
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4640 return -ENOMEM;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4641
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4642 /*
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4643 * RX flows with the same Ids as RX channels are reserved to be used
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4644 * as default flows if remote HW can't generate flow_ids. Those
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4645 * RX flows can be requested only explicitly by id.
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4646 */
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4647 bitmap_set(ud->rflow_gp_map_allocated, 0, ud->rchan_cnt);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4648
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4649 /* by default no GP rflows are assigned to Linux */
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4650 bitmap_set(ud->rflow_gp_map, 0, ud->rflow_cnt);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4651
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4652 /* Get resource ranges from tisci */
017794739702d44 Peter Ujfalusi 2020-12-08 4653 for (i = 0; i < RM_RANGE_LAST; i++) {
d2abc982333c02f Peter Ujfalusi 2020-12-08 4654 if (i == RM_RANGE_BCHAN || i == RM_RANGE_TFLOW)
017794739702d44 Peter Ujfalusi 2020-12-08 4655 continue;
017794739702d44 Peter Ujfalusi 2020-12-08 4656
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4657 tisci_rm->rm_ranges[i] =
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4658 devm_ti_sci_get_of_resource(tisci_rm->tisci, dev,
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4659 tisci_rm->tisci_dev_id,
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4660 (char *)range_names[i]);
017794739702d44 Peter Ujfalusi 2020-12-08 4661 }
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4662
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4663 /* tchan ranges */
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4664 rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4665 if (IS_ERR(rm_res)) {
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4666 bitmap_zero(ud->tchan_map, ud->tchan_cnt);
80936d68665be88 Vignesh Raghavendra 2021-12-09 4667 irq_res.sets = 1;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4668 } else {
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4669 bitmap_fill(ud->tchan_map, ud->tchan_cnt);
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4670 for (i = 0; i < rm_res->sets; i++)
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4671 udma_mark_resource_ranges(ud, ud->tchan_map,
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4672 &rm_res->desc[i], "tchan");
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4673 irq_res.sets = rm_res->sets;
80936d68665be88 Vignesh Raghavendra 2021-12-09 4674 }
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4675
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4676 /* rchan and matching default flow ranges */
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4677 rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4678 if (IS_ERR(rm_res)) {
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4679 bitmap_zero(ud->rchan_map, ud->rchan_cnt);
80936d68665be88 Vignesh Raghavendra 2021-12-09 4680 irq_res.sets++;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4681 } else {
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4682 bitmap_fill(ud->rchan_map, ud->rchan_cnt);
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4683 for (i = 0; i < rm_res->sets; i++)
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4684 udma_mark_resource_ranges(ud, ud->rchan_map,
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4685 &rm_res->desc[i], "rchan");
80936d68665be88 Vignesh Raghavendra 2021-12-09 4686 irq_res.sets += rm_res->sets;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4687 }
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4688
bf4afc53b77aeaa Linus Torvalds 2026-02-21 @4689 irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
80936d68665be88 Vignesh Raghavendra 2021-12-09 4690 if (!irq_res.desc)
80936d68665be88 Vignesh Raghavendra 2021-12-09 4691 return -ENOMEM;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4692 rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN];
80936d68665be88 Vignesh Raghavendra 2021-12-09 4693 if (IS_ERR(rm_res)) {
80936d68665be88 Vignesh Raghavendra 2021-12-09 4694 irq_res.desc[0].start = 0;
80936d68665be88 Vignesh Raghavendra 2021-12-09 4695 irq_res.desc[0].num = ud->tchan_cnt;
80936d68665be88 Vignesh Raghavendra 2021-12-09 4696 i = 1;
80936d68665be88 Vignesh Raghavendra 2021-12-09 4697 } else {
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4698 for (i = 0; i < rm_res->sets; i++) {
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4699 irq_res.desc[i].start = rm_res->desc[i].start;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4700 irq_res.desc[i].num = rm_res->desc[i].num;
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4701 irq_res.desc[i].start_sec = rm_res->desc[i].start_sec;
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4702 irq_res.desc[i].num_sec = rm_res->desc[i].num_sec;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4703 }
80936d68665be88 Vignesh Raghavendra 2021-12-09 4704 }
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4705 rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN];
80936d68665be88 Vignesh Raghavendra 2021-12-09 4706 if (IS_ERR(rm_res)) {
80936d68665be88 Vignesh Raghavendra 2021-12-09 4707 irq_res.desc[i].start = 0;
80936d68665be88 Vignesh Raghavendra 2021-12-09 4708 irq_res.desc[i].num = ud->rchan_cnt;
80936d68665be88 Vignesh Raghavendra 2021-12-09 4709 } else {
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4710 for (j = 0; j < rm_res->sets; j++, i++) {
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4711 if (rm_res->desc[j].num) {
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4712 irq_res.desc[i].start = rm_res->desc[j].start +
017794739702d44 Peter Ujfalusi 2020-12-08 4713 ud->soc_data->oes.udma_rchan;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4714 irq_res.desc[i].num = rm_res->desc[j].num;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4715 }
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4716 if (rm_res->desc[j].num_sec) {
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4717 irq_res.desc[i].start_sec = rm_res->desc[j].start_sec +
017794739702d44 Peter Ujfalusi 2020-12-08 4718 ud->soc_data->oes.udma_rchan;
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4719 irq_res.desc[i].num_sec = rm_res->desc[j].num_sec;
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4720 }
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4721 }
80936d68665be88 Vignesh Raghavendra 2021-12-09 4722 }
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4723 ret = ti_sci_inta_msi_domain_alloc_irqs(ud->dev, &irq_res);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4724 kfree(irq_res.desc);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4725 if (ret) {
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4726 dev_err(ud->dev, "Failed to allocate MSI interrupts\n");
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4727 return ret;
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4728 }
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4729
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4730 /* GP rflow ranges */
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4731 rm_res = tisci_rm->rm_ranges[RM_RANGE_RFLOW];
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4732 if (IS_ERR(rm_res)) {
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4733 /* all gp flows are assigned exclusively to Linux */
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4734 bitmap_clear(ud->rflow_gp_map, ud->rchan_cnt,
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4735 ud->rflow_cnt - ud->rchan_cnt);
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4736 } else {
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4737 for (i = 0; i < rm_res->sets; i++)
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4738 udma_mark_resource_ranges(ud, ud->rflow_gp_map,
1609c15a20b8e0c Peter Ujfalusi 2020-12-08 4739 &rm_res->desc[i], "gp-rflow");
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4740 }
25dcb5dd7b7ce55 Peter Ujfalusi 2019-12-23 4741
017794739702d44 Peter Ujfalusi 2020-12-08 4742 return 0;
017794739702d44 Peter Ujfalusi 2020-12-08 4743 }
017794739702d44 Peter Ujfalusi 2020-12-08 4744
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] firmware: ti_sci: simplify resource allocation
2026-04-30 22:11 [PATCH] firmware: ti_sci: simplify resource allocation Rosen Penev
2026-05-03 15:17 ` kernel test robot
2026-05-03 15:42 ` kernel test robot
@ 2026-09-03 17:47 ` Nishanth Menon
2026-09-03 20:34 ` Rosen Penev
2 siblings, 1 reply; 7+ messages in thread
From: Nishanth Menon @ 2026-09-03 17:47 UTC (permalink / raw)
To: Rosen Penev; +Cc: linux-kernel
On 15:11-20260430, Rosen Penev wrote:
> Use a flexible array member to combine allocations.
>
> Add __counted_by for extra runtime analysis.
>
> Signed-off-by: Rosen Penev <rosenp@gmail.com>
> ---
> drivers/firmware/ti_sci.c | 7 +------
> include/linux/soc/ti/ti_sci_protocol.h | 2 +-
> 2 files changed, 2 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
> index e027a2bd8f26..04d99c1fafa1 100644
> --- a/drivers/firmware/ti_sci.c
> +++ b/drivers/firmware/ti_sci.c
> @@ -3574,16 +3574,11 @@ devm_ti_sci_get_resource_sets(const struct ti_sci_handle *handle,
> bool valid_set = false;
> int i, ret, res_count;
>
> - res = devm_kzalloc(dev, sizeof(*res), GFP_KERNEL);
> + res = devm_kzalloc(dev, struct_size(res, desc, sets), GFP_KERNEL);
> if (!res)
> return ERR_PTR(-ENOMEM);
>
> res->sets = sets;
> - res->desc = devm_kcalloc(dev, res->sets, sizeof(*res->desc),
> - GFP_KERNEL);
> - if (!res->desc)
> - return ERR_PTR(-ENOMEM);
> -
> for (i = 0; i < res->sets; i++) {
> ret = handle->ops.rm_core_ops.get_range(handle, dev_id,
> sub_types[i],
> diff --git a/include/linux/soc/ti/ti_sci_protocol.h b/include/linux/soc/ti/ti_sci_protocol.h
> index fd104b666836..7632bb11c862 100644
> --- a/include/linux/soc/ti/ti_sci_protocol.h
> +++ b/include/linux/soc/ti/ti_sci_protocol.h
> @@ -599,7 +599,7 @@ struct ti_sci_handle {
> struct ti_sci_resource {
> u16 sets;
> raw_spinlock_t lock;
> - struct ti_sci_resource_desc *desc;
> + struct ti_sci_resource_desc desc[] __counted_by(sets);
> };
>
> #if IS_ENABLED(CONFIG_TI_SCI_PROTOCOL)
> --
> 2.54.0
>
drivers/dma/ti/k3-udma.c: In function 'udma_setup_resources':
drivers/dma/ti/k3-udma.c:4689:22: error: invalid use of flexible array member
4689 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
| ^
drivers/dma/ti/k3-udma.c:4690:13: warning: the comparison will always evaluate as 'true' for the address of 'desc' will never be NULL [-Waddress]
4690 | if (!irq_res.desc)
| ^
In file included from drivers/dma/ti/k3-udma.c:27:
./include/linux/soc/ti/ti_sci_protocol.h:602:37: note: 'desc' declared here
602 | struct ti_sci_resource_desc desc[] __counted_by(sets);
| ^~~~
drivers/dma/ti/k3-udma.c: In function 'bcdma_setup_resources':
drivers/dma/ti/k3-udma.c:4881:22: error: invalid use of flexible array member
4881 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
| ^
drivers/dma/ti/k3-udma.c:4882:13: warning: the comparison will always evaluate as 'true' for the address of 'desc' will never be NULL [-Waddress]
4882 | if (!irq_res.desc)
| ^
./include/linux/soc/ti/ti_sci_protocol.h:602:37: note: 'desc' declared here
602 | struct ti_sci_resource_desc desc[] __counted_by(sets);
| ^~~~
drivers/dma/ti/k3-udma.c: In function 'pktdma_setup_resources':
drivers/dma/ti/k3-udma.c:5083:22: error: invalid use of flexible array member
5083 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
| ^
drivers/dma/ti/k3-udma.c:5084:13: warning: the comparison will always evaluate as 'true' for the address of 'desc' will never be NULL [-Waddress]
5084 | if (!irq_res.desc)
| ^
./include/linux/soc/ti/ti_sci_protocol.h:602:37: note: 'desc' declared here
602 | struct ti_sci_resource_desc desc[] __counted_by(sets);
| ^~~~
drivers/dma/ti/k3-udma.c: At top level:
drivers/dma/ti/k3-udma.c:53:9: warning: macro "UDMA_RFLOW_DSTTAG_FLOW_ID" is not used [-Wunused-macros]
53 | #define UDMA_RFLOW_DSTTAG_FLOW_ID 2
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/dma/ti/k3-udma.c:52:9: warning: macro "UDMA_RFLOW_DSTTAG_CFG_TAG" is not used [-Wunused-macros]
52 | #define UDMA_RFLOW_DSTTAG_CFG_TAG 1
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/dma/ti/k3-udma.c:48:9: warning: macro "UDMA_RFLOW_SRCTAG_FLOW_ID" is not used [-Wunused-macros]
48 | #define UDMA_RFLOW_SRCTAG_FLOW_ID 2
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/dma/ti/k3-udma.c:51:9: warning: macro "UDMA_RFLOW_DSTTAG_NONE" is not used [-Wunused-macros]
51 | #define UDMA_RFLOW_DSTTAG_NONE 0
| ^~~~~~~~~~~~~~~~~~~~~~
drivers/dma/ti/k3-udma.c:47:9: warning: macro "UDMA_RFLOW_SRCTAG_CFG_TAG" is not used [-Wunused-macros]
47 | #define UDMA_RFLOW_SRCTAG_CFG_TAG 1
| ^~~~~~~~~~~~~~~~~~~~~~~~~
make[5]: *** [scripts/Makefile.build:290: drivers/dma/ti/k3-udma.o] Error 1
make[4]: *** [scripts/Makefile.build:551: drivers/dma/ti] Error 2
make[3]: *** [scripts/Makefile.build:551: drivers/dma] Error 2
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [scripts/Makefile.build:551: drivers] Error 2
make[1]: *** [/workdir/Makefile:2232: .] Error 2
make: *** [Makefile:248: __sub-make] Error 2
If I am not mistaken, k3-udma.c and k3-ringacc.c will be impacted. can
you check and update the patch?
Additionally, please CC LAKML.
--
Regards,
Nishanth Menon
Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3 1A34 DDB5 849D 1736 249D
https://ti.com/opensource
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] firmware: ti_sci: simplify resource allocation
2026-09-03 17:47 ` Nishanth Menon
@ 2026-09-03 20:34 ` Rosen Penev
2026-09-04 18:03 ` Nishanth Menon
0 siblings, 1 reply; 7+ messages in thread
From: Rosen Penev @ 2026-09-03 20:34 UTC (permalink / raw)
To: Nishanth Menon; +Cc: linux-kernel
On Thu, Sep 3, 2026 at 10:48 AM Nishanth Menon <nm@ti.com> wrote:
>
> On 15:11-20260430, Rosen Penev wrote:
> > Use a flexible array member to combine allocations.
> >
> > Add __counted_by for extra runtime analysis.
> >
> > Signed-off-by: Rosen Penev <rosenp@gmail.com>
> > ---
> > drivers/firmware/ti_sci.c | 7 +------
> > include/linux/soc/ti/ti_sci_protocol.h | 2 +-
> > 2 files changed, 2 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
> > index e027a2bd8f26..04d99c1fafa1 100644
> > --- a/drivers/firmware/ti_sci.c
> > +++ b/drivers/firmware/ti_sci.c
> > @@ -3574,16 +3574,11 @@ devm_ti_sci_get_resource_sets(const struct ti_sci_handle *handle,
> > bool valid_set = false;
> > int i, ret, res_count;
> >
> > - res = devm_kzalloc(dev, sizeof(*res), GFP_KERNEL);
> > + res = devm_kzalloc(dev, struct_size(res, desc, sets), GFP_KERNEL);
> > if (!res)
> > return ERR_PTR(-ENOMEM);
> >
> > res->sets = sets;
> > - res->desc = devm_kcalloc(dev, res->sets, sizeof(*res->desc),
> > - GFP_KERNEL);
> > - if (!res->desc)
> > - return ERR_PTR(-ENOMEM);
> > -
> > for (i = 0; i < res->sets; i++) {
> > ret = handle->ops.rm_core_ops.get_range(handle, dev_id,
> > sub_types[i],
> > diff --git a/include/linux/soc/ti/ti_sci_protocol.h b/include/linux/soc/ti/ti_sci_protocol.h
> > index fd104b666836..7632bb11c862 100644
> > --- a/include/linux/soc/ti/ti_sci_protocol.h
> > +++ b/include/linux/soc/ti/ti_sci_protocol.h
> > @@ -599,7 +599,7 @@ struct ti_sci_handle {
> > struct ti_sci_resource {
> > u16 sets;
> > raw_spinlock_t lock;
> > - struct ti_sci_resource_desc *desc;
> > + struct ti_sci_resource_desc desc[] __counted_by(sets);
> > };
> >
> > #if IS_ENABLED(CONFIG_TI_SCI_PROTOCOL)
> > --
> > 2.54.0
> >
>
> drivers/dma/ti/k3-udma.c: In function 'udma_setup_resources':
> drivers/dma/ti/k3-udma.c:4689:22: error: invalid use of flexible array member
> 4689 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
> | ^
> drivers/dma/ti/k3-udma.c:4690:13: warning: the comparison will always evaluate as 'true' for the address of 'desc' will never be NULL [-Waddress]
> 4690 | if (!irq_res.desc)
> | ^
> In file included from drivers/dma/ti/k3-udma.c:27:
> ./include/linux/soc/ti/ti_sci_protocol.h:602:37: note: 'desc' declared here
> 602 | struct ti_sci_resource_desc desc[] __counted_by(sets);
> | ^~~~
> drivers/dma/ti/k3-udma.c: In function 'bcdma_setup_resources':
> drivers/dma/ti/k3-udma.c:4881:22: error: invalid use of flexible array member
> 4881 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
> | ^
> drivers/dma/ti/k3-udma.c:4882:13: warning: the comparison will always evaluate as 'true' for the address of 'desc' will never be NULL [-Waddress]
> 4882 | if (!irq_res.desc)
> | ^
> ./include/linux/soc/ti/ti_sci_protocol.h:602:37: note: 'desc' declared here
> 602 | struct ti_sci_resource_desc desc[] __counted_by(sets);
> | ^~~~
> drivers/dma/ti/k3-udma.c: In function 'pktdma_setup_resources':
> drivers/dma/ti/k3-udma.c:5083:22: error: invalid use of flexible array member
> 5083 | irq_res.desc = kzalloc_objs(*irq_res.desc, irq_res.sets);
> | ^
> drivers/dma/ti/k3-udma.c:5084:13: warning: the comparison will always evaluate as 'true' for the address of 'desc' will never be NULL [-Waddress]
> 5084 | if (!irq_res.desc)
> | ^
> ./include/linux/soc/ti/ti_sci_protocol.h:602:37: note: 'desc' declared here
> 602 | struct ti_sci_resource_desc desc[] __counted_by(sets);
> | ^~~~
> drivers/dma/ti/k3-udma.c: At top level:
> drivers/dma/ti/k3-udma.c:53:9: warning: macro "UDMA_RFLOW_DSTTAG_FLOW_ID" is not used [-Wunused-macros]
> 53 | #define UDMA_RFLOW_DSTTAG_FLOW_ID 2
> | ^~~~~~~~~~~~~~~~~~~~~~~~~
> drivers/dma/ti/k3-udma.c:52:9: warning: macro "UDMA_RFLOW_DSTTAG_CFG_TAG" is not used [-Wunused-macros]
> 52 | #define UDMA_RFLOW_DSTTAG_CFG_TAG 1
> | ^~~~~~~~~~~~~~~~~~~~~~~~~
> drivers/dma/ti/k3-udma.c:48:9: warning: macro "UDMA_RFLOW_SRCTAG_FLOW_ID" is not used [-Wunused-macros]
> 48 | #define UDMA_RFLOW_SRCTAG_FLOW_ID 2
> | ^~~~~~~~~~~~~~~~~~~~~~~~~
> drivers/dma/ti/k3-udma.c:51:9: warning: macro "UDMA_RFLOW_DSTTAG_NONE" is not used [-Wunused-macros]
> 51 | #define UDMA_RFLOW_DSTTAG_NONE 0
> | ^~~~~~~~~~~~~~~~~~~~~~
> drivers/dma/ti/k3-udma.c:47:9: warning: macro "UDMA_RFLOW_SRCTAG_CFG_TAG" is not used [-Wunused-macros]
> 47 | #define UDMA_RFLOW_SRCTAG_CFG_TAG 1
> | ^~~~~~~~~~~~~~~~~~~~~~~~~
> make[5]: *** [scripts/Makefile.build:290: drivers/dma/ti/k3-udma.o] Error 1
> make[4]: *** [scripts/Makefile.build:551: drivers/dma/ti] Error 2
> make[3]: *** [scripts/Makefile.build:551: drivers/dma] Error 2
> make[3]: *** Waiting for unfinished jobs....
> make[2]: *** [scripts/Makefile.build:551: drivers] Error 2
> make[1]: *** [/workdir/Makefile:2232: .] Error 2
> make: *** [Makefile:248: __sub-make] Error 2
>
>
> If I am not mistaken, k3-udma.c and k3-ringacc.c will be impacted. can
> you check and update the patch?
Just the former.
>
>
> Additionally, please CC LAKML.
linux-arm-kernel@lists.infradead.org is already in CC.
>
> --
> Regards,
> Nishanth Menon
> Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3 1A34 DDB5 849D 1736 249D
> https://ti.com/opensource
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] firmware: ti_sci: simplify resource allocation
2026-09-03 20:34 ` Rosen Penev
@ 2026-09-04 18:03 ` Nishanth Menon
2026-09-04 18:27 ` Rosen Penev
0 siblings, 1 reply; 7+ messages in thread
From: Nishanth Menon @ 2026-09-04 18:03 UTC (permalink / raw)
To: Rosen Penev; +Cc: linux-kernel
On 13:34-20260903, Rosen Penev wrote:
[...]
> > make[5]: *** [scripts/Makefile.build:290: drivers/dma/ti/k3-udma.o] Error 1
> > make[4]: *** [scripts/Makefile.build:551: drivers/dma/ti] Error 2
> > make[3]: *** [scripts/Makefile.build:551: drivers/dma] Error 2
> > make[3]: *** Waiting for unfinished jobs....
> > make[2]: *** [scripts/Makefile.build:551: drivers] Error 2
> > make[1]: *** [/workdir/Makefile:2232: .] Error 2
> > make: *** [Makefile:248: __sub-make] Error 2
> >
> >
> > If I am not mistaken, k3-udma.c and k3-ringacc.c will be impacted. can
> > you check and update the patch?
> Just the former.
OK, I would'nt be able to apply the patch which breaks build.
--
Regards,
Nishanth Menon
Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3 1A34 DDB5 849D 1736 249D
https://ti.com/opensource
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] firmware: ti_sci: simplify resource allocation
2026-09-04 18:03 ` Nishanth Menon
@ 2026-09-04 18:27 ` Rosen Penev
0 siblings, 0 replies; 7+ messages in thread
From: Rosen Penev @ 2026-09-04 18:27 UTC (permalink / raw)
To: Nishanth Menon; +Cc: linux-kernel
On Fri, Sep 4, 2026 at 11:04 AM Nishanth Menon <nm@ti.com> wrote:
>
> On 13:34-20260903, Rosen Penev wrote:
> [...]
>
> > > make[5]: *** [scripts/Makefile.build:290: drivers/dma/ti/k3-udma.o] Error 1
> > > make[4]: *** [scripts/Makefile.build:551: drivers/dma/ti] Error 2
> > > make[3]: *** [scripts/Makefile.build:551: drivers/dma] Error 2
> > > make[3]: *** Waiting for unfinished jobs....
> > > make[2]: *** [scripts/Makefile.build:551: drivers] Error 2
> > > make[1]: *** [/workdir/Makefile:2232: .] Error 2
> > > make: *** [Makefile:248: __sub-make] Error 2
> > >
> > >
> > > If I am not mistaken, k3-udma.c and k3-ringacc.c will be impacted. can
> > > you check and update the patch?
> > Just the former.
>
> OK, I would'nt be able to apply the patch which breaks build.
There's already a v2 of this.
> --
> Regards,
> Nishanth Menon
> Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3 1A34 DDB5 849D 1736 249D
> https://ti.com/opensource
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-09-04 18:28 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-04-30 22:11 [PATCH] firmware: ti_sci: simplify resource allocation Rosen Penev
2026-05-03 15:17 ` kernel test robot
2026-05-03 15:42 ` kernel test robot
2026-09-03 17:47 ` Nishanth Menon
2026-09-03 20:34 ` Rosen Penev
2026-09-04 18:03 ` Nishanth Menon
2026-09-04 18:27 ` Rosen Penev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®