Commit Graph

787 Commits

Author SHA1 Message Date
Sebastian Huber
18f5bcb9d2 rtems: Fix Doxygen comment 2020-04-02 07:47:36 +02:00
Sebastian Huber
7cec2590d2 config: Remove CONFIGURE_FILESYSTEM_DEVFS
This filesystem no longer exists.

Remove unused RTEMS_FILESYSTEM_TYPE_DEVFS.

Update #3894.
2020-03-31 15:00:50 +02:00
Sebastian Huber
762425e1e4 ftpd: Remove superfluous defines
These defines are not used and easily conflict with application code.
They are also defined by the standard header file <arpa/ftp.h> if
someone needs them.
2020-03-31 10:11:06 +02:00
Sebastian Huber
eb92b1fceb ftpd: Fix return types 2020-03-31 10:11:06 +02:00
Sebastian Huber
5608e899c2 config: Remove BSP_DEFAULT_UNIFIED_WORK_AREAS
Do not undefine this unused BSP configuration option.  This is a follow
up of commit 92b33b8d09.
2020-03-31 10:10:44 +02:00
Sebastian Huber
96402b74a8 score: Document _TLS_Alignment 2020-03-23 16:16:18 +01:00
Sebastian Huber
24c21795ea score: Fix size of TLS_Thread_control_block
On most architectures, the size of the thread-local storage TCB must be
8 bytes.  Fix the definition for 64-bit targets.
2020-03-23 15:57:50 +01:00
Sebastian Huber
3fd4889157 conf: Improve evaluation of event recording opts
Check for configuration errors earlier.  Allow fatal dumps without the
other extensions.  Add some warnings.

Update #3904.
2020-03-23 07:40:36 +01:00
Sebastian Huber
ab42b3e100 record: Add rtems_record_dump()
Add rtems_record_dump_base64() and rtems_record_dump_base64_zlib().

Add CONFIGURE_RECORD_FATAL_DUMP_BASE64 and
CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB configuration options.

Update #3904.
2020-03-18 07:20:52 +01:00
Sebastian Huber
c584d4eda4 rtems: Add rtems_put_char()
Update #3904.
2020-03-16 11:54:27 +01:00
Sebastian Huber
a6b3633459 score: Add _IO_Base64()
Update #3904.
2020-03-16 11:54:26 +01:00
Sebastian Huber
c2287ba2cf libio: Robust file descriptor reference counting
There was a race conditon in the reference counting of file descriptors
during a close() operation.  After the call to the close handler, the
rtems_libio_free() function cleared the flags to zero.  However, at this
point in time there may still exist some holders of the file descriptor.
With RTEMS_DEBUG enabled this could lead to failed assertions in
rtems_libio_iop_drop().

Change the code to use only atomic read-modify-write operations on the
rtems_libio_iop::flags.
2020-03-13 09:57:04 +01:00
Sebastian Huber
0161b93d50 imfs: Replace devfs with an IMFS specialization
Add a simplified path evaluation function IMFS_eval_path_devfs() for a
device only IMFS configuration.

The code size can be further reduced by the application if it disables
the support for legacy IO drivers via:

  #define CONFIGURE_IMFS_DISABLE_MKNOD
  #define CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE

Obsolete CONFIGURE_MAXIMUM_DEVICES.  Remove BSP_MAXIMUM_DEVICES.

Update #3894.
Update #3898.
2020-03-09 17:26:54 +01:00
Sebastian Huber
83994913b6 imfs: Constify imfs_memfile_bytes_per_block
The CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK value is validated by
<rtems/confdefs/libio.h>.  Changing this value during runtime could lead
to memory corruption.

Update #3894.
2020-03-09 17:15:20 +01:00
Sebastian Huber
624d691bdc libio: Constify some functions 2020-03-09 17:15:20 +01:00
Sebastian Huber
fa44c3903a imfs: Add IMFS_add_node()
Update #3894.
2020-03-04 09:30:03 +01:00
Sebastian Huber
0b0cd93a40 imfs: Remove IMFS_NODE_FLAG_NAME_ALLOCATED
Remove IMFS_NODE_FLAG_NAME_ALLOCATED and instead replace the node
control in rename operations.  This avoids a special case in the general
node destruction which pulled in free().

Update #3894.
2020-03-04 09:30:02 +01:00
Sebastian Huber
8b73ee5023 rtems: rtems_scheduler_get_processor_maximum()
In uniprocessor configurations, use compile-time constants for
rtems_scheduler_get_processor_maximum() and
rtems_scheduler_get_processor().  This helps compilers and static
analyzers to deduce that some loop bodies are only executed once and
some conditional statements have a fixed outcome (may improve code
generation and reduce false positives).

