>>> Could you try the attached patch and let me know what you observe?
Using the patch below, I get a whole bunch of numbers. I hope you do
not need the entire sequence as they scroll off screen too quickly to
read. When the scrolling stops, the screen appears as follows:
11
8
9
10
11
8
9
10
<pattern then repeats several times>
11
25
26
_
What does that mean exactly? That is, why doesn't it ever get to 12?
>>> ---
>>>
>>> diff --git a/arch/x86/boot/compressed/eboot.c
>>> b/arch/x86/boot/compressed/eboot.c
>>> index b7388a4..f4a966d 100644
>>> --- a/arch/x86/boot/compressed/eboot.c
>>> +++ b/arch/x86/boot/compressed/eboot.c
>>> @@ -261,30 +261,37 @@ static efi_status_t setup_efi_pci(struct boot_params
>>> *params)
>>> int i;
>>> struct setup_data *data;
>>>
>>> + efi_printk("1\n");
>>> data = (struct setup_data *)(unsigned long)params->hdr.setup_data;
>>>
>>> while (data && data->next)
>>> data = (struct setup_data *)(unsigned long)data->next;
>>>
>>> + efi_printk("2\n");
>>> status = efi_call_phys5(sys_table->boottime->locate_handle,
>>> EFI_LOCATE_BY_PROTOCOL, &pci_proto,
>>> NULL, &size, pci_handle);
>>>
>>> + efi_printk("3\n");
>>> if (status == EFI_BUFFER_TOO_SMALL) {
>>> status = efi_call_phys3(sys_table->boottime->allocate_pool,
>>> EFI_LOADER_DATA, size, &pci_handle);
>>>
>>> + efi_printk("4\n");
>>> if (status != EFI_SUCCESS)
>>> return status;
>>>
>>> + efi_printk("5\n");
>>> status = efi_call_phys5(sys_table->boottime->locate_handle,
>>> EFI_LOCATE_BY_PROTOCOL, &pci_proto,
>>> NULL, &size, pci_handle);
>>> + efi_printk("6\n");
>>> }
>>>
>>> if (status != EFI_SUCCESS)
>>> goto free_handle;
>>>
>>> + efi_printk("7\n");
>>> nr_pci = size / sizeof(void *);
>>> for (i = 0; i < nr_pci; i++) {
>>> void *h = pci_handle[i];
>>> @@ -297,13 +304,16 @@ static efi_status_t setup_efi_pci(struct boot_params
>>> *params)
>>> if (status != EFI_SUCCESS)
>>> continue;
>>>
>>> + efi_printk("8\n");
>>> if (!pci)
>>> continue;
>>>
>>> + efi_printk("9\n");
>>> #ifdef CONFIG_X86_64
>>> status = efi_call_phys4(pci->attributes, pci,
>>> EfiPciIoAttributeOperationGet, 0,
>>> &attributes);
>>> + efi_printk("10\n");
>>> #else
>>> status = efi_call_phys5(pci->attributes, pci,
>>> EfiPciIoAttributeOperationGet, 0, 0,
>>> @@ -312,43 +322,54 @@ static efi_status_t setup_efi_pci(struct boot_params
>>> *params)
>>> if (status != EFI_SUCCESS)
>>> continue;
>>>
>>> + efi_printk("11\n");
>>> if (!pci->romimage || !pci->romsize)
>>> continue;
>>>
>>> + efi_printk("12\n");
>>> size = pci->romsize + sizeof(*rom);
>>>
>>> status = efi_call_phys3(sys_table->boottime->allocate_pool,
>>> EFI_LOADER_DATA, size, &rom);
>>>
>>> + efi_printk("13\n");
>>> if (status != EFI_SUCCESS)
>>> continue;
>>>
>>> + efi_printk("14\n");
>>> rom->data.type = SETUP_PCI;
>>> rom->data.len = size - sizeof(struct setup_data);
>>> rom->data.next = 0;
>>> rom->pcilen = pci->romsize;
>>>
>>> + efi_printk("15\n");
>>> status = efi_call_phys5(pci->pci.read, pci,
>>> EfiPciIoWidthUint16, PCI_VENDOR_ID,
>>> 1, &(rom->vendor));
>>> + efi_printk("16\n");
>>>
>>> if (status != EFI_SUCCESS)
>>> goto free_struct;
>>>
>>> + efi_printk("17\n");
>>> status = efi_call_phys5(pci->pci.read, pci,
>>> EfiPciIoWidthUint16, PCI_DEVICE_ID,
>>> 1, &(rom->devid));
>>>
>>> + efi_printk("18\n");
>>> if (status != EFI_SUCCESS)
>>> goto free_struct;
>>>
>>> + efi_printk("19\n");
>>> status = efi_call_phys5(pci->get_location, pci,
>>> &(rom->segment), &(rom->bus),
>>> &(rom->device), &(rom->function));
>>>
>>> + efi_printk("20\n");
>>> if (status != EFI_SUCCESS)
>>> goto free_struct;
>>>
>>> + efi_printk("21\n");
>>> memcpy(rom->romdata, pci->romimage, pci->romsize);
>>>
>>> if (data)
>>> @@ -358,13 +379,18 @@ static efi_status_t setup_efi_pci(struct boot_params
>>> *params)
>>>
>>> data = (struct setup_data *)rom;
>>>
>>> + efi_printk("22\n");
>>> continue;
>>> free_struct:
>>> + efi_printk("23\n");
>>> efi_call_phys1(sys_table->boottime->free_pool, rom);
>>> + efi_printk("24\n");
>>> }
>>>
>>> free_handle:
>>> + efi_printk("25\n");
>>> efi_call_phys1(sys_table->boottime->free_pool, pci_handle);
>>> + efi_printk("26\n");
>>> return status;
>>> }
--
To unsubscribe from this list: send the line "unsubscribe linux-efi" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html