pussuw commented on code in PR #6069: URL: https://github.com/apache/incubator-nuttx/pull/6069#discussion_r852667961
########## arch/risc-v/src/common/riscv_addrenv_util.c: ########## @@ -0,0 +1,57 @@ +/**************************************************************************** + * arch/risc-v/src/common/riscv_addrenv_util.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <arch/board/board_memorymap.h> + +#include "pgalloc.h" + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: riscv_pgpool_to_vaddr + * + * Description: + * Convert physical page pool address to virtual page pool address + * + * Input Parameters: + * paddr - The physical address to convert + * + * Returned Value: + * Page pool virtual address, or 0 if paddr is not within page pool + * + ****************************************************************************/ + +uintptr_t riscv_pgpool_to_vaddr(uintptr_t paddr) Review Comment: I think there are issues with both approaches. One can select a Kconfig value that is wrong, no matter what I do. One can select a virtual address mapping for PGPOOL_VBASE that is overlapping with another virtual address, or not addressable at all. One can select a PGPOOL_PBASE value that is e.g. in kernel code memory, or not in any addressable memory at all. I think fundamentally the location of the page pool can be anywhere. I personally prefer using linker defined symbols to indicate memory locations, as then: a) The linker will not accidentally put anything else there b) The linker provided symbols for the memory region will always be correct But this is a philosophical dispute, linker is used to place symbols, objects do relocations etc. It is not its responsibility to define memory areas. However it has to know something about the memory layout, so for now it DOES define memory areas. One option would be to add assert tests to ensure that the ARCH_PGPOOL_PBASE value at least matches the PGPOOL_START value. The ARCH_PGPOOL_VBASE value can still be wrong (overlap with other areas) but there is no test to ensure that. ########## arch/risc-v/src/common/riscv_addrenv_util.c: ########## @@ -0,0 +1,57 @@ +/**************************************************************************** + * arch/risc-v/src/common/riscv_addrenv_util.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <arch/board/board_memorymap.h> + +#include "pgalloc.h" + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: riscv_pgpool_to_vaddr + * + * Description: + * Convert physical page pool address to virtual page pool address + * + * Input Parameters: + * paddr - The physical address to convert + * + * Returned Value: + * Page pool virtual address, or 0 if paddr is not within page pool + * + ****************************************************************************/ + +uintptr_t riscv_pgpool_to_vaddr(uintptr_t paddr) Review Comment: I think there are issues with both approaches. One can select a Kconfig value that is wrong, no matter what I do. One can select a virtual address mapping for PGPOOL_VBASE that is overlapping with another virtual address, or not addressable at all. One can select a PGPOOL_PBASE value that is e.g. in kernel code memory, or not in any addressable memory at all. I think fundamentally the location of the page pool can be anywhere. I personally prefer using linker defined symbols to indicate memory locations, as then: a) The linker will not accidentally put anything else there b) The linker provided symbols for the memory region will always be correct But this is a philosophical dispute, linker is used to place symbols, objects do relocations etc. It is not its responsibility to define memory areas. However it has to know something about the memory layout, so for now it DOES define memory areas. One option would be to add assert tests to ensure that the ARCH_PGPOOL_PBASE value at least matches the PGPOOL_START value. The ARCH_PGPOOL_VBASE value can still be wrong (overlap with other areas) but there is no test to ensure that does not happen. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