In SMP configurations, directly provide the internal implementation for
performance reasons.
2020-03-04 08:43:45 +01:00
Sebastian Huber
fdeaa64e17 config: Remove <rtems/btimer.h> include
The use of CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER does not define
anything, so remove the <rtems/btimer.h> include.

Update #3875.
2020-03-04 08:43:45 +01:00
Sebastian Huber
180201094e rtems: Add rtems_scheduler_map_priority_from_posix()
Update #3881.
2020-03-03 07:10:55 +01:00
Sebastian Huber
38736c69f8 rtems: Add rtems_scheduler_map_priority_to_posix()
Update #3881.
2020-03-03 07:09:59 +01:00
Simon Glass
461c735406 libfdt: De-inline fdt_header_size()
There does not seem to be a strong reason to inline this function. Also
we are about to add some extra code to it which will increase its size.

Move it into fdt.c and use a simple declaration in libfdt.h

Signed-off-by: Simon Glass <sjg@chromium.org>
Message-Id: <20200220214557.176528-2-sjg@chromium.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:21 +01:00
Luc Michel
94d5b6ea56 libfdt.h: add explicit cast from void* to uint8_t* in fdt(32|64)_st
Including libfdt.h in a C++ project fails during compilation with recent
version of GCC or Clang.

This simple example:

extern "C" {
 #include <libfdt.h>
}

int main(void) { return 0; }

leads to the following errors with GCC 9.1.0:

/usr/include/libfdt.h: In function ‘void fdt32_st(void*, uint32_t)’:
/usr/include/libfdt.h:139:16: error: invalid conversion from ‘void*’ to ‘uint8_t*’ {aka ‘unsigned char*’} [-fpermissive]
  139 |  uint8_t *bp = property;
      |                ^~~~~~~~
      |                |
      |                void*
/usr/include/libfdt.h: In function ‘void fdt64_st(void*, uint64_t)’:
/usr/include/libfdt.h:163:16: error: invalid conversion from ‘void*’ to ‘uint8_t*’ {aka ‘unsigned char*’} [-fpermissive]
  163 |  uint8_t *bp = property;
      |                ^~~~~~~~
      |                |
      |                void*

This commit adds an explicit cast to uint8_t* to fix this issue.

Signed-off-by: Luc Michel <luc.michel@greensocs.com>
Message-Id: <20190910104824.1321594-1-luc.michel@greensocs.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:20 +01:00
Rob Herring
0b83b822d7 libfdt: Replace GPL/BSD boilerplate/reference with SPDX tags
Replace instances of dual GPLv2 or BSD license boilerplate with SPDX tags.

Signed-off-by: Rob Herring <robh@kernel.org>
Message-Id: <20190620211944.9378-3-robh@kernel.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:20 +01:00
Nicholas Piggin
b00040b273 libfdt: Add FDT_CREATE_FLAG_NO_NAME_DEDUP flag that trades size for speed
Searching for duplicate names scales O(n^2) with the number of names
added to a fdt, which can cause a noticable slowdown with larger device
trees and very slow CPU cores.

Add FDT_CREATE_FLAG_NO_NAME_DEDUP that allow the caller to trade fdt size
for speed in the creation process.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Message-Id: <20190509094122.834-4-npiggin@gmail.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:20 +01:00
Nicholas Piggin
adb403b94a libfdt: Introduce fdt_create_with_flags()
There is a need to be able to specify some options when building an FDT
with the SW interface. This can be accomplished with minimal changes by
storing intermediate data in the fdt header itself, in fields that are
not otherwise needed during the creation process and can be set by
fdt_finish().

The fdt.magic field is already used exactly this way, as a state to
check with callers that the FDT has been created but not yet finished.

fdt.version and fdt.last_comp_version are used to make room for more
intermediate state. These are adjacent and unused during the building
process. last_comp_version is not yet used for intermediate state, but
it is zeroed and treated as used, so as to allow future growth easily.

A new interface, fdt_create_with_flags() is added, which takes 32-bit
flag value to control creation.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Message-Id: <20190509094122.834-3-npiggin@gmail.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:20 +01:00
David Gibson
3d4c1c8975 libfdt: Make fdt_get_max_phandle() an inline
It's now a trivial wrapper around fdt_find_max_phandle() so we might as
well inline it.  We also remove it from the versioning linker script.
Theoretically, that's a breaking ABI change except that we haven't yet
released a version with it exposed in the shared object, so we can get
away with it.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:19 +01:00
Thierry Reding
5a457750ec libfdt: Add phandle generation helper
The new fdt_generate_phandle() function can be used to generate a new,
unused phandle given a specific device tree blob. The implementation is
somewhat naive in that it simply walks the entire device tree to find
the highest phandle value and then returns a phandle value one higher
than that. A more clever implementation might try to find holes in the
current set of phandle values and fill them. But this implementation is
relatively simple and works reliably.

