Commit Graph

347 Commits

Author SHA1 Message Date
Sebastian Huber
bcef89f236 Update company name
The embedded brains GmbH & Co. KG is the legal successor of embedded
brains GmbH.
2023-05-20 11:05:26 +02:00
Joel Sherrill
255fe433fd cpukit/: Scripted embedded brains header file clean up
Updates #4625.
2022-03-10 08:43:49 +01:00
Joel Sherrill
f381e9bab2 cpukit/libblock: Change license to BSD-2
Updates #3053.
2022-02-28 10:28:05 -06:00
Joel Sherrill
4bc34704a1 cpukit/libblock: Clean up before license change 2022-02-23 16:30:46 -06:00
Sebastian Huber
36655b870c cpukit: occured -> occurred 2021-07-16 13:42:27 +02:00
Christian Mauderer
6ae79e6df6 libblock: Add rtems_bdbuf_peek()
Adds a peek function that allows (for example) a file system to suggest
the next blocks that should be used for read ahead. This can increase
the read speed of fragmented files.

Update #3689
2021-03-26 14:25:38 +01:00
Frank Kühndel
a479686c11 shell: Remove not functioning fdisk mount/unmount
The shell has an 'fdisk' command which has sub-commands 'mount' and 'unmount'.
These two sub-commands have a bug which causes them to be not able
to mount anything. This proposed patch removes the buggy file
cpukit/libblock/src/bdpart-mount.c and the mount/unmount commands
from 'fdisk' as bug fix. The 'fdisk' command itself is not removed.
The reasons for removing the sub-commands (instead of fixing the issue) are:

  1) The bug has been introduced on 2010-May-31 with commit
     29e92b090c. Since ten years no one
     can use this feature, nor has anybody complained about it.

  2) Besides of the 'fdisk' 'mount' sub-command, the shell has the
     usual 'mount' and 'unmount' commands which can serve as
     substitutes.

  3) There are additional minor issues (see further down) which needed to
     be addressed when the file will be kept.

What follows below is the precise bug description.

The bug is in function rtems_bdpart_mount() which is only be used
by the 'fdisk' shell command to mount all partitions of a disk with a
single command:

> fdisk DISK_NAME mount
>         mounts the file system of each partition of the disk
>
> fdisk DISK_NAME unmount
>         unmounts the file system of each partition of the disk

The whole command does not work because in file
cpukit/libblock/src/bdpart-mount.c line 103 specifies the file system type
of each partition to be "msdos". Yet, "msdos" does not exist. The name
must be "dosfs".

Beside of this fundamental problem, there are more issues with the code
in bdpart-mount.c:

  1) The function returns RTEMS_SUCCESSFUL despite the mount always fails.

  2) The reason for errors is not written to the terminal.

  3) The directory '/mnt' is created but not deleted later on (failure or not).

  3) There is no documentation about this special 'fdisk' feature in the
     RTEMS Shell Guide ('fdisk' is mentioned but its documentation is a
     bit short):
     https://docs.rtems.org/branches/master/shell/
     file_and_directory.html#fdisk-format-disk

  4) Only "msdos" formatted partitions can be mounted and all partitions
     are mounted read-only. This is hard coded and cannot be changed by
     options. Moreover, there is no information about this to the user of
     the shell (i.e. using 'fdisk' mount requires insider knowledge).

How to reproduce:

  1) For testing, I use the 'testsuites/samples/fileio.exe' sample with qemu:

> cd rtems
> env QEMU_AUDIO_DRV="none" qemu-system-arm -net none -nographic \
> -M realview-pbx-a9 -m 256M -kernel \
> build/arm/realview_pbx_a9_qemu/testsuites/samples/fileio.exe

  2) Type any key to stop the timer and enter the sample tool.
     Type 's' to enter the shell, login as 'root' with the password
     shown in the terminal.

  3) Type the following shell commands (they create a RAM disk,
     partition it, register it, format it and try to mount it):

