On Mon, Aug 17, 2020 at 11:56 AM Utkarsh Rai <utkarsh.ra...@gmail.com> wrote:
>
>
>
> On Mon, Aug 17, 2020 at 10:12 PM Gedare Bloom <ged...@rtems.org> wrote:
>>
>> On Mon, Aug 17, 2020 at 10:30 AM Utkarsh Rai <utkarsh.ra...@gmail.com> wrote:
>> >
>> >
>> >
>> > On Mon, Aug 17, 2020 at 9:24 PM Gedare Bloom <ged...@rtems.org> wrote:
>> >>
>> >> On Mon, Aug 17, 2020 at 5:53 AM Utkarsh Rai <utkarsh.ra...@gmail.com> 
>> >> wrote:
>> >> >
>> >> >
>> >> >
>> >> > On Mon, Aug 17, 2020 at 11:32 AM Sebastian Huber 
>> >> > <sebastian.hu...@embedded-brains.de> wrote:
>> >> >>
>> >> >> On 16/08/2020 18:09, Utkarsh Rai wrote:
>> >> >>
>> >> >> >
>> >> >> >
>> >> >> > On Sun, Aug 16, 2020 at 9:18 PM Gedare Bloom <ged...@rtems.org
>> >> >> > <mailto:ged...@rtems.org>> wrote:
>> >> >> >
>> >> >> >     On Sat, Aug 15, 2020 at 9:03 PM Utkarsh Rai
>> >> >> >     <utkarsh.ra...@gmail.com <mailto:utkarsh.ra...@gmail.com>> wrote:
>> >> >> >     >
>> >> >> >     >
>> >> >> >     >
>> >> >> >     > On Sun, Aug 16, 2020 at 6:12 AM Utkarsh Rai
>> >> >> >     <utkarsh.ra...@gmail.com <mailto:utkarsh.ra...@gmail.com>> wrote:
>> >> >> >     >>
>> >> >> >     >>
>> >> >> >     >>
>> >> >> >     >> On Sat, Aug 15, 2020 at 7:26 PM Gedare Bloom <ged...@rtems.org
>> >> >> >     <mailto:ged...@rtems.org>> wrote:
>> >> >> >     >>>
>> >> >> >     >>> On Sat, Aug 15, 2020 at 6:26 AM Utkarsh Rai
>> >> >> >     <utkarsh.ra...@gmail.com <mailto:utkarsh.ra...@gmail.com>> wrote:
>> >> >> >     >>> >
>> >> >> >     >>> >
>> >> >> >     >>> > On Thu, Aug 13, 2020 at 5:10 AM Utkarsh Rai
>> >> >> >     <utkarsh.ra...@gmail.com <mailto:utkarsh.ra...@gmail.com>> wrote:
>> >> >> >     >>> >>
>> >> >> >     >>> >> Thanks, I'll check them out.
>> >> >> >     >>> >>
>> >> >> >     >>> >> On Thu, Aug 13, 2020 at 12:56 AM Gedare Bloom
>> >> >> >     <ged...@rtems.org <mailto:ged...@rtems.org>> wrote:
>> >> >> >     >>> >>>
>> >> >> >     >>> >>> On Wed, Aug 12, 2020 at 11:33 AM Utkarsh Rai
>> >> >> >     <utkarsh.ra...@gmail.com <mailto:utkarsh.ra...@gmail.com>> wrote:
>> >> >> >     >>> >>> >
>> >> >> >     >>> >>> > Hello,
>> >> >> >     >>> >>> > I have been testing my code for thread stack isolation
>> >> >> >     against various tests( Some written by me, and remaining already
>> >> >> >     present). One of the limitations that I have found is that I
>> >> >> >     encounter fatal errors whenever a context switch takes place
>> >> >> >     through an ISR. Can you please explain how the context switching
>> >> >> >     procedure works when an interrupt occurs. When I use gdb for
>> >> >> >     stepping through the code it asynchronously moves to context
>> >> >> >     switching code from the executing thread( for example psx16 
>> >> >> > test).
>> >> >> >     >>> >>> > For thread stack protection, the part that deals with
>> >> >> >     context switching simply 'sets 'the memory entries of the heir
>> >> >> >     stack and 'unsets' that of the executing stack.
>> >> >> >     >>> >>>
>> >> >> >     >>> >>> There are two issues to start: interrupt stacks and
>> >> >> >     dispatching from an ISR.
>> >> >> >     >>> >>>
>> >> >> >     >>> >>> I think you can start by reading some of the 
>> >> >> > documentation:
>> >> >> >     >>> >>>
>> >> >> >     
>> >> >> > https://docs.rtems.org/branches/master/c-user/interrupt_manager.html#processing-an-interrupt
>> >> >> >     >>> >>>
>> >> >> >     >>> >>>
>> >> >> >     
>> >> >> > https://docs.rtems.org/branches/master/c-user/scheduling_concepts.html#dispatching-tasks
>> >> >> >     >>> >>>
>> >> >> >     >>> >>>
>> >> >> >     
>> >> >> > https://docs.rtems.org/branches/master/c-user/config/general.html#configure-interrupt-stack-size
>> >> >> >     >>> >>>
>> >> >> >     >>> >>>
>> >> >> >     
>> >> >> > https://docs.rtems.org/branches/master/cpu-supplement/port.html#interrupt-processing
>> >> >> >     >>> >>>
>> >> >> >     >>> >>> You can also find some material in rtems-docs.git/porting
>> >> >> >     -- I don't
>> >> >> >     >>> >>> know where that gets generated.
>> >> >> >     >>> >>>
>> >> >> >     >>> >>> Continue to ask questions, and writing blog posts.
>> >> >> >     >>> >
>> >> >> >     >>> >
>> >> >> >     >>> > So after going through the materials, I was able to
>> >> >> >     understand how an ISR is registered, ISR stack initialization.
>> >> >> >     What is still not clear to me is what are the differences between
>> >> >> >     dispatching a task in ISR different and  a normal context-switch?
>> >> >> >     >>> >
>> >> >> >     >>> > For example the psxsignal06 test, we wait for a signal
>> >> >> >     here,  on setting the breakpoint at the context switch code
>> >> >> >     (cpu_asm.S), after this line,  I find that the heir context stack
>> >> >> >     is the ISR stack. The next thread is dispatched from this ISR but
>> >> >> >     as soon as I unset the memory attributes of the ISR stack I get a
>> >> >> >     fatal error. One possible reason is that the ISR stack is not 
>> >> >> > page
>> >> >> >     aligned and unsettling its attributes unsets nearby memory
>> >> >> >     regions. Is there something else that I am missing?
>> >> >> >     >>> >
>> >> >> >     >>> what else is on the same page as the ISR stack?
>> >> >> >     >>>
>> >> >> >     >>
>> >> >> >     >> The idle thread stack is between 0x202e40 to 0x203e40 and the
>> >> >> >     ISR stack is between 0x203e40 to 0x204e40. So when we unset the
>> >> >> >     memory for the ISR it unsets between 0x203000 to 0x205000, I 
>> >> >> > think
>> >> >> >     this may be the problem.
>> >> >> >     >>
>> >> >> >     >>
>> >> >> >     >>>
>> >> >> >     >>> Not quite related, you'll need to also make sure to map the
>> >> >> >     ISR stack
>> >> >> >     >>> back in during ISR Handling, before using it.
>> >> >> >     >>
>> >> >> >     >>
>> >> >> >     >> When the ISR gets called for the first time, it already has 
>> >> >> > R/W
>> >> >> >     permission and for subsequent context switches it's memory entry
>> >> >> >     is accordingly set/unset.
>> >> >> >     >
>> >> >> >     >
>> >> >> >     > The idle thread stack and the ISR stack are placed at these
>> >> >> >     addresses with the BSP specific linker script as 
>> >> >> > "rtemsstack.idle"
>> >> >> >     and "rtemsstack.interrupt". So to make them page-aligned we may
>> >> >> >     have to make changes in the lnker script.
>> >> >> >
>> >> >> >     Give it a try. It should be relatively easy to hack in a couple 
>> >> >> > of
>> >> >> >     alignments.
>> >> >> >
>> >> >> >     We can discuss later the correctness of that.
>> >> >> >
>> >> >> > Ok, I will report how it goes.
>> >> >>
>> >> >> Please use the CPU port option
>> >> >>
>> >> >> #define CPU_INTERRUPT_STACK_ALIGNMENT CPU_CACHE_LINE_BYTES
>> >> >>
>> >> >> to define the interrupt and idle stack alignment. There is no need to
>> >> >> change the linker command file.
>> >> >
>> >> >
>> >> > Thank you, this solves the issue.
>> >> >
>> >> > I have used,
>> >> >  #define CPU_INTERRUPT_STACK_ALIGNMENT 4096,  in the application code 
>> >> > as well as cpu.h, to align for 4K pages.
>> >>
>> >> Great. Now, a question: can the Idle Task and Interrupt Stack share
>> >> the same 4K page?
>> >
>> >
>> > I am not sure whether you mean if they should have the same address or if 
>> > they have overlapping addresses ( For example if the idle thread stack is 
>> > at 0x202e40 and interrupt stack is at 0x204e40 then they should have the 
>> > 0x20300-0x20400 address as common)?
>>
>> All this page-alignment stuff might be wasting a lot of space for
>> stacks that are smaller than 4K size. So, could you allocate them both
>> in the same 4K region?
>
>
> The stacks are placed at different addresses using the linker script by  " 
> *(SORT_BY_ALIGNMENT (SORT_BY_NAME (.rtemsstack*))) " and each of them have 4k 
> sizes by default. This means that we have to have the same addresses for both 
> the ISR and the idle stacks if we want them in the same 4K region.
> Also, we have a minimum stack size as 4K by default, so at max, we would be 
> wasting a single page.

Oh, ok. I was not aware they were already 4K stacks. That's probably
overkill but not so important to optimize it.
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to