I think a benefit from renaming many of those "up_something" to "stm32_something", "esp32_something", etc is now it is easy for software find the right function.
I think many IDEs cannot handle functions search correctly for NuttX because they don't have heuristics to know that IF I'm searching a function inside a board or inside an arch, it shouldn't return a function with same name from other board or from other arch. So, at end-of-day, these modifications you are complain about, will make the life of all users better. BR, Alan On 5/27/21, Sebastien Lorquet <sebast...@lorquet.fr> wrote: > I sill wonder what is the purpose of this variable rename. Sorry to say, > but it just looks cosmetic while critically breaking everything that was > made before, and this kind of thing is a nightmare for migration when > you cant follow the project day to day. Boards can be external to the > project, and are a supported feature, so they should continue to work > reliably even if you change the internal sauce! > > At one point there was too many trafic on the mailing list and I just > stopped reading it, I marked several hundreds of messages as read > without having the time to go through then. It seems that this change > was made during this time. > > Sebastien > > Le 27/05/2021 à 09:38, Sebastien Lorquet a écrit : >> Boom, that was the extrastuff. The board now boots. We're going to run >> a lot of functional tests to make sure everything is okay, but I dont >> have this strange hardfault at boot. >> >> Thank you. >> >> I did not find this page despite searching through a lot of >> documentation, mainly the "official" ReadTheDocs-like documentation. >> >> I suggest you link to this doc in the getting started manuals. >> >> Sebastien >> >> >> Le 26/05/2021 à 18:42, Abdelatif Guettouche a écrit : >>> Maybe this one could help: >>> https://cwiki.apache.org/confluence/display/NUTTX/NuttX+9.1#NuttX9.1-CompatibilityConcerns >>> >>> >>> >>>> I am using the flat (monolithic build) and I see no place that define >>>> this flag, at all. >>>> I dont even see a place in the codebase that defines this flag. >>> __KERNEL__ is defined in tools/Config.mk (line:100) >>> >>>> The fact that mm_initialize only shows one region is weird... where is >>> the heap for the main RAM at 0x20000000? >>> >>> CONFIG_MM_REGIONS needs to be set up correctly if you have multiple >>> heap regions. >>> >>> On Wed, May 26, 2021 at 5:22 PM Sebastien Lorquet >>> <sebast...@lorquet.fr> wrote: >>>> Hello, >>>> >>>> Thanks for the remarks. >>>> >>>> I am using the flat (monolithic build) and I see no place that define >>>> this flag, at all. >>>> >>>> I dont even see a place in the codebase that defines this flag. >>>> >>>> I see nothing related to mm, nor anything outdated in my Make.defs, >>>> which is from my old setup, yes, but still similar to a recent one. >>>> >>>> Sebastien >>>> >>>> Le 26/05/2021 à 18:08, raiden00pl a écrit : >>>>> If you use CONFIG_BUILD_FLAT=y, make sure that __KERNEL__ flag is >>>>> set here: >>>>> https://github.com/apache/incubator-nuttx/blob/master/include/nuttx/mm/mm.h#L85 >>>>> >>>>> >>>>> I remember that at some point I had a similar hardfault in mm which >>>>> doesn't >>>>> make sense and it was due to outdated board Make.defs. >>>>> >>>>> śr., 26 maj 2021 o 17:21 Sebastien Lorquet <sebast...@lorquet.fr> >>>>> napisał(a): >>>>> >>>>>> Update: stack dump and register analysis are in fact pointing to a >>>>>> crash >>>>>> in mm_alloc >>>>>> >>>>>> I have enabled memory management debug: >>>>>> >>>>>> mm_initialize: Heap: start=0x10000000 size=65536 >>>>>> mm_addregion: Region 1: base=0x10000154 size=65184 >>>>>> stm32_netinitialize: Enabling PHY power >>>>>> stm32_netinitialize: PHY reset... >>>>>> stm32_netinitialize: PHY reset done. >>>>>> stm32_netinitialize: Configuring PHY int >>>>>> F >>>>>> mm_free: Freeing 0x70fb460b >>>>>> irq_unexpected_isr: ERROR irq: 3 >>>>>> up_assert: Assertion failed at file:irq/irq_unexpectedisr.c line: 50 >>>>>> up_registerdump: R0: 00000001 2000737c c00000f2 08000101 00000000 >>>>>> 00000000 00000000 200073c8 >>>>>> up_registerdump: R8: 00000000 00000000 00000000 00000000 00000000 >>>>>> 200073c8 080126ad 080126f8 >>>>>> up_registerdump: xPSR: 21000000 PRIMASK: 00000000 CONTROL: 00000000 >>>>>> up_registerdump: EXC_RETURN: fffffff9 >>>>>> up_dumpstate: sp: 200072c8 >>>>>> up_dumpstate: stack base: 20007078 >>>>>> up_dumpstate: stack size: 00000400 >>>>>> >>>>>> The fact that mm_initialize only shows one region is weird... >>>>>> where is >>>>>> the heap for the main RAM at 0x20000000? >>>>>> >>>>>> the mm_free(0x70fb460b) is not what causes the hardfault (it comes >>>>>> later), but what the hell is is this invalid address! >>>>>> >>>>>> This is the first call to mm_free, here is the backtrace: >>>>>> >>>>>> Breakpoint 1, mm_free (heap=0x200060b4 <g_mmheap>, mem=0x70fb460b) at >>>>>> mm_heap/mm_free.c:85 >>>>>> 85 if (!mem) >>>>>> (gdb) bt >>>>>> #0 mm_free (heap=0x200060b4 <g_mmheap>, mem=0x70fb460b) at >>>>>> mm_heap/mm_free.c:85 >>>>>> #1 0x0801264a in mm_free_delaylist (heap=0x200060b4 <g_mmheap>) at >>>>>> mm_heap/mm_malloc.c:82 >>>>>> #2 0x08012672 in mm_malloc (heap=0x200060b4 <g_mmheap>, size=24) at >>>>>> mm_heap/mm_malloc.c:115 >>>>>> #3 0x08012a32 in mm_zalloc (heap=0x200060b4 <g_mmheap>, size=24) at >>>>>> mm_heap/mm_zalloc.c:45 >>>>>> #4 0x080123ac in zalloc (size=24) at umm_heap/umm_zalloc.c:68 >>>>>> #5 0x080399fa in inode_alloc (name=0x8059a78 "") at >>>>>> inode/fs_inodereserve.c:78 >>>>>> #6 0x08039a5c in inode_root_reserve () at >>>>>> inode/fs_inodereserve.c:129 >>>>>> #7 0x080398cc in inode_initialize () at inode/fs_inode.c:92 >>>>>> #8 0x08039284 in fs_initialize () at fs_initialize.c:47 >>>>>> #9 0x08007eb4 in nx_start () at init/nx_start.c:600 >>>>>> #10 0x0800421e in __start () at chip/stm32_start.c:338 >>>>>> >>>>>> As previously analyzed, this happens in fs_initialize through >>>>>> inode_root_reserve, so I was on the right track. >>>>>> >>>>>> Caller shows mm_free called with that weird address: >>>>>> >>>>>> (gdb) f 1 >>>>>> #1 0x0801264a in mm_free_delaylist (heap=0x200060b4 <g_mmheap>) at >>>>>> mm_heap/mm_malloc.c:82 >>>>>> 82 mm_free(heap, address); >>>>>> (gdb) list >>>>>> 77 >>>>>> 78 /* The address should always be non-NULL since that was >>>>>> checked in the >>>>>> 79 * 'while' condition above. >>>>>> 80 */ >>>>>> 81 >>>>>> 82 mm_free(heap, address); <-- address == 0x70fb460b >>>>>> 83 } >>>>>> 84 #endif >>>>>> 85 } >>>>>> 86 >>>>>> >>>>>> (gdb) print &g_mmheap >>>>>> $3 = (struct mm_heap_s *) 0x200060b4 <g_mmheap> >>>>>> (gdb) print g_mmheap >>>>>> $4 = {mm_impl = 0x0} >>>>>> >>>>>> this is not good! >>>>>> >>>>>> This is not a timing or IRQ related issue but a heap issue. >>>>>> >>>>>> R15 = 080126f8 translates to here: >>>>>> >>>>>> >>>>>> https://github.com/apache/incubator-nuttx/blob/master/mm/mm_heap/mm_malloc.c#L199 >>>>>> >>>>>> >>>>>> >>>>>> => this free() has corrupted a badly initialized heap, and the next >>>>>> malloc fails, giving a hardfault because that address is invalid. >>>>>> >>>>>> Horrific mess! >>>>>> >>>>>> ==> >>>>>> >>>>>> I think that my old board code does not initialize the board >>>>>> properly, I >>>>>> probably have to check for differences between my code and the >>>>>> stm32f429i-disco built-in board (on which I based my board). >>>>>> >>>>>> Sebastien >>>>>> >>>>>> Le 25/05/2021 à 21:26, Nathan Hartman a écrit : >>>>>>> On Tue, May 25, 2021 at 12:02 PM Sebastien Lorquet >>>>>>> <sebast...@lorquet.fr >>>>>>> >>>>>>> wrote: >>>>>>> >>>>>>>> Back to the business >>>>>>>>>> After this we managed to recompile our project using the >>>>>>>>>> latest NuttX >>>>>>>>>> sources, but it fails when trying to init the PHY irq on our >>>>>>>>>> STM32F427 >>>>>>>>>> board: We get "unexpected IRQ". >>>>>>>>>> >>>>>>>>>> Yes I know that's pretty vague :-) >>>>>>>>>> >>>>>>>>>> Is there anything obvious I should have been careful with in this >>>>>>>>>> domain, before I dig the jtag probe to fix it (tomorrow) ? >>>>>>>>> I would first start by looking through the Release Notes >>>>>>>>> between v7.30 >>>>>>>>> and v10.1. Many big improvements and bug fixes happened and >>>>>>>>> some of >>>>>>>>> them are mentioned in Compatibility Concerns along with some >>>>>>>>> changes >>>>>>>>> you might need to make to configuration etc. >>>>>>>>> >>>>>>>>> Also another thing you can try: Has this board and PHY worked >>>>>>>>> correctly with v7.30? If so, you can bisect and with very few >>>>>>>>> tests >>>>>>>>> (I'm guessing fewer than 20) find the exact commit that broke it. >>>>>>>> Release notes are hard to read but I did not find anything >>>>>>>> special about >>>>>>>> phy interrupts. >>>>>>>> >>>>>>>> Note that it may not be the phy interrupt. Here is my log: >>>>>>>> >>>>>>>> stm32_netinitialize: Enabling PHY power >>>>>>>> stm32_netinitialize: PHY reset... >>>>>>>> stm32_netinitialize: PHY reset done. >>>>>>>> stm32_netinitialize: Configuring PHY int >>>>>>>> F >>>>>>>> irq_unexpected_isr: ERROR irq: 3 >>>>>>>> up_assert: Assertion failed at file:irq/irq_unexpectedisr.c >>>>>>>> line: 50 >>>>>>>> up_registerdump: R0: 00000001 2000737c c00000f2 08000101 00000000 >>>>>>>> 00000000 00000000 200073c8 >>>>>>>> up_registerdump: R8: 00000000 00000000 00000000 00000000 00000000 >>>>>>>> 200073c8 080126ad 080126f8 >>>>>>>> up_registerdump: xPSR: 21000000 PRIMASK: 00000000 CONTROL: 00000000 >>>>>>>> up_registerdump: EXC_RETURN: fffffff9 >>>>>>>> >>>>>>>> A lot of OS initialization things happen at the point, marked by >>>>>>>> the >>>>>>>> letter F. >>>>>>>> >>>>>>>> It seems that an unexpected IRQ happens in this interval, around >>>>>>>> the >>>>>>>> time the filesystem is initialized. The backtrace goes down to >>>>>>>> memory >>>>>>>> allocation routines through the initialization of the root inode. >>>>>>>> >>>>>>>> My guess is that AN external IRQ is triggered (possibly not the >>>>>>>> PHY IRQ) >>>>>>>> but the ISR handler for that one is not ready yet. I will add debug >>>>>>>> messages. >>>>>>>> >>>>>>>> >>>>>>>> I would expect that situation to be a simple NOP, but it seems that >>>>>>>> undefined handlers are set to this function "irq_unexpected_isr" >>>>>>>> >>>>>>>> Is that a new behaviour? a default config that I did not set >>>>>>>> properly >>>>>>>> when porting our old defconfig? >>>>>>>> >>>>>>>> Sebastien >>>>>>>> >>>>>>>>> Nathan >>>>>>> Did you try disabling the PHY (or networking) in Kconfig to see if >>>>>> removing >>>>>>> it from the build will eliminate the hardfault? >>>>>>> >>>>>>> Have you seen this about hardfault debugging: >>>>>>> >>>>>> https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=139629445#content/view/139629445 >>>>>> >>>>>> >>>>>>> Nathan >>>>>>> >