[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V2] ns16550: Add support for UART present in Broadcom TruManage capable NetXtreme chips
>>> On 15.11.13 at 18:51, Aravind Gopalakrioshnan >>> <aravind.gopalakrishnan@xxxxxxx> wrote: > On 11/15/2013 3:31 AM, Jan Beulich wrote: >>>>> On 14.11.13 at 18:40, Aravind Gopalakrishnan >>>>> <Aravind.Gopalakrishnan@xxxxxxx> wrote: >>> static struct ns16550 { >>> - int baud, clock_hz, data_bits, parity, stop_bits, fifo_size, irq; >>> + int baud, clock_hz, data_bits, parity, stop_bits, irq; >>> u64 io_base; /* I/O port or memory-mapped I/O address. */ >>> + u32 fifo_size; >> Is this in any way related to the main purpose of the patch here? >> And if there is (i.e. in response to Andrew's comment on v1), then >> I don't see why most/all of the other fields shouldn't follow suit. > > I don't mind changing them all in one patch.. But - > > Since it is not directly related to the main purpose of the patch, would > it be okay > if I did this in a follow up patch and go back to using 'int' for now? "Go back" is probably the wrong term - in the new code you add you should strive to use unsigned int where possible. And in a second patch, converting the bogus uses of plain int to unsigned would be desirable. >>> /* Not IO */ >>> if ( !(bar & PCI_BASE_ADDRESS_SPACE_IO) ) >>> - continue; >>> + { >>> + vendor = pci_conf_read16(0, b, d, f, PCI_VENDOR_ID); >>> + device = pci_conf_read16(0, b, d, f, PCI_DEVICE_ID); >>> + >>> + /* Check for quirks in uart_config lookup table */ >>> + for ( i = 0; i < ARRAY_SIZE(uart_config); i++) >>> + { >>> + if ( uart_config[i].vendor_id != vendor ) >>> + continue; >>> + >>> + if ( uart_config[i].dev_id != device ) >>> + continue; >>> + >>> + if ( bar_idx >= uart_config[i].max_bars ) >>> + break; >> Did you not mean "continue" here? > > No.. break is fine here since we only support bar0 for this specific > device.. > (By the time we reach this condition, we have already verified 'vendor' > and 'device' from > uart_config table anyway.. it is needless to iterate through other > devices in the table) Here you make assumptions on the single entry you know the list is currently holding. But you should consider the general case, and I don't see why there couldn't be two flavors of a device having the same (vendor, device) pair but different max_bars. >>> + /* Not 8 bytes */ >>> + if ( (len & 0xffff) != 0xfff9 ) >>> + continue; >> I think this size checking actually should also be done in the MMIO >> case. > > This check would not work for this device as the length of region is 64K. I didn't mean you to make the exact same check; but I do expect you to do some similar checking. > But if we really want to force a length check for MMIO cases as well, > we can define another field in struct uart_config and verify if length > matches.. > Do let me know what you make of it.. If you think an exact match check is necessary, then yes, such a new field might be needed. But since I don't see Xen depending on the exact size, but just on it being at least a certain size, doing just that check would seem fine to me. But then you'd need to carefully consider what the remainder of the MMIO range is used for - if any of that could conflict with what Xen needs to fully control the device, then you should also hide any PAGE_SIZE chunks from all domains (including Dom0). (Unfortunately we can't currently hide sub-page chunks in an effective manner.) Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |