Commit Graph

64 Commits

Author SHA1 Message Date
Konrad Dybcio
33e1e40615
Merge pull request #18 from ipearworks/fix
sharedmem: Fix incorrect usages of `strerror`
2024-03-18 17:09:52 +01:00
Konrad Dybcio
a2df4bd096
Merge pull request #20 from z3ntu/qrtr-ns
rmtfs.service.in: Remove dependency on qrtr-ns.service
2024-03-18 17:09:02 +01:00
Konrad Dybcio
e4e6212c86 Tag stable release
This is the last commit before repository transfer.

It may be useful for some distros which have been shipping this package
for some time already
2024-03-18 17:07:59 +01:00
Luca Weiss
44fcb2ec64 rmtfs.service.in: Remove dependency on qrtr-ns.service
The QRTR nameserver has been built into the kernel for years now, drop
the dependency since qrtr-ns.service won't do anything anyways.
2024-03-11 11:02:29 +01:00
Tianyi Liu
75cb81d197 sharedmem: Fix incorrect usages of strerror
`strerror` takes the `errno` directly as its argument,
negating it will result in an "Unknown error".

Signed-off-by: Tianyi Liu <i.pear@outlook.com>
2024-02-06 15:03:46 +08:00
bbeaavr
7a5ae7e0a5 Add "modem_tng" alias for tunning partition 2023-01-17 23:01:35 -06:00
Luca Weiss
695d0668ff storage: fix out of bounds read
Given that shadow_len is size_t (unsigned integer), subtracting a number
from it will make it wrap around < 0 and become positive again so the
subsequent "if (n > 0)" check will be mostly useless. On AOSP this makes
rmtfs segfault, on Linux distributions rmtfs happily reads beyond the
end of the buf.

Fix this by casting both parameters to ssize_t (which is signed) to
correctly use the if and not read beyond the end of shadow_buf.

Relevant trace using extra debug statements:
  storage_populate_shadow_buf: file=/dev/disk/by-partlabel/fsg shadow_buf=0xffffa5217060 shadow_len=0x280000
  <snip>
  storage_pread: memcpy shadow_buf=0xffffa5217060 offset=0x27fc00 n=0x200
  storage_pread: memcpy shadow_buf=0xffffa5217060 offset=0x27fe00 n=0x200
  storage_pread: memcpy shadow_buf=0xffffa5217060 offset=0x280000 n=0x0 - don't read!
  storage_pread: memcpy shadow_buf=0xffffa5217060 offset=0x280200 n=0x200
  storage_pread: memcpy shadow_buf=0xffffa5217060 offset=0x280400 n=0x200
  storage_pread: memcpy shadow_buf=0xffffa5217060 offset=0x280600 n=0x200
  storage_pread: memcpy shadow_buf=0xffffa5217060 offset=0x280800 n=0x200
  <snip>

Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2022-07-18 15:27:49 -05:00
Evan Green
b08ef6f98e Use fdatasync instead of O_SYNC on storage
Opening the backing files with O_SYNC makes things really slow. So slow
in fact that the modem times out after 10 seconds waiting for the last
EFS sync to go through. I think this takes forever because rmtfs is
doing 512-byte reads and writes.

One option would be to make this bigger. But a better option is to not
use O_SYNC, but explicitly do an fdatasync() after the iovec operation
is complete. This is better because 1) it's way faster, we no longer see
10-12 second delays at rebooto time, and 2) partial syncs of the EFS
file aren't useful anyway.

Use fdatasync() as opposed to fsync() since it's not important for the
metadata to be synced, just the file contents.

