Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Jun 2012 10:25:47 +0300
From:      Andriy Gapon <avg@FreeBSD.org>
To:        John Baldwin <jhb@FreeBSD.org>
Cc:        freebsd-acpi@FreeBSD.org, Sean Bruno <seanbru@yahoo-inc.com>
Subject:   Re: [CFT] Sparse Cstate Support -- Its possible, that I don't know what I'm doing.
Message-ID:  <4FE41DFB.7010008@FreeBSD.org>
In-Reply-To: <201206210950.23259.jhb@freebsd.org>
References:  <1340121728.5203.8.camel@powernoodle> <1340210648.2858.9.camel@powernoodle.corp.yahoo.com> <1340234916.2858.29.camel@powernoodle.corp.yahoo.com> <201206210950.23259.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
on 21/06/2012 16:50 John Baldwin said the following:
> On Wednesday, June 20, 2012 7:28:36 pm Sean Bruno wrote:
>> On Wed, 2012-06-20 at 09:44 -0700, Sean Bruno wrote:
>>> On Tue, 2012-06-19 at 09:02 -0700, Sean Bruno wrote:
>>>> http://people.freebsd.org/~sbruno/acpi_cpu_cstate_sparse.txt
>>>
>>> also, I wanted to point out that I'm returning BUS_PROBE_GENERIC here.
>>>
>>> I want to emulate the Intel acpi_idle code that exists in linux-land and
>>> I *thought* that I could setup an acpi_cpu_idle module that would come
>>> in at a higher priority on Intel cpus, however there's some SYSINIT()
>>> hackery going on that I don't know how to handle gracefully.  I'm not
>>> sure how to proceed with a different idle module here.  thoughts?
>>>
>>> e.g.
>>>
>>> static void
>>> acpi_cpu_postattach(void *unused __unused)
>>> {
>>>     device_t *devices;
>>>     int err;
>>>     int i, n;
>>>
>>>     err = devclass_get_devices(acpi_cpu_devclass, &devices, &n);
>>>     if (err != 0) {
>>>         printf("devclass_get_devices(acpi_cpu_devclass) failed\n");
>>>         return;
>>>     }
>>>     for (i = 0; i < n; i++)
>>>         bus_generic_probe(devices[i]);
>>>     for (i = 0; i < n; i++)
>>>         bus_generic_attach(devices[i]);
>>>     free(devices, M_TEMP);
>>> }
>>>
>>> SYSINIT(acpi_cpu, SI_SUB_CONFIGURE, SI_ORDER_MIDDLE,
>>>     acpi_cpu_postattach, NULL);
>>>
>>>
>>
>>
>> Ohhhhhh ... right.  This entire idea is stupid and fully demonstrates my
>> lack of understanding.  bus_probe/attach can't be used, there's no BUS
>> here.  So, SYSINIT() to the rescue.  Ok, that changes things around a
>> lot for me.  This BUS_PROBE_GENERIC idea is a dud.
> 
> No, every device in new-bus can be a bus (and acpi_cpuX is in fact a bus).  
> The issue here is that this driver is deferring attaching child devices until 
> later in the boot. This is a bit of a lame workaround that should be using 
> new-bus multipass instead.
> 

Yes.  The only excuse is that the hack was introduced, if I remember correctly,
before the multipass support.
-- 
Andriy Gapon




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FE41DFB.7010008>