On Tue, Dec 09, 2025 at 03:02:14PM -0800, Reinette Chatre wrote:

> I suggest this be simplified to not have the vendor ID be used both as a 
> value and as a state.
> Here is some pseudo-code that should be able to accomplish this:
> 
> 
>       unsigned int detect_vendor(void)
>       {
>               static bool initialized = false;
>               static unsigned int vendor_id;
>               ...
>               FILE *inf;
> 
> 
>               if (initialized)
>                       return vendor_id;
> 
>               inf = fopen("/proc/cpuinfo", "r");
>               if (!inf) {
>                       vendor_id = 0;
>                       initialized = true;
>                       return vendor_id;
>               }
> 
>               /* initialize vendor_id from /proc/cpuinfo */
> 
>               initialized = true;
>               return vendor_id;
>       }
> 
>       unsigned int get_vendor(void)
>       {
>               unsigned int vendor;
>               
>               vendor = detect_vendor();
> 
>               if (vendor == 0)
>                       ksft_print_msg(...);
> 
>               return vendor;
>       }

If detect_vendor() failed, this you'd get the ksft_print_msg() for every
call to get_vendor().

Why not split completly.

static unsigned int vendor_id;

void detect_vendor(void)
{
        FILE *inf = fopen("/proc/cpuinfo", "r");

        if (!inf) {
                ... warning unable to get vendor id ...
        }

        ... initialize from /proc/cpuinfo ...

        ... warn if doesn't find a known vendor ...
}

Call detect_vendor() at the beginning of main() in each test.

Then just use "vendor_id" whenever you need to test for some vendor
specific feature.

-Tony

Reply via email to