Signed-off-by: Evan Green <evangreen86@gmail.com>
2021-08-09 14:33:25 -07:00
Bjorn Andersson
293ab8babb storage: Sync changes
Open the storage devices as O_SYNC, to make sure modem writes aren't
lingering in the event of power loss or sudden reboot.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2021-04-08 11:56:53 -05:00
Bjorn Andersson
1cc12d3dc1 storage: Use storage_close() to free up resources on exit
Use storage_close() to free up the shadow buffers as well, to avoid any
lingering allocations.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2020-12-07 08:43:18 -08:00
Bjorn Andersson
bf5cb9faf2 rproc: Make start & stop threads detached
We're not joining the start and stop threads, so create them in detached
state to avoid having their resources lingering.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2020-12-07 08:42:05 -08:00
Bjorn Andersson
30f5dfb890 rproc: NUL-terminate the modalias
According to valgrind the modalias read from the remoteproc device is
not NUL-terminated, so do this to avoid reading in the weeds.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2020-12-07 08:17:04 -08:00
Bjorn Andersson
8a1d24a704 rproc: Make state update errors more helpful
Include the reason for the failure to update the "state" sysfs
attribtue in the error message.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2020-12-07 08:16:18 -08:00
Bjorn Andersson
3449744146 rproc: Support -s for PAS based remoteproc as well
The old mechanism searched for remoteproc instances from the
qcom_q6v5_mss driver, but in modern platforms the MSA based remoteproc
model has been replaced by the PAS based one. As such we use the common
qcom_q6v5_pas driver - as with other subsystems.

Use the modalias to find remoteproc drivers with the mpss-pas or mss-pil
compatible to find these, and fall back to the old heuristics if this
fails.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2020-11-21 00:02:39 -06:00
Bjorn Andersson
710e6cf908 rmtfs: Exit even though there's no rprocfd
Attempting to shut down a system with rmtfs running without an
associated remoteproc results in systemd waiting forever for the
remoteproc code to never signal that it's done.

Instead exit immediately when signalled, when there's no associated
remoteproc.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2020-11-20 23:21:05 -06:00
Vincent Knecht
417f04a9a7 storage: Add modem_tunning partition needed for Alcatel Idol 3 devices 2020-11-13 09:02:56 -08:00
John Stultz
0d00985e5e sharedmem: Fix pointer arithmetic warnings.
Building rmtfs on AOSP, we see a lot of the following:
  warning: arithmetic on a pointer to void is a GNU extension

Fix this by casting the void* ptrs to char* when doing pointer
arithmatic.

Signed-off-by: John Stultz <john.stultz@linaro.org>
[AmitP: Fixed cherry-pick conflicts and updated commit log]
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2020-09-28 10:08:11 -05:00
Amit Pundir
5b1471efa8 storage: Use -o option to override partition by-name
Instead of hardcoding BY_PARTLABEL_PATH for AOSP,
reuse -o option as suggested by Bjorn to expand John's
patch to find correct partition by-name on newer
kernels (which is /dev/block/platform/soc*/*.*/by-name).

For example: On db845c running v5.4+ kernel we run:
rmtfs -o /dev/block/platform/soc@0/1d84000.ufshc/by-name -P -r -s

Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2020-09-28 10:07:23 -05:00
Amit Pundir
ad5f456c18 sharedmem: Keep /dev/qcom_rmtfs_memX fd open
/dev/qcom_rmtfs_mem0 fd is required to share the data.

Fixes: 9ef260ba6f ("ANDROID: Add Android support")
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2020-09-28 10:07:20 -05:00
Amit Pundir
9ef260ba6f ANDROID: Add Android support
* Add Android.bp makefile to build rmtfs for AOSP.
* libudev is not supported on AOSP so read
  /sys/class/rmtfs sysfs entries directly.

Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2020-02-03 09:13:59 -08:00
Aníbal Limón
dfb8f3ed1c rmtfs.service.in: Add RestartSec to 1 sec intervals
Systemd has a default restart policy of 5 retries so wait
1 second in each retry because if is too fast will fail to
start properly.

Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
2020-01-30 22:09:44 -08:00
Aníbal Limón
29eb4a5b06 rmtfs.c: Exit when fail to get rprocfd
When -s option is specified rmtfs handled the start of rproc
but at init may be the /sys entries are not fully populated yet
due to module load/setup so exit with 1 and let systemd restart
the service.

Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
2020-01-30 11:16:22 -08:00
Bjorn Andersson
df6c19d033 storage: Track opened files without backing storage
Upon populating the shadow_buf the no fd is associated with the rmtfd.
Therefor the next open request will conclude that the rmtfd is available
and use the same entry. Fix this by checking for both associated fd and
shadow_buf in the open call.