> mkrd
> fdisk /dev/rda fat32 16 write mbr
> fdisk /dev/rda register
> mkdos /dev/rda1
> fdisk /dev/rda mount

  4) The last line above is the command which fails - without an error
  message. There exists a '/mnt' directory but no '/mnt/rda1' directory
  as it should be:

> ls -la /mnt

  5) If you change line 103 of 'cpukit/libblock/src/bdpart-mount.c'
     from "msdos" to "dosfs", compile and build the executable and
     re-run the above test, '/mnt/rda1' exists (but the file system
     is mounted read-only).

Close #4131
2020-10-12 13:18:27 +02:00
Sebastian Huber
b434dc1874 libblock: Fix sparse disk
The qsort() in sparse_disk_get_new_block() may move the appended key
which invalidates the pointer.

Close #4142.
2020-10-12 08:21:42 +02:00
Sebastian Huber
243d3ed51d libblock: Add comment 2020-10-11 15:51:10 +02:00
Frank Kühndel
bc7ac71f8a libblock: Fix string truncation warning
This patch does not only fix the compiler warning below. memcpy() is the
better function at this place as the terminating NUL character is never
copied here. Instead more characters will be appended to the
'logical_disk_name' later on.

../../../cpukit/libblock/src/bdpart-register.c:41:5:
warning: 'strncpy' output truncated before terminating nul copying
as many bytes from a string as its length [-Wstringop-truncation]
2020-10-10 15:04:48 +02:00
Christian Mauderer
87fdb206fa dosfs: Fix memory leak on failed mounts.
Currently if mount fails, a converter isn't destroyed. We have to take
care of two cases:

1. The user doesn't provide a converter.

In this case mounting a dosfs creates a default converter. This patch
makes sure that the converter is destroyed again if mount failes for
this case.

2. The user provides a converter.

In this case it's not sure that the dosfs specific routines are reached
because mount can fail before that. Therefore the user has to destroy
the converter himself again. This patch adds a documentation for that
and implements it in the media server.

Closes #4042.
2020-08-04 08:24:17 +02:00
Christian Mauderer
3a95a07d88 media-server: Add ability for retry.
This adds the possibility to request a retry in the media-listener if an
operation failed. Usefull for example if you want to automatically
reformat a disk if it wasn't possible to mount it.
2020-07-17 08:12:37 +02:00
Sebastian Huber
cfe8f7a9b7 doxygen: Switch @brief and @ingroup
This order change fixes the Latex documentation build via Doxygen.
2020-04-28 09:04:00 +02:00
Sebastian Huber
80cf60efec Canonicalize config.h include
Use the following variant which was already used by most source files:

  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
2020-04-16 07:30:00 +02:00
Sebastian Huber
9c0582870c build: Merge libblock/Makefile.am 2018-10-09 13:26:47 +02:00
Sebastian Huber
f004b2b8dc Use rtems_task_exit()
Update #3530.
Update #3533.
2018-10-02 10:22:15 +02:00
Sebastian Huber
0b038bd48b libblock: Add RTEMS_DEPRECATED
Close #3358.
2018-08-07 07:17:19 +02:00
Sebastian Huber
698093d68d libblock: Use rtems_blkdev_create_partition()
Update #3358.
2018-08-07 07:17:18 +02:00
Sebastian Huber
0fe7133d6e flashdisk: Use rtems_blkdev_create()
Update #3358.
2018-08-07 07:17:17 +02:00
Sebastian Huber
16f3f107bc nvdisk: Use rtems_blkdev_create()
Update #3358.
2018-08-07 07:17:16 +02:00
Sebastian Huber
24b94c4771 ramdisk: Use rtems_blkdev_create()
Update #3358.
2018-08-07 07:17:16 +02:00
Sebastian Huber
30c389849d libblock: Init deps in rtems_blkdev_create()
Update #3358.
2018-05-18 10:44:18 +02:00
Sebastian Huber
a59a61828b libblock: Use self-contained mutex for media
Update #2843.
2018-02-07 08:58:30 +01:00
Sebastian Huber
868ca746c2 libblock: Use self-contained mutex for sparse disk
Update #2843.
2018-02-07 08:58:29 +01:00
Sebastian Huber
f9027ccfd3 libblock: Use self-contained mutex for flashdisk
Update #2843.
2018-02-07 08:58:29 +01:00
Sebastian Huber
c8d5bed13c libblock: Use self-contained mutex for nvdisk
Update #2843.
2018-02-07 08:58:29 +01:00
Sebastian Huber
8d7f36807c libblock: Use self-contained mutex and cond var
Update #2843.
2018-02-02 15:01:21 +01:00
Sebastian Huber
1b2da177ef libblock: Use self-contained mutex for disk lock
Update #2843.
2018-02-02 15:01:21 +01:00
Chris Johns
2afb22b7e1 Remove make preinstall
A speciality of the RTEMS build system was the make preinstall step.  It
copied header files from arbitrary locations into the build tree.  The
header files were included via the -Bsome/build/tree/path GCC command
line option.

