Эта функция лежит в init/main.c
Она определяет быстродействие системы в BogoMIPS
Я привожу ниже довольно древний ее диалект - но это не суть,совремённая версия не сильно отличается
Так вот - непонятно,к чему приравнивать константы jiffies и HZ
Не знаю,может это бред , и рассматривать контекст этой функции нужно в разрезе kernel space , а не user space , но тем не менее :-)
#include <linux/config.h>
#include <linux/unistd.h>
#include <linux/ctype.h>
#include <linux/delay.h>
#include <linux/utsname.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/smp_lock.h>
#include <linux/hdreg.h>
#include <asm/io.h>
#include <linux/pci.h>
#include "stdio.h"
#define LPS_PREC 8
unsigned long loops_per_sec = (1<<12);
unsigned long volatile jiffies=0;
unsigned long HZ = 1;
void __delay(unsigned long loops)
{
int d0;
__asm__ __volatile__(
"\tjmp 1f\n"
".align 16\n"
"1:\tjmp 2f\n"
".align 16\n"
"2:\tdecl %0\n\tjns 2b"
:"=&a" (d0)
:"0" (loops));
}
// void __init calibrate_delay(void)
int main()
{
unsigned long ticks, loopbit;
int lps_precision = LPS_PREC;
loops_per_sec = (1<<12);
printf("Calibrating delay loop... ");
while (loops_per_sec <<= 1)
{
/* wait for "start of" clock tick */
ticks = jiffies;
while (ticks == jiffies)
{
/* nothing */;
/* Go .. */
ticks = jiffies;
}
__delay(loops_per_sec);
ticks = jiffies - ticks;
if (ticks) break;
}
/* Do a binary approximation to get loops_per_second set
* to equal one clock (up to lps_precision bits) */
loops_per_sec >>= 1;
loopbit = loops_per_sec;
while ( lps_precision-- && (loopbit >>= 1) ) {
loops_per_sec |= loopbit;
ticks = jiffies;
while (ticks == jiffies);
ticks = jiffies;
__delay(loops_per_sec);
if (jiffies != ticks) /* longer than 1 tick */
loops_per_sec &= ~loopbit;
}
/* finally, adjust loops per second in terms of seconds
* instead of clocks */
loops_per_sec *= HZ;
/* Round the value and print it */
printf("%lu.%02lu BogoMIPS\n",
(loops_per_sec+2500)/500000,
((loops_per_sec+2500)/5000) % 100);
return 0;
}
Собирал на сузе 10.1
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Быдлокод не быдлокод? (2014)
- Форум gcc (не знаю как собрать) (2012)
- Форум POSIX таймеры (2011)
- Форум Трабл с модулем (2005)
- Форум падает книжный пример (2013)
- Форум Трассировка вызова функций - Call Нunter (2023)
- Форум Загрузчик (2005)
- Форум g++ expects argument (2013)
- Форум RH9.0 и do_brk :) (2003)
- Форум Производительность AF_PACKET RAW и AF_INET SOCK_STREAM сокетов в ядре. (2010)