Changeset 2225

Show
Ignore:
Timestamp:
01/17/04 19:12:38 (9 years ago)
Author:
khali
Message:

Use unbuffered I/O for 2.6 eeprom to benefit from driver

optimization.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/lib/proc.c

    r2211 r2225  
    1818*/ 
    1919 
     20/* for open() */ 
     21#include <sys/types.h> 
     22#include <sys/stat.h> 
     23#include <fcntl.h> 
     24 
    2025#include <stddef.h> 
    21 #ifdef DEBUG 
    22 #include <unistd.h> /* for getuid(), to be removed */ 
    23 #endif 
     26#include <unistd.h> 
    2427#include <stdio.h> 
    2528#include <string.h> 
     
    294297        const sensors_chip_feature *the_feature; 
    295298        int buflen = BUF_LEN; 
    296         int mag, eepromoffset, i, ret=0; 
     299        int mag, eepromoffset, fd, ret=0; 
    297300        char n[NAME_MAX]; 
    298301        FILE *f; 
     
    309312                if (! strcmp(name.prefix, "eeprom")){ 
    310313                        strcat(n, "eeprom"); 
    311                         if ((f = fopen(n, "r")) != NULL) { 
     314                        /* we use unbuffered I/O to benefit from eeprom driver 
     315                           optimization */ 
     316                        if ((fd = open(n, O_RDONLY)) >= 0) { 
    312317                                eepromoffset = 
    313318                                  (the_feature->offset / sizeof(long))  + 
    314319                                  (16 * (the_feature->sysctl - EEPROM_SYSCTL1)); 
    315                                 for(i = 0; i <= eepromoffset; i++) 
    316                                         if(EOF == (ret = getc(f))) 
    317                                                 break; 
    318                                 fclose(f); 
    319                                 if(ret == EOF) 
     320                                if (lseek(fd, eepromoffset, SEEK_SET) < 0 
     321                                 || read(fd, &ret, 1) != 1) { 
     322                                        close(fd); 
    320323                                        return -SENSORS_ERR_PROC; 
     324                                } 
     325                                close(fd); 
    321326                                *value = ret; 
    322327                                return 0;