Kernel includefile bug not fixed after a year :-(
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.22Cdrecord 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.hlooks 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.