Fixes: c35633ab23 ("storage: Allow read only backing storage")
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2019-07-28 13:11:53 -07:00
Bjorn Andersson
6d2cfcddfc rmtfs.service: Add systemd service
Add rmtfs.service and install this.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2019-07-25 11:18:58 -07:00
Sibi Sankar
976aa0ddbe rmtfs: Sync rmtfs server with rproc instance
Add sigterm/sigint handlers to enable graceful rmtfs server
bringdown on first instance of SIGINT/SIGTERM. Start/Stop the
remoteproc instance on RMTFS service up and SIGINT/SIGTERM
respectively. Force quit on second instance of SIGINT/SIGTERM.

Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
[bjorn: Pipe for event loop signaling, reworked /sys traversal]
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2019-07-19 00:24:35 -07:00
Bjorn Andersson
42edb9c07a storage: Support operating on raw partitions
Most devices has partitions named modemst1, modemst2, fsg and fsc
backing the rmtfs. Add a new argument '-P' to get the storage
implementation to use these partitions directly instead of files.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2019-07-17 12:23:19 -07:00
Bjorn Andersson
c35633ab23 storage: Allow read only backing storage
Add a new argument '-r' to prevent writes back to the backing storage.
This is useful for experimenting with the remote storage, without having
the files overwritten.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2019-07-17 12:23:02 -07:00
Bjorn Andersson
e6d703b3c8 storage: Revise API
Pass "struct rmtfd" instead of file descriptors in the interface. This
cleans up the api a little bit, but more importantly allow us to
associate additional things with the remote file descriptors.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2019-07-17 12:22:26 -07:00
Bjorn Andersson
152b96981e storage: Rename caller to "remote fd"
The caller (and caller_id) are really "remote file descriptors", so
rename them based on this.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2019-07-17 12:22:26 -07:00
Bjorn Andersson
886608484b rmtfs: Use pread/pwrite for storage
Instead of relying on an initial lseek, use pread/pwrite. This creates a
cleaner interface towards the storage.c implementation, allowing us to
provide a memory-only implementation of the backing storage.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2019-07-17 12:22:26 -07:00
Evan Green
cfb76ff6ee storage: Allow specifying the storage directory
Enable the specification of storage paths other than /boot, using
a new -o command line argument. Getoptify the command line arguments
for better processing.
2018-12-19 09:21:06 -08:00
Evan Green
08d20f1646 rmtfs: Better support for EFS backed by files
Currently, in order to back the EFS storage with a regular file,
those files have to be pre-allocated, and with their correct size.
This is especially problematic when preparing a minimal FSG, since
we do not know ahead of time what size to pre-allocate.

Allow reads that go beyond the end of the backing storage to simply
read zeroes. When a write comes in, the file will be automatically
expanded to the correct size. (And should really only be written
if a full sector was pulled out of the modem). For solutions
that use partitions instead of files, this change should be a no-op.
2018-12-19 09:21:06 -08:00
Ben Chan
0d3c49ec5a rmtfs: remove unused cpu_to_le32 and le32_to_cpu functions
This patch addresses the following compiler warnings on unused function:

  rmtfs.c:24:22: warning: unused function 'cpu_to_le32' [-Wunused-function]
  static inline __le32 cpu_to_le32(uint32_t x) { return htole32(x); }
                       ^
  rmtfs.c:25:24: warning: unused function 'le32_to_cpu' [-Wunused-function]
  static inline uint32_t le32_to_cpu(__le32 x) { return le32toh(x); }
                       ^
2018-07-26 06:34:05 -07:00
Ben Chan
b3ea7fdf7b rmtfs: fix the type of the phys_address argument of rmtfs_mem_ptr()
The 'phys_address' argument of rmtfs_mem_read() and rmtfs_mem_write() is
an 'unsigned long' type value, which is then passed to the
'phys_address' argument of rmtfs_mem_ptr(), which is an 'unsigned int'
type value. This patch fixes the mismatch.