Also add a test that validates that phandles generated by this new API
are indeed unique.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Message-Id: <20190326153302.17109-3-thierry.reding@gmail.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:19 +01:00
Thierry Reding
6505fe0ede libfdt: Add new maximum phandle lookup function
The fdt_get_max_phandle() function has some shortcomings. On one hand
it returns just a uint32_t which means to check for the "negative"
error code a caller has to explicitly check against the error code
(uint32_t)-1. In addition, the -1 is the only error code that can be
returned, so a caller cannot tell the difference between the various
failures.

Fix this by adding a new fdt_find_max_phandle() function that returns an
error code on failure and 0 on success, just like other APIs, and stores
the maximum phandle value in an output argument on success.

This also refactors fdt_get_max_phandle() to use the new function. Add a
note pointing out that the new fdt_find_max_phandle() function should be
preferred over fdt_get_max_phandle().

Signed-off-by: Thierry Reding <treding@nvidia.com>
Message-Id: <20190326153302.17109-1-thierry.reding@gmail.com>
[dwg: Reword for some inaccuracies in the commit message]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:19 +01:00
AKASHI Takahiro
d5203fed10 libfdt: add fdt_append_addrrange()
This function will append an address range property using parent node's
"#address-cells" and "#size-cells" properties.

It will be used in implementing kdump with kexec_file_load system call
at linux kernel for arm64 once it is merged into kernel tree.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Message-Id: <20190327061552.17170-2-takahiro.akashi@linaro.org>
[dwg: Correct a SEGV error in the testcase]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:19 +01:00
David Gibson
3d75d7c3cf Revert "libfdt: Add phandle generation helper"
This reverts commit 54ea41c22415cb0e283d22faf71202051c89400c.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:19 +01:00
Thierry Reding
a0dea6447c libfdt: Add phandle generation helper
The new fdt_generate_phandle() function can be used to generate a new,
unused phandle given a specific device tree blob. The implementation is
somewhat naive in that it simply walks the entire device tree to find
the highest phandle value and then returns a phandle value one higher
than that. A more clever implementation might try to find holes in the
current set of phandle values and fill them. But this implementation is
relatively simple and works reliably.

Also add a test that validates that phandles generated by this new API
are indeed unique.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Message-Id: <20190320151003.28941-1-thierry.reding@gmail.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:19 +01:00
Geert Uytterhoeven
18a775942c libfdt: Fix FDT_ERR_NOTFOUND typos in documentation
The actual error is FDT_ERR_NOTFOUND, not FDT_ERR_NOT_FOUND.

Fixes: d29126c90acb0d70 ("libfdt: Add iterator over properties")
Fixes: 902d0f0953d0074b ("libfdt: Add a subnodes iterator macro")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:19 +01:00
Geert Uytterhoeven
ab3efccd42 libfdt: Fix fdt_getprop_by_offset() parameter name in documentation
The second parameter of fdt_getprop_by_offset() is called "offset", not
"ffset".

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:19 +01:00
David Gibson
bef6dfc588 libfdt: Don't use memcpy to handle unaligned reads on ARM
6dcb8ba4 "libfdt: Add helpers for accessing unaligned words" introduced
the fdt32_ld() and fdt64_ld() helpers for loading values from the FDT blob
which might not be naturally aligned.  This matters for ARM, where
attempting a plain unaligned load will often cause an exception.

However, it seems the memcpy() we used here was surprisingly expensive,
making libfdt nearly 6x slower on at least some ARM platforms.

This patch takes an alternative approach, using a bunch of 1-byte loads
and shifts to implement the helpers.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2020-03-02 07:52:19 +01:00
John Clarke
8bd3915555 libfdt: return correct value if #size-cells property is not present
According to the device tree specification, the default value for
#size-cells is 1, but fdt_size_cells() was returning 2 if this property
was not present.

This patch also makes fdt_address_cells() and fdt_size_cells() conform
to the behaviour documented in libfdt.h. The defaults are only returned
if fdt_getprop() returns -FDT_ERR_NOTFOUND, otherwise the actual error
is returned.

Signed-off-by: John Clarke <johnc@kirriwa.net>
2020-03-02 07:52:18 +01:00
Sebastian Huber
fcb11510c6 score: Fix context switch extensions (SMP)
In uniprocessor and SMP configurations, the context switch extensions
were called during _Thread_Do_dispatch():

void _Thread_Do_dispatch( Per_CPU_Control *cpu_self, ISR_Level level )
{
  Thread_Control *executing;

  executing = cpu_self->executing;

  ...
  do {
    Thread_Control *heir;

    heir = _Thread_Get_heir_and_make_it_executing( cpu_self );
    ...
    _User_extensions_Thread_switch( executing, heir );
    ...
    _Context_Switch( &executing->Registers, &heir->Registers );
    ...
  } while ( cpu_self->dispatch_necessary );
  ...
}

