Skip to contentSkip to conversation

Kernel includefile bug not fixed after a year :-(

DISCUSSION Albert Cahalan 1 participant 1 message Oct 1, 2003

lore
Share & tools
lore
#0 lore raw
Quoted 10 lines · Joerg Schilling
Quoted 8 lines

Also Joerg, now that I have your attention: There is a bug somewhere so that if I set the kernel HZ to 400, recompile everything including cdrecord, I can no longer record a CD. I think that somewhere, somebody is using a raw jiffie-count instead of multiplying by HZ in the time-out code. I've check through all the SCSI stuff, and I use SCSI disks exclusively. I think something in your code needs fixing. This is for kernel version 2.4.22

Cdrecord and pther programs too includes <sys/param.h>

If that's a kernel header, you have a bug.

Quoted 8 lines

If you change HZ in the kernel include files and recompile your problems suffer from the same sort of inconsistencies that have been the reason for my initial mail.

If Linux likes to support changes to HZ, then it needs to support POSIX interfaces. On Solaris, sys/param.h looks this way:

#define HZ ((clock_t)_sysconf(_SC_CLK_TCK))

On a Linux 2.4.xx system and above, you do this:

///////////////////////////////////////////////////// #ifndef AT_CLKTCK
#define AT_CLKTCK 17 // frequency of times()
#endif

#define NOTE_NOT_FOUND 42

//extern char** environ; // if _GNU_SOURCE not defined

// for ELF executables, notes are pushed before environment and args // (Portable too! This even works on PA_RISC for some reason.) static unsigned long find_elf_note(unsigned long findme){
unsigned long *ep = (unsigned long *)environ; while(*ep++);

  while(*ep){
    if(ep[0]==findme) return ep[1];
    ep+=2;

}
return NOTE_NOT_FOUND;
}

// ...

Hertz = find_elf_note(AT_CLKTCK);

/////////////////////////////////////////////////////

Don't trust any _sysconf() junk. It's broken.

Quoted 3 lines

You may even change HZ on a running Solaris system.... the only programs that are affected may be the ones that have timeouts while the change has been done.

Cute. It's bloat though, because it turns constant expressions into variable ones.

Quoted 2 lines

The problem is that the timeouts in the SCSI interface are based on HZ rather than being abstract from kernel internals.

That's a bug. They should be in terms of USER_HZ, milliseconds, centiseconds, microseconds, or nanoseconds. Pick something good and make a patch.