This has at least seven problems:

* The make preinstall step itself needs time and disk space.

* Errors in header files show up in the build tree copy.  This makes it
  hard for editors to open the right file to fix the error.

* There is no clear relationship between source and build tree header
  files.  This makes an audit of the build process difficult.

* The visibility of all header files in the build tree makes it
  difficult to enforce API barriers.  For example it is discouraged to
  use BSP-specifics in the cpukit.

* An introduction of a new build system is difficult.

* Include paths specified by the -B option are system headers.  This
  may suppress warnings.

* The parallel build had sporadic failures on some hosts.

This patch removes the make preinstall step.   All installed header
files are moved to dedicated include directories in the source tree.
Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc,
etc.  Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g.
erc32, imx, qoriq, etc.

The new cpukit include directories are:

* cpukit/include

* cpukit/score/cpu/@RTEMS_CPU@/include

* cpukit/libnetworking

The new BSP include directories are:

* bsps/include

* bsps/@RTEMS_CPU@/include

* bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include

There are build tree include directories for generated files.

The include directory order favours the most general header file, e.g.
it is not possible to override general header files via the include path
order.

The "bootstrap -p" option was removed.  The new "bootstrap -H" option
should be used to regenerate the "headers.am" files.

Update #3254.
2018-01-25 08:45:26 +01:00
Sebastian Huber
de59c065c5 posix: Implement self-contained POSIX mutex
POSIX mutexes are now available in all configurations and no longer
depend on --enable-posix.

Update #2514.
Update #3112.
2017-10-05 14:29:02 +02:00
Sebastian Huber
9d1522ed32 Fix IO control request type 2017-07-28 13:28:11 +02:00
Kevin Kirspel
c6bb1c33bc posix/mmap: Add support for file handler and MAP_ANON
Added a mmap file handler to struct _rtems_filesystem_file_handlers_r.
Updated each file handler object to support the default mmap handler.
Updated mmap() to call the mmap handler for MAP_SHARED.
Added a mmap file handler for shm

Added support for MAP_ANON in mmap().

Updates #2859
2017-07-14 16:04:05 -04:00
Sebastian Huber
a66accc553 libblock: FreeBSD kernel-space compatibility
Update #2833.
2017-06-08 11:42:00 +02:00
Sebastian Huber
2711914f82 Use <sys/endian.h>
Update #2803.
2017-01-24 08:39:22 +01:00
Sebastian Huber
c69d6aa265 libblock: Fix for RTEMS_DEBUG 2016-12-12 15:49:59 +01:00
Sebastian Huber
0a9b6eb056 libblock: Fix for RTEMS_DEBUG 2016-11-24 12:04:15 +01:00
Sebastian Huber
89f8d9fcc0 libblock: Use proper semaphore attr for mutex
Close #1452.
2016-06-06 12:57:06 +02:00
Chris Johns
24d0ee57a4 cpukit, testsuite: Add rtems_printf and rtems_printer support.
This change adds rtems_printf and related functions and wraps the
RTEMS print plugin support into a user API. All references to the
plugin are removed and replaced with the rtems_printer interface.