In uniprocessor configurations, this is fine and the context switch
extensions are called for all thread switches except the very first
thread switch to the initialization thread.  However, in SMP
configurations, the context switch may be invalidated and updated in the
low-level _Context_Switch() routine.  See:

  https://docs.rtems.org/branches/master/c-user/symmetric_multiprocessing_services.html#thread-dispatch-details

In case such an update happens, a thread will execute on the processor
which was not seen in the previous call of the context switch
extensions.  This can confuse for example event record consumers which
use events generated by a context switch extension.

Fixing this is not straight forward.  The context switch extensions call
must move after the low-level context switch.  The problem here is that
we may end up in _Thread_Handler().  Adding the context switch
extensions call to _Thread_Handler() covers now also the thread switch
to the initialization thread.  We also have to save the last executing
thread (ancestor) of the processor.  Registers or the stack cannot be
used for this purpose.  We have to add it to the per-processor
information.  Existing extensions may be affected, since now context
switch extensions use the stack of the heir thread.  The stack checker
is affected by this.

Calling the thread switch extensions in the low-level context switch is
difficult since at this point an intermediate stack is used which is
only large enough to enable servicing of interrupts.

Update #3885.
2020-02-28 07:50:19 +01:00
Sebastian Huber
c36fae22fe config: Initialize IO drivers on demand 2020-02-26 08:23:28 +01:00
Sebastian Huber
470dfa1f35 config: Resurrect NULL_DRIVER_TABLE_ENTRY
This define may be used by application configurations for the
CONFIGURE_APPLICATION_EXTRA_DRIVERS definition.

Update #3875.
2020-02-25 14:03:33 +01:00
Sebastian Huber
a78495eda2 config: Add <rtems/confdefs/wkspace.h>
Remove all comments and copyrightable content from the moved content.
Use BSD-2-Clause license for new file.

Change licence of <rtems/confdefs.h> to BSD-2-Clause according to file
history.

Update #3053.
Close #3875.
2020-02-25 07:18:38 +01:00
Sebastian Huber
1fb1cf1a3a config: Add <rtems/confdefs/objectsposix.h>
Remove all comments and copyrightable content from the moved content.
Use BSD-2-Clause license for new file.

Update #3053.
Update #3875.
2020-02-25 07:18:38 +01:00
Sebastian Huber
35e58c45f7 config: Add <rtems/confdefs/wkspacesupport.h>
Remove all comments and copyrightable content from the moved content.
Use BSD-2-Clause license for new file.

Update #3053.
Update #3875.
2020-02-25 07:18:38 +01:00
Sebastian Huber
d20209b065 config: Add <rtems/confdefs/objectsclassic.h>
Remove all comments and copyrightable content from the moved content.
Use BSD-2-Clause license for new file.

Update #3053.
Update #3875.
2020-02-25 07:18:38 +01:00
Sebastian Huber
f5a2fd8628 config: Add <rtems/confdefs/threads.h>
Remove all comments and copyrightable content from the moved content.
Use BSD-2-Clause license for new file.

Update #3053.
Update #3875.
2020-02-25 07:18:38 +01:00
Sebastian Huber
40db0518a9 config: Add <rtems/confdefs/unlimited.h>
Remove all comments and copyrightable content from the moved content.
Use BSD-2-Clause license for new file.

Update #3053.
Update #3875.
2020-02-25 07:18:38 +01:00
Sebastian Huber
7b6596f56f config: Add <rtems/confdefs/iodrivers.h>
Remove all comments and copyrightable content from the moved content.
Use BSD-2-Clause license for new file.

Update #3053.
Update #3875.
2020-02-25 07:18:38 +01:00
Sebastian Huber
fe84ab5c6c config: Add <rtems/confdefs/console.h>
Remove all comments and copyrightable content from the moved content.
Use BSD-2-Clause license for new file.

Update #3053.
Update #3875.
2020-02-25 07:18:38 +01:00
Sebastian Huber
8314933907 config: Add <rtems/confdefs/initthread.h>
Remove all comments and copyrightable content from the moved content.
Use BSD-2-Clause license for new file.

Update #3053.
Update #3875.
2020-02-25 07:18:38 +01:00
Sebastian Huber
b15d1cba0f config: Add <rtems/confdefs/inittask.h>
Remove all comments and copyrightable content from the moved content.
Use BSD-2-Clause license for new file.

Update #3053.
Update #3875.
2020-02-25 07:18:37 +01:00
Sebastian Huber
8f3419bd88 config: Add <rtems/confdefs/extensions.h>
Remove all comments and copyrightable content from the moved content.
Use BSD-2-Clause license for new file.

Update #3053.
Update #3875.
2020-02-25 07:18:37 +01:00