Promote to 1.0.7 - #87
Open
qcom-service-bot wants to merge 41 commits into
Open
Conversation
-Add a dsp_check diagnostic utility to evaluate DSP availability and FastRPC offload readiness across supported DSPs. This determines DSP online state using remoteproc, validates firmware presence, checks required DSP runtime modules, verifies FastRPC user-space libraries, and reports device node availability. Clear reasons are provided when offload is not possible. -Works for both Linux and Android targets. -Documentation for the user is included to describe this readiness criteria and explain how to interpret the reported output. Note: Whitespace changes (CRLF -> LF) are included in this commit. Signed-off-by: Mahima Bhattaram <mbhattar@qti.qualcomm.com>
Adds a dsp_check utility to assess DSP availability and FastRPC offload readiness, along with user-facing documentation explaining the readiness criteria.
Exit the internal restart loop on AEE_ENOMEMORY so the daemon does not spin indefinitely when the kernel reports OOM; it is pointless to retry in that condition. Add RestartForceExitStatus=SIGTERM to all service files so that an unintended SIGTERM (e.g. pkill) is treated as a failure and triggers a restart, consistent with SIGKILL behavior. Add RestartPreventExitStatus=2 (AEE_ENOMEMORY) to the audiopd service only, since the kernel returns ENOMEM when the remote heap DMA region is not configured, which is a permanent condition that restarting cannot recover from. Signed-off-by: Vinayak Katoch <vinayak.katoch@oss.qualcomm.com>
Add --with-sysusersdir and --with-udevrulesdir to DISTCHECK_CONFIGURE_FLAGS with relative paths, keeping the distcheck install self-contained under the temporary _inst prefix. Signed-off-by: Anand Kulkarni <anankulk@qti.qualcomm.com>
Free hi->name & h->name in cleanup path, and free pdname_uri in open path. Add lock/unlock around pop loop in REVERSE_HANDLE_LIST_ID cleanup. Signed-off-by: Eddie Lin <yutlin@qti.qualcomm.com>
Add a new config deinit path to free FARF log filename buffers allocated during config init, ensuring init/deinit are paired. Signed-off-by: Eddie Lin <yutlin@qti.qualcomm.com>
Free hi->name & h->name in cleanup path, and free pdname_uri in open path. Add lock/unlock around pop loop in REVERSE_HANDLE_LIST_ID cleanup. Add a new config deinit path to free FARF log filename buffers allocated during config init, ensuring init/deinit are paired.
…#358) ## Fix `distcheck` failures caused by absolute sysusers/udev paths ### Problem - `make distcheck` failed because `sysusersdir` and `udevrulesdir` default to absolute system paths: - `/usr/lib/sysusers.d` - `/usr/lib/udev/rules.d` - The `distcheck` environment is unprivileged and cannot install files into these locations. ### Solution - Add `--with-sysusersdir` and `--with-udevrulesdir` to `DISTCHECK_CONFIGURE_FLAGS`. - Configure both directories to use relative paths within the build tree instead of system locations. ### Result - Prevents installation attempts to protected system directories during `distcheck`. - Aligns with the existing `systemdsystemunitdir` override. - Allows `make distcheck` to complete successfully in isolated build environments.
GDSP0 and GDSP1 domains are missing from usage instructions and test support. The test binary and its usage instructions need to reflect these domains so that users can target them when running tests. Signed-off-by: Dhruv Menon <dhrumeno@qti.qualcomm.com>
- FASTRPC_GET_URI: split combined uri/uri_len check so an insufficient output buffer returns AEE_EBADSIZE instead of AEE_EBADPARM - remote_munmap64: reject zero and negative size with AEE_EBADPARM before the value reaches the kernel ioctl; remote_munmap inherits this via its int64_t cast and delegation Signed-off-by: Vinayak Katoch <vinayak.katoch@oss.qualcomm.com>
- Guard against size_t overflow before buf.size = size + PAGE_SIZE, using SIZE_MAX as the correct upper bound for size_t arithmetic - Fix mmap failure detection by checking MAP_FAILED instead of NULL - Change rpc_info::size from int to size_t to avoid truncation in munmap - Remove erroneous free() on mmap'd pointer in bail; simplify cleanup - Fix size <= 0 comparison with unsigned size_t, use size == 0 - Add size <= 0 guard in rpcmem_alloc() to reject negative values without breaking the existing int size API - Reset dmafd/rpcfd to -1 after close() in rpcmem_deinit() - Remove dead aligned_buf computation overwritten on the next line - Remove unused struct fastrpc_alloc_dma_buf Signed-off-by: Vinayak Katoch <vinayak.katoch@oss.qualcomm.com>
Signed-off-by: Eddie Lin <yutlin@qti.qualcomm.com>
On a system with multiple YAML files under conf.d/, the daemon emits a DSP_LIBRARY_PATH not found warning for every file that does not contain an entry for the running machine. With 17+ YAML files installed, this floods journalctl with noise on every daemon startup. Root cause: get_dsp_lib_path() emitted a warning whenever the target machine name was not found in a given file. parse_config_dir() called it for every YAML file unconditionally, so a warning was printed for each file that legitimately belongs to a different board. Fix: Remove the per-file warning from get_dsp_lib_path(). Read every YAML file in conf.d/ unconditionally so that all target configurations are checked. On a single root filesystem supporting multiple targets, each target has its own YAML file and all must be scanned to find the matching machine. The existing summary warning for no match across all files is preserved, giving exactly one diagnostic when something is genuinely wrong. Signed-off-by: Vinayak Katoch <vinayak.katoch@oss.qualcomm.com>
Distributions such as Debian require manual pages for installed binaries. The FastRPC daemons currently do not have associated documentation. Provide manual pages for the FastRPC user API and daemon interfaces. Use a single daemon manual page for the various DSP daemon names and install the appropriate aliases during installation so the documentation remains consistent across compatibility entry points. Fixes: #229 Related to: #321 Signed-off-by: Mahima Bhattaram <mbhattar@qti.qualcomm.com>
…362) On a system with multiple YAML files under conf.d/, the daemon emits a DSP_LIBRARY_PATH not found warning for every file that does not contain an entry for the running machine. With 17+ YAML files installed, this floods journalctl with noise on every daemon startup. Root cause: get_dsp_lib_path() emitted a warning whenever the target machine name was not found in a given file. parse_config_dir() called it for every YAML file unconditionally, so a warning was printed for each file that legitimately belongs to a different board. Fix: Remove the per-file warning from get_dsp_lib_path(). Read every YAML file in conf.d/ unconditionally so that all target configurations are checked. On a single root filesystem supporting multiple targets, each target has its own YAML file and all must be scanned to find the matching machine. The existing summary warning for no match across all files is preserved, giving exactly one diagnostic when something is genuinely wrong. Fixes: #322 CRs-Fixed: 4604037
… (#360) - Guard against size_t overflow before buf.size = size + PAGE_SIZE, using SIZE_MAX as the correct upper bound for size_t arithmetic - Fix mmap failure detection by checking MAP_FAILED instead of NULL - Change rpc_info::size from int to size_t to avoid truncation in munmap - Remove erroneous free() on mmap'd pointer in bail; simplify cleanup - Fix size <= 0 comparison with unsigned size_t, use size == 0 - Add size <= 0 guard in rpcmem_alloc() to reject negative values without breaking the existing int size API - Reset dmafd/rpcfd to -1 after close() in rpcmem_deinit() - Remove dead aligned_buf computation overwritten on the next line - Remove unused struct fastrpc_alloc_dma_buf CRs-Fixed: 4601066
- FASTRPC_GET_URI: split combined uri/uri_len check so an insufficient output buffer returns AEE_EBADSIZE instead of AEE_EBADPARM - remote_munmap64: reject zero and negative size with AEE_EBADPARM before the value reaches the kernel ioctl; remote_munmap inherits this via its int64_t cast and delegation CRs-Fixed: 4597612
This update expands the FastRPC test application to include execution options for GDSP, GDSP1. CRs-fixed: 4585075
Exit the internal restart loop on AEE_ENOMEMORY so the daemon does not spin indefinitely when the kernel reports OOM; it is pointless to retry in that condition. Add RestartForceExitStatus=SIGTERM to all service files so that an unintended SIGTERM (e.g. pkill) is treated as a failure and triggers a restart, consistent with SIGKILL behavior. Add RestartPreventExitStatus=2 (AEE_ENOMEMORY) to the audiopd service only, since the kernel returns ENOMEM when the remote heap DMA region is not configured, which is a permanent condition that restarting cannot recover from. CRs-Fixed: 4585150
Distributions such as Debian require manual pages for installed binaries. The FastRPC daemons currently do not have associated documentation. Provide manual pages for the FastRPC user API and daemon interfaces. Use a single daemon manual page for the various DSP daemon names and install the appropriate aliases during installation so the documentation remains consistent across compatibility entry points. Fixes: #229 Related to: #321 CRs-Fixed: 4600851
Remove workflows and actions for pre-merge board builds, LAVA testing, and nightly kernel build. LAVA tests are now handled externally and post results back to each PR. Signed-off-by: Anand Kulkarni <anankulk@qti.qualcomm.com>
For any remote call to DSP, after sending an invocation message,
fastRPC driver waits for glink response and during this time the
CPU can go into low power modes. With polling mode support fastRPC
driver can poll continuously on a memory after sending a message
to remote subsystem which will eliminate CPU wakeup and scheduling
latencies and reduce fastRPC overhead. With this change, DSP always
sends a glink response which will get ignored if polling mode didn't
time out.
Steps to enable polling mode:
** Remote control structure **:
typedef enum remote_rpc_latency_flags {
RPC_DISABLE_QOS = 0,
RPC_PM_QOS,
RPC_ADAPTIVE_QOS,
RPC_POLL_QOS,
} remote_rpc_control_latency_t;
struct remote_rpc_control_latency {
remote_rpc_control_latency_t enable;
uint32_t latency;
};
** Application code **:
struct remote_rpc_control_latency data;
data.enable = RPC_POLL_QOS;
err = remote_handle64_control(h, DSPRPC_CONTROL_LATENCY, (void*)&data, sizeof(data));
Signed-off-by: Ekansh Gupta <ekansh.gupta@oss.qualcomm.com>
Replace the global DSP_LIBS_LOCATION in get_dsp_search_path() with a
per-domain DSP_SEARCH_PATHS_CACHE[], built lazily in domain_init().
Search path preference order for each domain:
1. ADSP_LIBRARY_PATH env (user/container, prepended at open-time)
2. Arch-specific path (CONFIG_BASE_DIR/hexagon/v<XY>)
- Resolved via fastrpc_get_cap(ARCH_VER) low byte on modern targets
- Falls back to per-domain YAML key (ADSP_ARCH..CDSP_ARCH) on
legacy targets where the capability API is not supported
3. DSP_LIBS_LOCATION (board-specific YAML path + generic fallback)
Add optional *_ARCH keys to the config schema and parse them into
DSP_ARCH_FROM_YAML[] in fastrpc_config_parser.c, exposed via
get_dsp_arch_from_yaml().
Update conf_guideline.md to document the new *_ARCH keys, relative path
convention, per-file layout, and updated naming scheme.
Signed-off-by: Vinayak Katoch <vkatoch@qti.qualcomm.com>
Document the role of FastRPC daemons (adsprpcd, cdsprpcd, etc.) and clarify when they are needed. Explains that FastRPC works in two modes: - Basic mode (without daemons): All RPC calls work, but static PD exceptions are silent and static PDs cannot access system services on APPS (dynamic PDs are unaffected) - Full-featured mode (with daemons): Adds exception logging, reverse RPC for file I/O and memory allocation, lifecycle management (SSR/PDR) Clarifies the distinction between static PDs (root PD, audio PD, sensors PD) which need daemons for system services, and dynamic PDs which communicate directly with their APPS process. Includes resource usage details with references to specific constants in the source code (ADSP_LISTENER_MEM_CACHE_SIZE, DEFAULT_MEMORY_SIZE), and defines technical terms (PDs, HLOS/Linux, APPS, FARF, QuRT, ACDB). Closes: #321 Signed-off-by: Loïc Minier <loic.minier@oss.qualcomm.com> Signed-off-by: Ekansh Gupta <ekansh.gupta@oss.qualcomm.com>
Add Container Considerations section documenting filesystem namespace implications for static vs dynamic PD workloads in containerized environments. Most ML/compute workloads (dynamic PDs) work fine; audio workloads (static PDs) need host filesystem coordination. Signed-off-by: Loïc Minier <loic.minier@oss.qualcomm.com> Signed-off-by: Ekansh Gupta <ekansh.gupta@oss.qualcomm.com>
## Summary This PR removes the GitHub Actions CI/CD implementation from the FastRPC repository, including custom composite actions, reusable workflows, machine configuration definitions, and supporting automation for build, artifact management, and LAVA-based validation. The following components have been removed: - Custom composite actions for: - AWS S3 artifact upload/download management - Workspace synchronization - Docker image creation - FastRPC build and packaging - LAVA job rendering - Build matrix generation - Reusable and top-level workflows for: - Pre-merge CI execution - Sync and build orchestration - LAVA test execution - Parameter loading - Nightly kernel build and artifact publication - Machine configuration data: - `ci/MACHINES.json` ## Impact - Removes CI/CD workflow definitions and supporting actions from the FastRPC repository. - Removes AWS S3 artifact management helpers. - Removes LAVA job generation, submission, monitoring, and result collection automation from this repository. - Removes device matrix generation and machine-specific build configuration handling. - Eliminates all repository-specific GitHub Actions CI/CD components. **Note:** This change does **not** remove the FastRPC pre-merge build and test pipeline itself. The CI/CD workflows will continue to be executed from dedicated CI configuration repositories: - **STG:** `fastrpc-config` - **PROD:** `fastrpc-ci` This PR only migrates ownership of the workflow definitions away from the FastRPC source repository. ## Motivation This change centralizes CI/CD workflow management in dedicated configuration repositories, reducing maintenance overhead within the FastRPC repository and enabling independent management of build and validation infrastructure. ## Validation - Verified removal of all CI/CD-related GitHub Actions, workflows, and machine configuration files from the FastRPC repository. - Confirmed that pre-merge build and test execution will continue through the centralized CI repositories (`fastrpc-config` and `fastrpc-ci`). - Confirmed that the change does not modify FastRPC source code or runtime functionality.
Replace the global DSP_LIBS_LOCATION in get_dsp_search_path() with a
per-domain DSP_SEARCH_PATHS_CACHE[], built lazily in domain_init().
Search path preference order for each domain:
1. ADSP_LIBRARY_PATH env (user/container, prepended at open-time)
2. Arch-specific path (CONFIG_BASE_DIR/hexagon/v\<XY>)
- Resolved via fastrpc_get_cap(ARCH_VER) low byte on modern targets
- Falls back to per-domain YAML key (ADSP_ARCH..CDSP_ARCH) on legacy
targets where the capability API is not supported
3. DSP_LIBS_LOCATION (board-specific YAML path + generic fallback)
Add optional *_ARCH keys to the config schema and parse them into
DSP_ARCH_FROM_YAML[] in fastrpc_config_parser.c, exposed via
get_dsp_arch_from_yaml().
Update conf_guideline.md to document the new *_ARCH keys, relative path
convention, per-file layout, and updated naming scheme.
CRs-Fixed: 4608348
For any remote call to DSP, after sending an invocation message, fastRPC
driver waits for glink response and during this time the CPU can go into
low power modes. With polling mode support fastRPC driver can poll
continuously on a memory after sending a message to remote subsystem
which will eliminate CPU wakeup and scheduling latencies and reduce
fastRPC overhead. With this change, DSP always sends a glink response
which will get ignored if polling mode didn't time out.
Steps to enable polling mode:
** Remote control structure **:
typedef enum remote_rpc_latency_flags {
RPC_DISABLE_QOS = 0,
RPC_PM_QOS,
RPC_ADAPTIVE_QOS,
RPC_POLL_QOS,
} remote_rpc_control_latency_t;
struct remote_rpc_control_latency {
remote_rpc_control_latency_t enable;
uint32_t latency;
};
** Application code **:
struct remote_rpc_control_latency data;
data.enable = RPC_POLL_QOS;
err = remote_handle64_control(h, DSPRPC_CONTROL_LATENCY, (void*)&data,
sizeof(data));
CRs-Fixed: 4624233
Document the role of FastRPC daemons (adsprpcd, cdsprpcd, etc.) and clarify when they are needed. Explains that FastRPC works in two modes: - Basic mode (without daemons): All RPC calls work, but DSP exceptions are silent and DSP cannot access system services on APPS - Full-featured mode (with daemons): Adds exception logging, remote file I/O, and memory allocation services Closes: #321
Update linkage from libcdsprpc.so to libcdsprpc.so.1 in test shared libraries to ensure compatibility on Meta-qcom platforms. Signed-off-by: Dhruv Menon <dhrumeno@qti.qualcomm.com>
Replace linkage from libcdsprpc.so to libcdsprpc.so.1 in test shared libraries to ensure compatibility on Meta-qcom platforms. CRs-fixed: 4628509
open_shell() previously only searched for domain-suffixed shell names (e.g. fastrpc_shell_3). Extract the multi-location search into try_open_shell_file() and retry with the base name (fastrpc_shell) when the suffixed name isn't found, since some targets ship the shell without the domain suffix. Also fix an undersized domain_str allocation (malloc(sizeof(int)) instead of a string buffer) and guard against a NULL fh being dereferenced by apps_std_fopen(). Signed-off-by: Anandu Krishnan E <anane@qti.qualcomm.com>
open_shell() previously only searched for domain-suffixed shell names (e.g. fastrpc_shell_3). Extract the multi-location search into try_open_shell_file() and retry with the base name (fastrpc_shell) when the suffixed name isn't found, since some targets ship the shell without the domain suffix. Also fix an undersized domain_str allocation (malloc(sizeof(int)) instead of a string buffer) and guard against a NULL fh being dereferenced by apps_std_fopen(). CRs-Fixed: 4640293
This commit pulls in upstream changes from 'v1.0.7' into the Debian packaging branch. Since upstream project might have content of their own in their .github/ folder (because they have CI stuff on their side), it's important to NOT pick up .github/ folder from upstream, and only leave the .github/ folder from debian packaging branch. The same applies to debian/ folder if upstream has one (which is rare but possible). This commit was generated automatically by qcom-build-utils/scripts/merge_debian_packaging_upstream. Signed-off-by: GitHub Service Bot <githubservice@qti.qualcomm.com>
Signed-off-by: GitHub Service Bot <githubservice@qti.qualcomm.com>
Robie Basak (basak-qcom)
marked this pull request as draft
August 21, 2026 10:03
Signed-off-by: Robie Basak <robie.basak@oss.qualcomm.com>
Signed-off-by: Robie Basak <robie.basak@oss.qualcomm.com>
This is inappropriate to land in the /usr/bin/ namespace, so installing it into /usr/libexec for now. Upstream bug to resolve properly: qualcomm/fastrpc#381 Signed-off-by: Robie Basak <robie.basak@oss.qualcomm.com>
This was referenced Aug 24, 2026
The daemons provided by fastrpc-support do not function unless they have libraries provided by libfastrpc1 available, but do not dynamically link to them. I believe they use dlopen() instead. Specify the dependency explicitly. This should mean that `apt install fastrpc-support` alone should work. Closes: #88 Signed-off-by: Robie Basak <robie.basak@oss.qualcomm.com>
Collaborator
|
Testing with a build against unstable from 2d50123 with a55bb20 reverted on my RB3gen2: |
Robie Basak (basak-qcom)
marked this pull request as ready for review
August 24, 2026 11:19
Signed-off-by: Robie Basak <robie.basak@oss.qualcomm.com>
Robie Basak (basak-qcom)
force-pushed
the
debian/pr/1.0.7-1_
branch
from
August 24, 2026 11:20
b4cb4af to
caf9fd9
Compare
Collaborator
|
The QC Preflight failure relates to an upstream commit. I've raised this internally as I think it's a false positive (we will always import upstream commits). The PR Build on Debusine is likely to fail I think - I wasn't expecting it to work anyway, as we haven't yet covered a planned upload directly into Debian (rather than QLI). |
Agathe Porte (gagath)
approved these changes
Aug 24, 2026
Agathe Porte (gagath)
left a comment
There was a problem hiding this comment.
Checked out locally, I agree for the libexec change and missed dlopen() dep, LGTM.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated promotion PR
This PR was generated by
pkg-promoteto move this package repo to upstream tagv1.0.7.Summary
debian/latestupstream/latest/upstream/v1.0.7debian/pr/1.0.7-1_1.0.7-1~(UNRELEASED)Reviewer checklist
Buildworkflow is green.Flow
--- config: themeVariables: 'gitInv2': '#ff0000' gitGraph: parallelCommits: true rotateCommitLabel: true --- gitGraph BT: branch debian/latest order: 1 branch upstream-main order: 4 branch upstream/latest order: 3 checkout main commit id: 'Unrelated history: workflows, doc' checkout upstream-main commit checkout upstream-main commit commit id: 'release' tag: 'v1.0.7' checkout upstream/latest commit id: 'previous stuff' merge upstream-main id: 'Filtered .github/debian folders' tag: 'upstream/v1.0.7' checkout debian/latest commit commit commit branch debian/pr/1.0.7-1_ order: 2 merge upstream/latest id: 'Merged Upstream' commit id: 'Changelog version update' type: HIGHLIGHT