Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha

Pull alpha fixes from Matt Turner:
"A build fix and a regression fix"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha:
alpha/PCI: Fix noname IRQ level detection
alpha: extend memset16 to EV6 optimised routines

+35 -12
+29 -6
arch/alpha/kernel/sys_sio.c
··· 102 102 alpha_mv.sys.sio.route_tab); 103 103 } 104 104 105 + static bool sio_pci_dev_irq_needs_level(const struct pci_dev *dev) 106 + { 107 + if ((dev->class >> 16 == PCI_BASE_CLASS_BRIDGE) && 108 + (dev->class >> 8 != PCI_CLASS_BRIDGE_PCMCIA)) 109 + return false; 110 + 111 + return true; 112 + } 113 + 105 114 static unsigned int __init 106 115 sio_collect_irq_levels(void) 107 116 { ··· 119 110 120 111 /* Iterate through the devices, collecting IRQ levels. */ 121 112 for_each_pci_dev(dev) { 122 - if ((dev->class >> 16 == PCI_BASE_CLASS_BRIDGE) && 123 - (dev->class >> 8 != PCI_CLASS_BRIDGE_PCMCIA)) 113 + if (!sio_pci_dev_irq_needs_level(dev)) 124 114 continue; 125 115 126 116 if (dev->irq) ··· 128 120 return level_bits; 129 121 } 130 122 131 - static void __init 132 - sio_fixup_irq_levels(unsigned int level_bits) 123 + static void __sio_fixup_irq_levels(unsigned int level_bits, bool reset) 133 124 { 134 125 unsigned int old_level_bits; 135 126 ··· 146 139 */ 147 140 old_level_bits = inb(0x4d0) | (inb(0x4d1) << 8); 148 141 149 - level_bits |= (old_level_bits & 0x71ff); 142 + if (reset) 143 + old_level_bits &= 0x71ff; 144 + 145 + level_bits |= old_level_bits; 150 146 151 147 outb((level_bits >> 0) & 0xff, 0x4d0); 152 148 outb((level_bits >> 8) & 0xff, 0x4d1); 149 + } 150 + 151 + static inline void 152 + sio_fixup_irq_levels(unsigned int level_bits) 153 + { 154 + __sio_fixup_irq_levels(level_bits, true); 153 155 } 154 156 155 157 static inline int ··· 197 181 const long min_idsel = 6, max_idsel = 14, irqs_per_slot = 5; 198 182 int irq = COMMON_TABLE_LOOKUP, tmp; 199 183 tmp = __kernel_extbl(alpha_mv.sys.sio.route_tab, irq); 200 - return irq >= 0 ? tmp : -1; 184 + 185 + irq = irq >= 0 ? tmp : -1; 186 + 187 + /* Fixup IRQ level if an actual IRQ mapping is detected */ 188 + if (sio_pci_dev_irq_needs_level(dev) && irq >= 0) 189 + __sio_fixup_irq_levels(1 << irq, false); 190 + 191 + return irq; 201 192 } 202 193 203 194 static inline int
+6 -6
arch/alpha/lib/ev6-memset.S
··· 18 18 * The algorithm for the leading and trailing quadwords remains the same, 19 19 * however the loop has been unrolled to enable better memory throughput, 20 20 * and the code has been replicated for each of the entry points: __memset 21 - * and __memsetw to permit better scheduling to eliminate the stalling 21 + * and __memset16 to permit better scheduling to eliminate the stalling 22 22 * encountered during the mask replication. 23 23 * A future enhancement might be to put in a byte store loop for really 24 24 * small (say < 32 bytes) memset()s. Whether or not that change would be ··· 34 34 .globl memset 35 35 .globl __memset 36 36 .globl ___memset 37 - .globl __memsetw 37 + .globl __memset16 38 38 .globl __constant_c_memset 39 39 40 40 .ent ___memset ··· 415 415 * to mask stalls. Note that entry point names also had to change 416 416 */ 417 417 .align 5 418 - .ent __memsetw 418 + .ent __memset16 419 419 420 - __memsetw: 420 + __memset16: 421 421 .frame $30,0,$26,0 422 422 .prologue 0 423 423 ··· 596 596 nop 597 597 ret $31,($26),1 # L0 : 598 598 599 - .end __memsetw 600 - EXPORT_SYMBOL(__memsetw) 599 + .end __memset16 600 + EXPORT_SYMBOL(__memset16) 601 601 602 602 memset = ___memset 603 603 __memset = ___memset