Printk and related functions are made to return a valid number of
characters formatted and output.

The function attribute to check printf functions has been added
to rtems_printf and printk. No changes to remove warrnings are part
of this patch set.

The testsuite has been moved over to the rtems_printer. The testsuite
has a mix of rtems_printer access and direct print control via the
tmacros.h header file. The support for begink/endk has been removed
as it served no purpose and only confused the code base. The testsuite
has not been refactored to use rtems_printf. This is future work.
2016-05-25 15:47:34 +10:00
Sebastian Huber
d8ec270b33 libblock: Drop superfluous <stdlib.h> include
Drop superfluous <stdlib.h> include from <rtems/diskdevs.h> since this
leads to conflicts with the latest Newlib in case this header file is
used in the FreeBSD kernel space, e.g. for USB mass storage support.
2016-04-07 10:29:09 +02:00
Sebastian Huber
47a471a7dd libblock: Fix ramdisk::free_at_delete_request init
Avoid uninitialized ramdisk::free_at_delete_request.  The error was
visible in sporadic libtests/block01 failures.
2016-01-15 14:19:16 +01:00
Sebastian Huber
08a807b0ad libblock: Print block sizes and count 2015-11-02 08:21:49 +01:00
Sebastian Huber
09d4f629b2 libblock: Avoid NULL pointer access 2015-11-02 08:21:49 +01:00
Sebastian Huber
f97536dcd3 basdefs.h: Add and use RTEMS_UNUSED 2015-10-26 09:13:19 +01:00
Sebastian Huber
c52568dcdb basdefs.h: Add and use RTEMS_DEPRECATED 2015-10-26 09:13:19 +01:00
Sebastian Huber
5d42857662 libblock: Fix warning 2015-03-05 11:23:08 +01:00
Sebastian Huber
cf36b70e8d IMFS: Replace node union with individual struct
This reduces the average node size.

Add and use IMFS_GENERIC_INITIALIZER().
2015-01-27 06:54:22 +01:00
Sebastian Huber
3b4ca3ab0f bdbuf: Fix race condition with sync active flag
Bug report by Oleg Kravtsov:

In rtems_bdbuf_swapout_processing() function there is the following
lines:

if (bdbuf_cache.sync_active && !transfered_buffers)
{

    rtems_id sync_requester;
    rtems_bdbuf_lock_cache ();
    ...

}

Here access to bdbuf_cache.sync_active is not protected with anything.
Imagine the following test case:

1. Task1 releases buffer(s) with bdbuf_release_modified() calls;

2. After a while swapout task starts and flushes all buffers;

3. In the end of that swapout flush we are before that part of code, and
assume there is task switching (just before "if (bdbuf_cache.sync_active
&& !transfered_buffers)");

4. Some other task (with higher priority) does bdbuf_release_modified
and rtems_bdbuf_syncdev().

This task successfully gets both locks sync and pool (in
rtems_bdbuf_syncdev() function), sets sync_active to true and starts
waiting for RTEMS_BDBUF_TRANSFER_SYNC event with only sync lock got.

5. Task switching happens again and we are again before "if
(bdbuf_cache.sync_active && !transfered_buffers)".

As the result we check sync_active and we come inside that "if"
statement.

6. The result is that we send RTEMS_BDBUF_TRANSFER_SYNC event! Though
ALL modified messages of that task are not flushed yet!

close #1485
2014-11-28 10:56:46 +01:00
Sebastian Huber
e681762704 bdbuf: Use rtems_cache_aligned_malloc() 2014-11-25 16:12:59 +01:00
Sebastian Huber
3bb9c61c58 bdbuf: Use rtems_cache_get_data_line_size() 2014-11-20 11:36:07 +01:00
Sebastian Huber
40dcafaf80 Add and use RTEMS_CONTAINER_OF() 2014-08-05 09:30:33 +02:00