lkml.org 
[lkml]   [2005]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 2.6.11.2 1/1] PCI Allow OutOfRange PIRQ table address
    On Thu, Mar 10, 2005 at 05:29:35AM -0800, jayalk@intworks.biz wrote:

    Nice work, I like it. You could make it even prettier:

    > diff -uprN -X dontdiff linux-2.6.11.2-vanilla/arch/i386/pci/irq.c linux-2.6.11.2/arch/i386/pci/irq.c
    > --- linux-2.6.11.2-vanilla/arch/i386/pci/irq.c 2005-03-10 16:31:25.000000000 +0800
    > +++ linux-2.6.11.2/arch/i386/pci/irq.c 2005-03-10 20:43:02.479487640 +0800
    > @@ -58,6 +58,35 @@ struct irq_router_handler {
    > int (*pcibios_enable_irq)(struct pci_dev *dev) = NULL;
    >
    > /*
    > + * Check passed address for the PCI IRQ Routing Table signature
    > + * and perform checksum verification.
    > + */
    > +
    > +static inline struct irq_routing_table * __init pirq_check_routing_table(u8 *addr)
    > +{
    > + struct irq_routing_table *rt;
    > + int i;
    > + u8 sum;
    > +
    > + rt = (struct irq_routing_table *) addr;

    static inline struct irq_routing_table * __init pirq_check_routing_table(unsigned long phys)
    {
    struct irq_routing_table *rt = __va(phys);
    [...]

    > @@ -65,21 +94,16 @@ static struct irq_routing_table * __init
    > {
    > u8 *addr;

    unsigned long addr;

    > struct irq_routing_table *rt;
    > - int i;
    > - u8 sum;
    >
    > + if (pirq_table_addr) {
    > + rt = pirq_check_routing_table((u8 *) __va(pirq_table_addr));
    > + if (rt) {
    > + return rt;
    > + }
    > + }

    if (pirq_table_addr) {
    rt = pirq_check_routing_table(pirq_table_addr);
    if (rt)
    return rt;
    }

    Should we fall back to searching if someone's specified an address? If not,
    it becomes even simpler:

    if (pirq_table_addr) {
    return pirq_check_routing_table(pirq_table_addr);
    }

    > for(addr = (u8 *) __va(0xf0000); addr < (u8 *) __va(0x100000); addr += 16) {

    This loop would become:

    for (addr = 0xf0000; addr < 0x100000; addr += 16) {

    > @@ -27,6 +27,7 @@
    > #define PCI_ASSIGN_ALL_BUSSES 0x4000
    >
    > extern unsigned int pci_probe;
    > +extern unsigned int pirq_table_addr;

    Completely nitpicking, but I think this should be an unsigned long rather
    than an int -- physical addresses are normally expressed in terms of
    unsigned long.

    > + pirqaddr=0xAAAAA [IA-32] Specify the physical address
    > + of the PIRQ table (normally generated
    > + by the BIOS) if it is outside the .
    > + F0000h-100000h range.

    And you even bothered to update the documentation! This is definitely
    a cut above most of the patches I review ;-)

    --
    "Next the statesmen will invent cheap lies, putting the blame upon
    the nation that is attacked, and every man will be glad of those
    conscience-soothing falsities, and will diligently study them, and refuse
    to examine any refutations of them; and thus he will by and by convince
    himself that the war is just, and will thank God for the better sleep
    he enjoys after this process of grotesque self-deception." -- Mark Twain
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 14:11    [W:0.023 / U:60.488 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site