Please test: ACPI-CA import 20050408

Dan Nelson dnelson at allantgroup.com
Fri Apr 15 10:36:30 PDT 2005


In the last episode (Apr 15), Marcel Moolenaar said:
> On Apr 15, 2005, at 9:28 AM, Mark Santcroos wrote:
> >On Fri, Apr 15, 2005 at 09:20:52AM -0700, Marcel Moolenaar wrote:
> >>BTW: Is ACPICA getting slower?
> >
> > Might be. I don't have numbers on that. I guess we're still
> > focusing on functionality and not so much on speed. Do you have a
> > concrete area where you think we are loosing performance?
> 
> No, not yet. It's just that there are 2 "dead" spots in the booting
> process of the plutos we have in the cluster and these "dead" spots
> appeared to be longer. I think there's a lot of AML interpretation
> going on during that time, but I might be wrong.

What I have personally seen is a long delay in bus_alloc_resource() on
some older Dell machines (desktop and laptop, both under 500Mhz).  If I
apply the attached patch, I see between 15 and 20 rows of identical
output, and each call to b_a_r takes a noticeable fraction of a second
(i.e. the cursor spends most of its time after an IRQ, not after a 'y'
or 'n'.) The delays probably add 45 seconds total to the boot time.

Newer systems will just generate 4 or 5 lines total for the entire boot
process.

-- 
	Dan Nelson
	dnelson at allantgroup.com
-------------- next part --------------
Index: acpi_pci_link.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/acpica/acpi_pci_link.c,v
retrieving revision 1.24.2.6
diff -u -p -r1.24.2.6 acpi_pci_link.c
--- acpi_pci_link.c	7 Nov 2004 20:24:05 -0000	1.24.2.6
+++ acpi_pci_link.c	9 Nov 2004 03:43:52 -0000
@@ -804,17 +804,22 @@ acpi_pci_link_update_irq_penalty(device_
 
 			/* XXX try to get this IRQ in non-sharable mode. */
 			rid = 0;
+			printf("%d", irq);
 			res = bus_alloc_resource(dev, SYS_RES_IRQ,
 						 &rid, irq, irq, 1, 0);
 			if (res != NULL) {
+				printf("y");
 				bus_release_resource(dev, SYS_RES_IRQ,
 				    rid, res);
+				printf(" ");
 			} else {
 				/* this is in use, give 10. */
 				irq_penalty[irq] += 10;
+				printf("n ");
 			}
 		}
 
+		printf("\n");
 		/* initialize `sorted' possible IRQs. */
 		bcopy(link->interrupts, link->sorted_irq,
 		    sizeof(link->sorted_irq));


More information about the freebsd-acpi mailing list