ccw_device_start_key(9)
π ccw_device_start_key β like, the key-flavored version of starting an s390 channel program
okay so bestie, welcome to the Kernel API Manual entry for ccw_device_start_key. yes it's a section 9 page, yes it's about mainframe I/O, and yes it's iconic. buckle up. π
β¨ NAME β¨
ccw_device_start_key β start a s390 channel program with key π
β¨ SYNOPSIS β¨
int ccw_device_start_key (struct ccw_device *cdev , struct ccw1 *cpa ,
unsigned long intparm , __u8 lpm , __u8 key , unsigned long flags );
β¨ ARGUMENTS β¨
cdevβ the target ccw device. like, the device we're doing the thing to π«Άcpaβ logical start address of the channel program. the address, bestie β¨intparmβ a user specific interruption parameter. it gets presented back tocdev's interrupt handler, which lets a device driver associate that interrupt with one particular I/O request. it's giving "remember me" energy πlpmβ defines the channel path to be used for a specific I/O request. and heads up: a value of0will make cio use theopmπkeyβ the storage key to be used for the I/O πflagsβ additional flags; defines the action to be performed for I/O processing π©
β¨ DESCRIPTION β¨
So you're starting a S/390 channel program. slay. π
When the interrupt arrives, the IRQ handler is called β and the timing is very main character, because it can be:
- immediately
- delayed (dev-end missing, or sense required) π
- never (no IRQ handler registered) π
The interruption handler will echo back the intparm you specified here β unless another interruption parameter gets specified by a subsequent invocation of ccw_device_halt or ccw_device_clear. so like, don't count on it if someone else on the chat is also passing notes π
β¨ RETURN β¨
0β if the operation was successful β¨-EBUSYβ if the device is busy, or status pending π€-EACCESβ if no path specified inlpmis operational π«-ENODEVβ if the device is not operational π
β¨ CONTEXT β¨
Interrupts disabled, ccw device lock held. fr fr, you gotta be holding that lock. no cap. π
β¨ SEE ALSO β¨
The kernel file ./drivers/s390/cio/device_ops.c β that's literally where this lives ποΈ
and then the whole friend group, all of them, not skipping a single one π
ccw_device_set_options_mask(9)βccw_device_set_options(9)βccw_device_clear_options(9)βccw_device_is_pathgroup(9)βccw_device_is_multipath(9)βccw_device_clear(9)βccw_device_start_timeout_key(9)βccw_device_start(9)βccw_device_start_timeout(9)βccw_device_halt(9)βccw_device_resume(9)βccw_device_get_ciw(9)βccw_device_get_path_mask(9)βccw_device_get_chp_desc(9)βccw_device_get_util_str(9)βccw_device_get_id(9)βccw_device_tm_start_timeout_key(9)βccw_device_tm_start_key(9)βccw_device_tm_start(9)βccw_device_tm_start_timeout(9)βccw_device_get_mdc(9)βccw_device_tm_intrg(9)βccw_device_get_schid(9)βccw_device_pnso(9)βccw_device_get_cssid(9)βccw_device_get_iid(9)βccw_device_get_chpid(9)βccw_device_get_chid(9)
that's the whole page bestie, go start some channel programs responsibly π
β source/version: ./drivers/s390/cio, dated October 2026 β mwah, xoxo, the Kernel API Manual π§ββοΈ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms