Re: Question about dynamic minor number of misc device

From: Arnd Bergmann
Date: Mon Jan 20 2020 - 05:03:50 EST


On Mon, Jan 20, 2020 at 9:33 AM Zhenzhong Duan <zhenzhong.duan@xxxxxxxxx> wrote:
>
> Hi Maintainers,
>
> I see there are 64 free slots(0-63) used for misc devices with dynamic
> minor number. But PSMOUSE_MINOR(1) overlaps with that dynamic range.
>
> So if the dynamic minor number exhaust, psaux driver will fail with
> "could not register psaux device, error: -16", is this expected?
> Should we preserve a slot for psaux and serio_raw which use static
> minor number PSMOUSE_MINOR?

Is this a theoretical question, or are you actually running out of dynamic
minor numbers? I would guess that if we change the limit to only allow
dynamic minors 2 through 63, that would technically be a correct
change, but the result would be that in the same situation another random
driver fails, which is not much of an improvement, unless the dynamic
minor numbers also continue into the range above 255.

On a related note, I checked for drivers that call misc_register()
with a minor number that is not defined in include/linux/misc.h
and found a bunch, including some that have conflicting numbers,
conflicting names or numbers from the dynamic range:

drivers/staging/speakup/devsynth.c:#define SYNTH_MINOR 25
drivers/staging/speakup/speakup_soft.c:#define SOFTSYNTH_MINOR 26 /*
might as well give it one more than /dev/synth */
drivers/staging/speakup/speakup_soft.c:#define SOFTSYNTHU_MINOR 27 /*
might as well give it one more than /dev/synth */
drivers/macintosh/via-pmu.c:#define PMU_MINOR 154
drivers/macintosh/ans-lcd.h:#define ANSLCD_MINOR 156
drivers/auxdisplay/charlcd.c:#define LCD_MINOR 156
drivers/char/applicom.c:#define AC_MINOR 157
drivers/char/nwbutton.h:#define BUTTON_MINOR 158
arch/arm/include/asm/nwflash.h:#define FLASH_MINOR 160
drivers/sbus/char/envctrl.c:#define ENVCTRL_MINOR 162
drivers/sbus/char/flash.c:#define FLASH_MINOR 152
drivers/sbus/char/uctrl.c:#define UCTRL_MINOR 174
drivers/char/toshiba.c:#define TOSH_MINOR_DEV 181
arch/um/drivers/random.c:#define RNG_MISCDEV_MINOR 183 /*
official */
drivers/auxdisplay/panel.c:#define KEYPAD_MINOR 185
drivers/video/fbdev/pxa3xx-gcu.c:#define MISCDEV_MINOR 197
kernel/power/user.c:#define SNAPSHOT_MINOR 231
drivers/parisc/eisa_eeprom.c:#define EISA_EEPROM_MINOR 241

If you would like to help clean that up, you are definitely welcome
to send patches.

Arnd