Signed-off-by: Ben Chan <benchan@chromium.org>
2018-07-05 07:10:30 -07:00
Brian Norris
577aedad06 sharedmem: use 'unsigned long long' for memory region parsing
I see warnings like this:

sharedmem.c:89:44: warning: incompatible pointer types passing 'uint64_t *' (aka 'unsigned long long *') to parameter of type 'unsigned long *' [-Wincompatible-pointer-types]

Since 'unsigned long' might actually be smaller than 'uint64_t', we
should really upgrade to 'unsigned long long' parsing.

At the same time, the existing error handling was wrong: it should have
been looking for ULONG_MAX (per the man page). Convert that to
ULLONG_MAX to fix that bug while we're at it.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
2018-07-05 07:01:36 -07:00
Brian Norris
5eb67a1fb5 Makefile: allow $(CFLAGS), $(LDFLAGS) override
The caller might have specified CFLAGS or LDFLAGS. Let's respect those.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
2018-07-05 07:01:36 -07:00
Joey Hewitt
a75ad5dc2a sharedmem: support uio device
Also a fix to error-reporting for opening the storage.
2018-05-21 17:05:29 -07:00
Bjorn Andersson
0f800fa433 rmtfs: Don't include ../qrtr
While convenient it's easy to mess things up with the qrtr project in
the include and library path. Drop these and rely on the installed
version of the include and library files.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2018-02-01 05:04:50 +00:00
Bjorn Andersson
96a272bccb qmic: Use kernel-style qmic output
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2018-01-31 20:56:57 -08:00
Bjorn Andersson
cff3f619d5 qmi_rmtfs: Update definition file to match the generated files
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2018-02-01 04:39:46 +00:00
Bjorn Andersson
42ed7b4e4c rmtfs: Rework message pump
The message pump is cleaned up from cruft that was added to deal with
multiple services (rmtfs and rfsa) as well as ENETRESET handling.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2018-02-01 02:28:17 +00:00
Bjorn Andersson
db86a3b1a5 rmtfs: Migrate to new QMI encoder/decoder library
Utilize the QMI encoder/decoder functions being part of libqrtr instead
of rolling our own.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2018-02-01 02:09:35 +00:00
Bjorn Andersson
343817e402 rmtfs: Drop the rfsa service
The rfsa service is not used on any supported targets and should most
likely be implemented in the kernel driver directly, so remove any
traces of it from rmtfs.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2017-09-06 23:15:48 -07:00
Bjorn Andersson
91f765efa8 rmtfs: Update dev node of rmtfs_mem
The kernel driver exposing the shared memory was renamed, update the
path in rmtfs as well.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2017-09-06 23:15:48 -07:00
Bjorn Andersson
93f9564224 rmtfs: Interface qcom_rfsa device for mem access
Attempt to open /dev/qcom_rfsa1 and use this instead of memory mapping
/dev/mem, while falling back to the old behavior. This allow us to drop
the dependency on /dev/mem access and will aid supporting multiple
memory regions.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2017-07-28 16:30:05 -07:00
Bjorn Andersson
c7822e84b1 rmtfs: Extract rmtfs mem IO operations
Rather than exposing a pointer to the mmapped memory and performing IO
directly on this address pass the data through a local buffer and move
the reading and writing of memory into the sharedmem module.

This allows us to support shared memory that is not memory mapped in the
future.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2017-07-28 16:26:09 -07:00
Bjorn Andersson
6b7646c45f rmtfs: Move rmtfs_mem data to struct
Introduce a struct to pass around the parameters related to the rmtfs
memory, in preparation for supporting multiple memory regions.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2017-07-28 16:21:15 -07:00
Bjorn Andersson
9fb35632fc rmtfs: Newline error prints in rmtfs
As a leftover from previous usage of err(3) the error prints did not end
with a newline.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2017-07-28 16:21:15 -07:00
Bjorn Andersson
2d0be77c2e rmtfs: Re-register services as the nameserver restarts
When the nameserver restarts we need to re-register the services.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2017-06-07 10:54:42 -07:00
Bjorn Andersson
0579b3b33c rfsa: Silence informational messages related to rfsa service
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2017-06-07 10:53:26 -07:00