Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

compat_ioctl: remove translation for sound ioctls

The SNDCTL_* and SOUND_* commands are the old OSS user interface.

I checked all the sound ioctl commands listed in fs/compat_ioctl.c
to see if we still need the translation handlers. Here is what I
found:

- sound/oss/ is (almost) gone from the kernel, this is what actually
needed all the translations
- The ALSA emulation for OSS correctly handles all compat_ioctl
commands already.
- sound/oss/dmasound/ is the last holdout of the original OSS code,
this is only used on arch/m68k, which has no 64-bit mode and
hence needs no compat handlers
- arch/um/drivers/hostaudio_kern.c may run in 64-bit mode with
32-bit x86 user space underneath it. This rare corner case is
the only one that still needs the compat handlers.

By adding a simple redirect of .compat_ioctl to .unlocked_ioctl in the
UML driver, we can remove all the COMPATIBLE_IOCTL() annotations without
a change in functionality. For completeness, I'm adding the same thing
to the dmasound file, knowing that it makes no difference.

The compat_ioctl list contains one comment about SNDCTL_DSP_MAPINBUF and
SNDCTL_DSP_MAPOUTBUF, which actually would need a translation handler
if implemented. However, the native implementation just returns -EINVAL,
so we don't care.

Reviewed-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

+7 -158
+1
arch/um/drivers/hostaudio_kern.c
··· 298 298 .write = hostaudio_write, 299 299 .poll = hostaudio_poll, 300 300 .unlocked_ioctl = hostaudio_ioctl, 301 + .compat_ioctl = compat_ptr_ioctl, 301 302 .mmap = NULL, 302 303 .open = hostaudio_open, 303 304 .release = hostaudio_release,
-158
fs/compat_ioctl.c
··· 51 51 #include <linux/uaccess.h> 52 52 #include <linux/watchdog.h> 53 53 54 - #include <linux/soundcard.h> 55 - 56 54 #include <linux/hiddev.h> 57 55 58 56 ··· 456 458 COMPATIBLE_IOCTL(PPPIOCATTCHAN) 457 459 COMPATIBLE_IOCTL(PPPIOCGCHAN) 458 460 COMPATIBLE_IOCTL(PPPIOCGL2TPSTATS) 459 - /* Big A */ 460 - /* sparc only */ 461 - /* Big Q for sound/OSS */ 462 - COMPATIBLE_IOCTL(SNDCTL_SEQ_RESET) 463 - COMPATIBLE_IOCTL(SNDCTL_SEQ_SYNC) 464 - COMPATIBLE_IOCTL(SNDCTL_SYNTH_INFO) 465 - COMPATIBLE_IOCTL(SNDCTL_SEQ_CTRLRATE) 466 - COMPATIBLE_IOCTL(SNDCTL_SEQ_GETOUTCOUNT) 467 - COMPATIBLE_IOCTL(SNDCTL_SEQ_GETINCOUNT) 468 - COMPATIBLE_IOCTL(SNDCTL_SEQ_PERCMODE) 469 - COMPATIBLE_IOCTL(SNDCTL_FM_LOAD_INSTR) 470 - COMPATIBLE_IOCTL(SNDCTL_SEQ_TESTMIDI) 471 - COMPATIBLE_IOCTL(SNDCTL_SEQ_RESETSAMPLES) 472 - COMPATIBLE_IOCTL(SNDCTL_SEQ_NRSYNTHS) 473 - COMPATIBLE_IOCTL(SNDCTL_SEQ_NRMIDIS) 474 - COMPATIBLE_IOCTL(SNDCTL_MIDI_INFO) 475 - COMPATIBLE_IOCTL(SNDCTL_SEQ_THRESHOLD) 476 - COMPATIBLE_IOCTL(SNDCTL_SYNTH_MEMAVL) 477 - COMPATIBLE_IOCTL(SNDCTL_FM_4OP_ENABLE) 478 - COMPATIBLE_IOCTL(SNDCTL_SEQ_PANIC) 479 - COMPATIBLE_IOCTL(SNDCTL_SEQ_OUTOFBAND) 480 - COMPATIBLE_IOCTL(SNDCTL_SEQ_GETTIME) 481 - COMPATIBLE_IOCTL(SNDCTL_SYNTH_ID) 482 - COMPATIBLE_IOCTL(SNDCTL_SYNTH_CONTROL) 483 - COMPATIBLE_IOCTL(SNDCTL_SYNTH_REMOVESAMPLE) 484 - /* Big T for sound/OSS */ 485 - COMPATIBLE_IOCTL(SNDCTL_TMR_TIMEBASE) 486 - COMPATIBLE_IOCTL(SNDCTL_TMR_START) 487 - COMPATIBLE_IOCTL(SNDCTL_TMR_STOP) 488 - COMPATIBLE_IOCTL(SNDCTL_TMR_CONTINUE) 489 - COMPATIBLE_IOCTL(SNDCTL_TMR_TEMPO) 490 - COMPATIBLE_IOCTL(SNDCTL_TMR_SOURCE) 491 - COMPATIBLE_IOCTL(SNDCTL_TMR_METRONOME) 492 - COMPATIBLE_IOCTL(SNDCTL_TMR_SELECT) 493 - /* Little m for sound/OSS */ 494 - COMPATIBLE_IOCTL(SNDCTL_MIDI_PRETIME) 495 - COMPATIBLE_IOCTL(SNDCTL_MIDI_MPUMODE) 496 - COMPATIBLE_IOCTL(SNDCTL_MIDI_MPUCMD) 497 - /* Big P for sound/OSS */ 498 - COMPATIBLE_IOCTL(SNDCTL_DSP_RESET) 499 - COMPATIBLE_IOCTL(SNDCTL_DSP_SYNC) 500 - COMPATIBLE_IOCTL(SNDCTL_DSP_SPEED) 501 - COMPATIBLE_IOCTL(SNDCTL_DSP_STEREO) 502 - COMPATIBLE_IOCTL(SNDCTL_DSP_GETBLKSIZE) 503 - COMPATIBLE_IOCTL(SNDCTL_DSP_CHANNELS) 504 - COMPATIBLE_IOCTL(SOUND_PCM_WRITE_FILTER) 505 - COMPATIBLE_IOCTL(SNDCTL_DSP_POST) 506 - COMPATIBLE_IOCTL(SNDCTL_DSP_SUBDIVIDE) 507 - COMPATIBLE_IOCTL(SNDCTL_DSP_SETFRAGMENT) 508 - COMPATIBLE_IOCTL(SNDCTL_DSP_GETFMTS) 509 - COMPATIBLE_IOCTL(SNDCTL_DSP_SETFMT) 510 - COMPATIBLE_IOCTL(SNDCTL_DSP_GETOSPACE) 511 - COMPATIBLE_IOCTL(SNDCTL_DSP_GETISPACE) 512 - COMPATIBLE_IOCTL(SNDCTL_DSP_NONBLOCK) 513 - COMPATIBLE_IOCTL(SNDCTL_DSP_GETCAPS) 514 - COMPATIBLE_IOCTL(SNDCTL_DSP_GETTRIGGER) 515 - COMPATIBLE_IOCTL(SNDCTL_DSP_SETTRIGGER) 516 - COMPATIBLE_IOCTL(SNDCTL_DSP_GETIPTR) 517 - COMPATIBLE_IOCTL(SNDCTL_DSP_GETOPTR) 518 - /* SNDCTL_DSP_MAPINBUF, XXX needs translation */ 519 - /* SNDCTL_DSP_MAPOUTBUF, XXX needs translation */ 520 - COMPATIBLE_IOCTL(SNDCTL_DSP_SETSYNCRO) 521 - COMPATIBLE_IOCTL(SNDCTL_DSP_SETDUPLEX) 522 - COMPATIBLE_IOCTL(SNDCTL_DSP_GETODELAY) 523 - COMPATIBLE_IOCTL(SNDCTL_DSP_PROFILE) 524 - COMPATIBLE_IOCTL(SOUND_PCM_READ_RATE) 525 - COMPATIBLE_IOCTL(SOUND_PCM_READ_CHANNELS) 526 - COMPATIBLE_IOCTL(SOUND_PCM_READ_BITS) 527 - COMPATIBLE_IOCTL(SOUND_PCM_READ_FILTER) 528 - /* Big C for sound/OSS */ 529 - COMPATIBLE_IOCTL(SNDCTL_COPR_RESET) 530 - COMPATIBLE_IOCTL(SNDCTL_COPR_LOAD) 531 - COMPATIBLE_IOCTL(SNDCTL_COPR_RDATA) 532 - COMPATIBLE_IOCTL(SNDCTL_COPR_RCODE) 533 - COMPATIBLE_IOCTL(SNDCTL_COPR_WDATA) 534 - COMPATIBLE_IOCTL(SNDCTL_COPR_WCODE) 535 - COMPATIBLE_IOCTL(SNDCTL_COPR_RUN) 536 - COMPATIBLE_IOCTL(SNDCTL_COPR_HALT) 537 - COMPATIBLE_IOCTL(SNDCTL_COPR_SENDMSG) 538 - COMPATIBLE_IOCTL(SNDCTL_COPR_RCVMSG) 539 - /* Big M for sound/OSS */ 540 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_VOLUME) 541 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_BASS) 542 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_TREBLE) 543 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_SYNTH) 544 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_PCM) 545 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_SPEAKER) 546 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE) 547 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_MIC) 548 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_CD) 549 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_IMIX) 550 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_ALTPCM) 551 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECLEV) 552 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_IGAIN) 553 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_OGAIN) 554 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE1) 555 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE2) 556 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_LINE3) 557 - COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_DIGITAL1)) 558 - COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_DIGITAL2)) 559 - COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_DIGITAL3)) 560 - COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_PHONEIN)) 561 - COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_PHONEOUT)) 562 - COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_VIDEO)) 563 - COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_RADIO)) 564 - COMPATIBLE_IOCTL(MIXER_READ(SOUND_MIXER_MONITOR)) 565 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_MUTE) 566 - /* SOUND_MIXER_READ_ENHANCE, same value as READ_MUTE */ 567 - /* SOUND_MIXER_READ_LOUD, same value as READ_MUTE */ 568 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECSRC) 569 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_DEVMASK) 570 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_RECMASK) 571 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_STEREODEVS) 572 - COMPATIBLE_IOCTL(SOUND_MIXER_READ_CAPS) 573 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_VOLUME) 574 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_BASS) 575 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_TREBLE) 576 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_SYNTH) 577 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_PCM) 578 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_SPEAKER) 579 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE) 580 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_MIC) 581 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_CD) 582 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_IMIX) 583 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_ALTPCM) 584 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_RECLEV) 585 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_IGAIN) 586 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_OGAIN) 587 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE1) 588 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE2) 589 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_LINE3) 590 - COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_DIGITAL1)) 591 - COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_DIGITAL2)) 592 - COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_DIGITAL3)) 593 - COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_PHONEIN)) 594 - COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_PHONEOUT)) 595 - COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_VIDEO)) 596 - COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_RADIO)) 597 - COMPATIBLE_IOCTL(MIXER_WRITE(SOUND_MIXER_MONITOR)) 598 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_MUTE) 599 - /* SOUND_MIXER_WRITE_ENHANCE, same value as WRITE_MUTE */ 600 - /* SOUND_MIXER_WRITE_LOUD, same value as WRITE_MUTE */ 601 - COMPATIBLE_IOCTL(SOUND_MIXER_WRITE_RECSRC) 602 - COMPATIBLE_IOCTL(SOUND_MIXER_INFO) 603 - COMPATIBLE_IOCTL(SOUND_OLD_MIXER_INFO) 604 - COMPATIBLE_IOCTL(SOUND_MIXER_ACCESS) 605 - COMPATIBLE_IOCTL(SOUND_MIXER_AGC) 606 - COMPATIBLE_IOCTL(SOUND_MIXER_3DSE) 607 - COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE1) 608 - COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE2) 609 - COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE3) 610 - COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE4) 611 - COMPATIBLE_IOCTL(SOUND_MIXER_PRIVATE5) 612 - COMPATIBLE_IOCTL(SOUND_MIXER_GETLEVELS) 613 - COMPATIBLE_IOCTL(SOUND_MIXER_SETLEVELS) 614 - COMPATIBLE_IOCTL(OSS_GETVERSION) 615 461 /* Raw devices */ 616 462 COMPATIBLE_IOCTL(RAW_SETBIND) 617 463 COMPATIBLE_IOCTL(RAW_GETBIND)
+4
sound/core/oss/pcm_oss.c
··· 2717 2717 static long snd_pcm_oss_ioctl_compat(struct file *file, unsigned int cmd, 2718 2718 unsigned long arg) 2719 2719 { 2720 + /* 2721 + * Everything is compatbile except SNDCTL_DSP_MAPINBUF/SNDCTL_DSP_MAPOUTBUF, 2722 + * which are not implemented for the native case either 2723 + */ 2720 2724 return snd_pcm_oss_ioctl(file, cmd, (unsigned long)compat_ptr(arg)); 2721 2725 } 2722 2726 #else
+2
sound/oss/dmasound/dmasound_core.c
··· 384 384 .owner = THIS_MODULE, 385 385 .llseek = no_llseek, 386 386 .unlocked_ioctl = mixer_unlocked_ioctl, 387 + .compat_ioctl = compat_ptr_ioctl, 387 388 .open = mixer_open, 388 389 .release = mixer_release, 389 390 }; ··· 1168 1167 .write = sq_write, 1169 1168 .poll = sq_poll, 1170 1169 .unlocked_ioctl = sq_unlocked_ioctl, 1170 + .compat_ioctl = compat_ptr_ioctl, 1171 1171 .open = sq_open, 1172 1172 .release = sq_release, 1173 1173 };