Skip to content

Answer unknown ioctl commands quietly with -ENOTTY - #2

Merged
JohnAmadis merged 2 commits into
mainfrom
claude/sweet-tesla-mlran5
Sep 30, 2026
Merged

JohnAmadis merged 2 commits into
mainfrom
claude/sweet-tesla-mlran5

Conversation

@JohnAmadis

@JohnAmadis JohnAmadis commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Problem

dmdevfs now probes every node with the standard DMDRVI_IOCTL_BLOCK_GET_INFO (0x100) and DMDRVI_IOCTL_MONITOR_GET_POLICY (0x200) commands to classify it. dmfmc logged Invalid ioctl command 256/512 for every probe.

Changes

  • Unknown command → -ENOTTY, no log. This is the dmdrvi convention for commands a driver does not implement, and dmdevfs reads any non-zero result as "not this class". The default: branch of the switch changed the same way, and the range check now also rejects values below the first command.
  • Private commands now start at DMDRVI_IOCTL_CUSTOM_BASE. They used to start at 1, which collides with the standard DMDRVI_IOCTL_NET_* range (0x01..0x05). dmfmc_types.h now includes dmdrvi_ioctl.h, so dmfmc_port also links the dmdrvi module headers.
  • docs/api-reference.md: added a note about the numbering and the -ENOTTY behaviour.

⚠️ The numeric values of dmfmc_ioctl_cmd_t change. Callers that use the enum names only need a rebuild; hard-coded numbers must be updated. Out-of-repo code that includes dmfmc_types.h/dmfmc.h now needs the dmdrvi headers on its include path.

Testing

A syntax-only compile (gcc -fsyntax-only -Wall) against the dmdrvi/dmod headers is clean. A full module build and a hardware run were not done here; CI checks the CMake changes.

Same fix as choco-technologies/dmtty#4, choco-technologies/dmdma#4 and choco-technologies/dmclk#31.

🤖 Generated with Claude Code

https://claude.ai/code/session_016sVYVjrMNmMfPjWQkkGJTM

dmdevfs now probes every node with the standard DMDRVI_IOCTL_BLOCK_GET_INFO
(0x100) and DMDRVI_IOCTL_MONITOR_GET_POLICY (0x200) commands to classify it,
so dmfmc logged an "Invalid ioctl command" error for every probe. Unknown
commands are not an error for a driver: return -ENOTTY without logging, as
dmdrvi documents.

Also move dmfmc's private commands to DMDRVI_IOCTL_CUSTOM_BASE (0x1000):
they started at 1, colliding with the standard DMDRVI_IOCTL_NET_* range
(0x01..), so a generic network probe would have been misread as a dmfmc
command. Callers using the enum names only need a rebuild.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016sVYVjrMNmMfPjWQkkGJTM
Number the private ioctl commands from the dmdrvi_ioctl.h constant itself
rather than repeating its value, so they follow dmdrvi if the base ever
moves. This makes the public header include dmdrvi_ioctl.h, so every
in-repo target that includes it now also pulls in the dmdrvi module
headers. The _Static_assert that guarded the copied value is no longer
needed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016sVYVjrMNmMfPjWQkkGJTM
@JohnAmadis
JohnAmadis merged commit b034d35 into main Sep 30, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants