* [PATCH] Convert hartid to hart index to get scratch.
@ 2025-01-09 23:32 Chao-ying Fu
2025-01-28 12:48 ` Chao-ying Fu
2025-02-07 21:34 ` Raj Vishwanathan
0 siblings, 2 replies; 4+ messages in thread
From: Chao-ying Fu @ 2025-01-09 23:32 UTC (permalink / raw)
To: opensbi
Hartid may not be sequential, so we need to use index to get scratch.
---
lib/utils/ipi/aclint_mswi.c | 2 +-
lib/utils/timer/aclint_mtimer.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/utils/ipi/aclint_mswi.c b/lib/utils/ipi/aclint_mswi.c
index 9e55078..e22903f 100644
--- a/lib/utils/ipi/aclint_mswi.c
+++ b/lib/utils/ipi/aclint_mswi.c
@@ -87,7 +87,7 @@ int aclint_mswi_cold_init(struct aclint_mswi_data *mswi)
/* Update MSWI pointer in scratch space */
for (i = 0; i < mswi->hart_count; i++) {
- scratch = sbi_hartid_to_scratch(mswi->first_hartid + i);
+ scratch = sbi_hartindex_to_scratch(sbi_hartid_to_hartindex(mswi->first_hartid) + i);
/*
* We don't need to fail if scratch pointer is not available
* because we might be dealing with hartid of a HART disabled
diff --git a/lib/utils/timer/aclint_mtimer.c b/lib/utils/timer/aclint_mtimer.c
index 3db3c3b..eb80f24 100644
--- a/lib/utils/timer/aclint_mtimer.c
+++ b/lib/utils/timer/aclint_mtimer.c
@@ -206,7 +206,7 @@ int aclint_mtimer_cold_init(struct aclint_mtimer_data *mt,
/* Update MTIMER pointer in scratch space */
for (i = 0; i < mt->hart_count; i++) {
- scratch = sbi_hartid_to_scratch(mt->first_hartid + i);
+ scratch = sbi_hartindex_to_scratch(sbi_hartid_to_hartindex(mt->first_hartid) + i);
/*
* We don't need to fail if scratch pointer is not available
* because we might be dealing with hartid of a HART disabled
--
2.47.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH] Convert hartid to hart index to get scratch.
2025-01-09 23:32 [PATCH] Convert hartid to hart index to get scratch Chao-ying Fu
@ 2025-01-28 12:48 ` Chao-ying Fu
2025-02-07 21:34 ` Raj Vishwanathan
1 sibling, 0 replies; 4+ messages in thread
From: Chao-ying Fu @ 2025-01-28 12:48 UTC (permalink / raw)
To: opensbi
On Thu, Jan 9, 2025 at 4:07?PM Chao-ying Fu <icebergfu@gmail.com> wrote:
>
> Hartid may not be sequential, so we need to use index to get scratch.
> ---
> lib/utils/ipi/aclint_mswi.c | 2 +-
> lib/utils/timer/aclint_mtimer.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/lib/utils/ipi/aclint_mswi.c b/lib/utils/ipi/aclint_mswi.c
> index 9e55078..e22903f 100644
> --- a/lib/utils/ipi/aclint_mswi.c
> +++ b/lib/utils/ipi/aclint_mswi.c
> @@ -87,7 +87,7 @@ int aclint_mswi_cold_init(struct aclint_mswi_data *mswi)
>
> /* Update MSWI pointer in scratch space */
> for (i = 0; i < mswi->hart_count; i++) {
> - scratch = sbi_hartid_to_scratch(mswi->first_hartid + i);
> + scratch = sbi_hartindex_to_scratch(sbi_hartid_to_hartindex(mswi->first_hartid) + i);
> /*
> * We don't need to fail if scratch pointer is not available
> * because we might be dealing with hartid of a HART disabled
> diff --git a/lib/utils/timer/aclint_mtimer.c b/lib/utils/timer/aclint_mtimer.c
> index 3db3c3b..eb80f24 100644
> --- a/lib/utils/timer/aclint_mtimer.c
> +++ b/lib/utils/timer/aclint_mtimer.c
> @@ -206,7 +206,7 @@ int aclint_mtimer_cold_init(struct aclint_mtimer_data *mt,
>
> /* Update MTIMER pointer in scratch space */
> for (i = 0; i < mt->hart_count; i++) {
> - scratch = sbi_hartid_to_scratch(mt->first_hartid + i);
> + scratch = sbi_hartindex_to_scratch(sbi_hartid_to_hartindex(mt->first_hartid) + i);
> /*
> * We don't need to fail if scratch pointer is not available
> * because we might be dealing with hartid of a HART disabled
> --
> 2.47.1
>
Any feedback about this patch?
Without this patch, OpenSBI may use a wrong hartid that doesn't exist
in a platform.
Thanks!
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] Convert hartid to hart index to get scratch.
2025-01-09 23:32 [PATCH] Convert hartid to hart index to get scratch Chao-ying Fu
2025-01-28 12:48 ` Chao-ying Fu
@ 2025-02-07 21:34 ` Raj Vishwanathan
2025-02-07 23:47 ` Samuel Holland
1 sibling, 1 reply; 4+ messages in thread
From: Raj Vishwanathan @ 2025-02-07 21:34 UTC (permalink / raw)
To: opensbi
Any feedback on this patch?
The hartid's may not be sequential. We need to use the index to get the scratch.
Raj
On Thu, Jan 9, 2025 at 4:07?PM Chao-ying Fu <icebergfu@gmail.com> wrote:
>
> Hartid may not be sequential, so we need to use index to get scratch.
> ---
> lib/utils/ipi/aclint_mswi.c | 2 +-
> lib/utils/timer/aclint_mtimer.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/lib/utils/ipi/aclint_mswi.c b/lib/utils/ipi/aclint_mswi.c
> index 9e55078..e22903f 100644
> --- a/lib/utils/ipi/aclint_mswi.c
> +++ b/lib/utils/ipi/aclint_mswi.c
> @@ -87,7 +87,7 @@ int aclint_mswi_cold_init(struct aclint_mswi_data *mswi)
>
> /* Update MSWI pointer in scratch space */
> for (i = 0; i < mswi->hart_count; i++) {
> - scratch = sbi_hartid_to_scratch(mswi->first_hartid + i);
> + scratch = sbi_hartindex_to_scratch(sbi_hartid_to_hartindex(mswi->first_hartid) + i);
> /*
> * We don't need to fail if scratch pointer is not available
> * because we might be dealing with hartid of a HART disabled
> diff --git a/lib/utils/timer/aclint_mtimer.c b/lib/utils/timer/aclint_mtimer.c
> index 3db3c3b..eb80f24 100644
> --- a/lib/utils/timer/aclint_mtimer.c
> +++ b/lib/utils/timer/aclint_mtimer.c
> @@ -206,7 +206,7 @@ int aclint_mtimer_cold_init(struct aclint_mtimer_data *mt,
>
> /* Update MTIMER pointer in scratch space */
> for (i = 0; i < mt->hart_count; i++) {
> - scratch = sbi_hartid_to_scratch(mt->first_hartid + i);
> + scratch = sbi_hartindex_to_scratch(sbi_hartid_to_hartindex(mt->first_hartid) + i);
> /*
> * We don't need to fail if scratch pointer is not available
> * because we might be dealing with hartid of a HART disabled
> --
> 2.47.1
>
--
2.43.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] Convert hartid to hart index to get scratch.
2025-02-07 21:34 ` Raj Vishwanathan
@ 2025-02-07 23:47 ` Samuel Holland
0 siblings, 0 replies; 4+ messages in thread
From: Samuel Holland @ 2025-02-07 23:47 UTC (permalink / raw)
To: opensbi
On 2025-02-07 3:34 PM, Raj Vishwanathan wrote:
> Any feedback on this patch?
> The hartid's may not be sequential. We need to use the index to get the scratch.
Yes, it is true that the harts associated with an ACLINT MSWI need not have
sequential hartids. The ACLINT spec explicitly calls this out. However, there is
also no guarantee that they will have sequential OpenSBI hart indexes, either.
The allocation of hart indexes within OpenSBI should be considered entirely
arbitrary. Consider what happens if you randomly select a non-boot-hart CPU node
in the DT and mark it as status = "disabled"; this should not cause any
erroneous behavior.
Fundamentally, the "first_hartid" and "hart_count" members in aclint_mswi_data
are insufficient to cover an ACLINT MSWI with a non-sequential hart mapping. So
more refactoring is needed to handle your case robustly.
Regards,
Samuel
> On Thu, Jan 9, 2025 at 4:07?PM Chao-ying Fu <icebergfu@gmail.com> wrote:
>>
>> Hartid may not be sequential, so we need to use index to get scratch.
>> ---
>> lib/utils/ipi/aclint_mswi.c | 2 +-
>> lib/utils/timer/aclint_mtimer.c | 2 +-
>> 2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/lib/utils/ipi/aclint_mswi.c b/lib/utils/ipi/aclint_mswi.c
>> index 9e55078..e22903f 100644
>> --- a/lib/utils/ipi/aclint_mswi.c
>> +++ b/lib/utils/ipi/aclint_mswi.c
>> @@ -87,7 +87,7 @@ int aclint_mswi_cold_init(struct aclint_mswi_data *mswi)
>>
>> /* Update MSWI pointer in scratch space */
>> for (i = 0; i < mswi->hart_count; i++) {
>> - scratch = sbi_hartid_to_scratch(mswi->first_hartid + i);
>> + scratch = sbi_hartindex_to_scratch(sbi_hartid_to_hartindex(mswi->first_hartid) + i);
>> /*
>> * We don't need to fail if scratch pointer is not available
>> * because we might be dealing with hartid of a HART disabled
>> diff --git a/lib/utils/timer/aclint_mtimer.c b/lib/utils/timer/aclint_mtimer.c
>> index 3db3c3b..eb80f24 100644
>> --- a/lib/utils/timer/aclint_mtimer.c
>> +++ b/lib/utils/timer/aclint_mtimer.c
>> @@ -206,7 +206,7 @@ int aclint_mtimer_cold_init(struct aclint_mtimer_data *mt,
>>
>> /* Update MTIMER pointer in scratch space */
>> for (i = 0; i < mt->hart_count; i++) {
>> - scratch = sbi_hartid_to_scratch(mt->first_hartid + i);
>> + scratch = sbi_hartindex_to_scratch(sbi_hartid_to_hartindex(mt->first_hartid) + i);
>> /*
>> * We don't need to fail if scratch pointer is not available
>> * because we might be dealing with hartid of a HART disabled
>> --
>> 2.47.1
>>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-02-07 23:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-09 23:32 [PATCH] Convert hartid to hart index to get scratch Chao-ying Fu
2025-01-28 12:48 ` Chao-ying Fu
2025-02-07 21:34 ` Raj Vishwanathan
2025-02-07 23:47 ` Samuel Holland
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.