Commit 66125d93 authored by Linus Torvalds's avatar Linus Torvalds

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

Pull alpha updates from Matt Turner:
 "A few changes for alpha. They're mostly small janitorial fixes but
  there's also a build fix and most notably a patch from Mikulas that
  fixes a hang on boot on the Avanti platform, which required quite a
  bit of work and review"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha:
  alpha: Fix build around srm_sysrq_reboot_op
  alpha: c_next should increase position index
  alpha: Replace sg++ with sg = sg_next(sg)
  alpha: fix memory barriers so that they conform to the specification
  alpha: remove unneeded semicolon in sys_eiger.c
  alpha: remove unneeded semicolon in osf_sys.c
  alpha: Replace strncmp with str_has_prefix
  alpha: fix rtc port ranges
  alpha: Kconfig: pedantic formatting
parents a9429089 777747f6
...@@ -148,7 +148,7 @@ main (int argc, char *argv[]) ...@@ -148,7 +148,7 @@ main (int argc, char *argv[])
#ifdef __ELF__ #ifdef __ELF__
elf = (struct elfhdr *) buf; elf = (struct elfhdr *) buf;
if (elf->e_ident[0] == 0x7f && strncmp((char *)elf->e_ident + 1, "ELF", 3) == 0) { if (elf->e_ident[0] == 0x7f && str_has_prefix((char *)elf->e_ident + 1, "ELF")) {
if (elf->e_type != ET_EXEC) { if (elf->e_type != ET_EXEC) {
fprintf(stderr, "%s: %s is not an ELF executable\n", fprintf(stderr, "%s: %s is not an ELF executable\n",
prog_name, inname); prog_name, inname);
......
...@@ -309,14 +309,18 @@ static inline int __is_mmio(const volatile void __iomem *addr) ...@@ -309,14 +309,18 @@ static inline int __is_mmio(const volatile void __iomem *addr)
#if IO_CONCAT(__IO_PREFIX,trivial_io_bw) #if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
extern inline unsigned int ioread8(void __iomem *addr) extern inline unsigned int ioread8(void __iomem *addr)
{ {
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread8)(addr); unsigned int ret;
mb();
ret = IO_CONCAT(__IO_PREFIX,ioread8)(addr);
mb(); mb();
return ret; return ret;
} }
extern inline unsigned int ioread16(void __iomem *addr) extern inline unsigned int ioread16(void __iomem *addr)
{ {
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread16)(addr); unsigned int ret;
mb();
ret = IO_CONCAT(__IO_PREFIX,ioread16)(addr);
mb(); mb();
return ret; return ret;
} }
...@@ -357,7 +361,9 @@ extern inline void outw(u16 b, unsigned long port) ...@@ -357,7 +361,9 @@ extern inline void outw(u16 b, unsigned long port)
#if IO_CONCAT(__IO_PREFIX,trivial_io_lq) #if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
extern inline unsigned int ioread32(void __iomem *addr) extern inline unsigned int ioread32(void __iomem *addr)
{ {
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread32)(addr); unsigned int ret;
mb();
ret = IO_CONCAT(__IO_PREFIX,ioread32)(addr);
mb(); mb();
return ret; return ret;
} }
...@@ -402,14 +408,18 @@ extern inline void __raw_writew(u16 b, volatile void __iomem *addr) ...@@ -402,14 +408,18 @@ extern inline void __raw_writew(u16 b, volatile void __iomem *addr)
extern inline u8 readb(const volatile void __iomem *addr) extern inline u8 readb(const volatile void __iomem *addr)
{ {
u8 ret = __raw_readb(addr); u8 ret;
mb();
ret = __raw_readb(addr);
mb(); mb();
return ret; return ret;
} }
extern inline u16 readw(const volatile void __iomem *addr) extern inline u16 readw(const volatile void __iomem *addr)
{ {
u16 ret = __raw_readw(addr); u16 ret;
mb();
ret = __raw_readw(addr);
mb(); mb();
return ret; return ret;
} }
...@@ -450,14 +460,18 @@ extern inline void __raw_writeq(u64 b, volatile void __iomem *addr) ...@@ -450,14 +460,18 @@ extern inline void __raw_writeq(u64 b, volatile void __iomem *addr)
extern inline u32 readl(const volatile void __iomem *addr) extern inline u32 readl(const volatile void __iomem *addr)
{ {
u32 ret = __raw_readl(addr); u32 ret;
mb();
ret = __raw_readl(addr);
mb(); mb();
return ret; return ret;
} }
extern inline u64 readq(const volatile void __iomem *addr) extern inline u64 readq(const volatile void __iomem *addr)
{ {
u64 ret = __raw_readq(addr); u64 ret;
mb();
ret = __raw_readq(addr);
mb(); mb();
return ret; return ret;
} }
...@@ -486,14 +500,44 @@ extern inline void writeq(u64 b, volatile void __iomem *addr) ...@@ -486,14 +500,44 @@ extern inline void writeq(u64 b, volatile void __iomem *addr)
#define outb_p outb #define outb_p outb
#define outw_p outw #define outw_p outw
#define outl_p outl #define outl_p outl
#define readb_relaxed(addr) __raw_readb(addr)
#define readw_relaxed(addr) __raw_readw(addr) extern u8 readb_relaxed(const volatile void __iomem *addr);
#define readl_relaxed(addr) __raw_readl(addr) extern u16 readw_relaxed(const volatile void __iomem *addr);
#define readq_relaxed(addr) __raw_readq(addr) extern u32 readl_relaxed(const volatile void __iomem *addr);
#define writeb_relaxed(b, addr) __raw_writeb(b, addr) extern u64 readq_relaxed(const volatile void __iomem *addr);
#define writew_relaxed(b, addr) __raw_writew(b, addr)
#define writel_relaxed(b, addr) __raw_writel(b, addr) #if IO_CONCAT(__IO_PREFIX,trivial_io_bw)
#define writeq_relaxed(b, addr) __raw_writeq(b, addr) extern inline u8 readb_relaxed(const volatile void __iomem *addr)
{
mb();
return __raw_readb(addr);
}
extern inline u16 readw_relaxed(const volatile void __iomem *addr)
{
mb();
return __raw_readw(addr);
}
#endif
#if IO_CONCAT(__IO_PREFIX,trivial_io_lq)
extern inline u32 readl_relaxed(const volatile void __iomem *addr)
{
mb();
return __raw_readl(addr);
}
extern inline u64 readq_relaxed(const volatile void __iomem *addr)
{
mb();
return __raw_readq(addr);
}
#endif
#define writeb_relaxed writeb
#define writew_relaxed writew
#define writel_relaxed writel
#define writeq_relaxed writeq
/* /*
* String version of IO memory access ops: * String version of IO memory access ops:
......
...@@ -16,21 +16,27 @@ ...@@ -16,21 +16,27 @@
unsigned int unsigned int
ioread8(void __iomem *addr) ioread8(void __iomem *addr)
{ {
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread8)(addr); unsigned int ret;
mb();
ret = IO_CONCAT(__IO_PREFIX,ioread8)(addr);
mb(); mb();
return ret; return ret;
} }
unsigned int ioread16(void __iomem *addr) unsigned int ioread16(void __iomem *addr)
{ {
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread16)(addr); unsigned int ret;
mb();
ret = IO_CONCAT(__IO_PREFIX,ioread16)(addr);
mb(); mb();
return ret; return ret;
} }
unsigned int ioread32(void __iomem *addr) unsigned int ioread32(void __iomem *addr)
{ {
unsigned int ret = IO_CONCAT(__IO_PREFIX,ioread32)(addr); unsigned int ret;
mb();
ret = IO_CONCAT(__IO_PREFIX,ioread32)(addr);
mb(); mb();
return ret; return ret;
} }
...@@ -148,28 +154,36 @@ EXPORT_SYMBOL(__raw_writeq); ...@@ -148,28 +154,36 @@ EXPORT_SYMBOL(__raw_writeq);
u8 readb(const volatile void __iomem *addr) u8 readb(const volatile void __iomem *addr)
{ {
u8 ret = __raw_readb(addr); u8 ret;
mb();
ret = __raw_readb(addr);
mb(); mb();
return ret; return ret;
} }
u16 readw(const volatile void __iomem *addr) u16 readw(const volatile void __iomem *addr)
{ {
u16 ret = __raw_readw(addr); u16 ret;
mb();
ret = __raw_readw(addr);
mb(); mb();
return ret; return ret;
} }
u32 readl(const volatile void __iomem *addr) u32 readl(const volatile void __iomem *addr)
{ {
u32 ret = __raw_readl(addr); u32 ret;
mb();
ret = __raw_readl(addr);
mb(); mb();
return ret; return ret;
} }
u64 readq(const volatile void __iomem *addr) u64 readq(const volatile void __iomem *addr)
{ {
u64 ret = __raw_readq(addr); u64 ret;
mb();
ret = __raw_readq(addr);
mb(); mb();
return ret; return ret;
} }
...@@ -207,6 +221,38 @@ EXPORT_SYMBOL(writew); ...@@ -207,6 +221,38 @@ EXPORT_SYMBOL(writew);
EXPORT_SYMBOL(writel); EXPORT_SYMBOL(writel);
EXPORT_SYMBOL(writeq); EXPORT_SYMBOL(writeq);
/*
* The _relaxed functions must be ordered w.r.t. each other, but they don't
* have to be ordered w.r.t. other memory accesses.
*/
u8 readb_relaxed(const volatile void __iomem *addr)
{
mb();
return __raw_readb(addr);
}
u16 readw_relaxed(const volatile void __iomem *addr)
{
mb();
return __raw_readw(addr);
}
u32 readl_relaxed(const volatile void __iomem *addr)
{
mb();
return __raw_readl(addr);
}
u64 readq_relaxed(const volatile void __iomem *addr)
{
mb();
return __raw_readq(addr);
}
EXPORT_SYMBOL(readb_relaxed);
EXPORT_SYMBOL(readw_relaxed);
EXPORT_SYMBOL(readl_relaxed);
EXPORT_SYMBOL(readq_relaxed);
/* /*
* Read COUNT 8-bit bytes from port PORT into memory starting at SRC. * Read COUNT 8-bit bytes from port PORT into memory starting at SRC.
......
...@@ -677,7 +677,7 @@ SYSCALL_DEFINE2(osf_proplist_syscall, enum pl_code, code, ...@@ -677,7 +677,7 @@ SYSCALL_DEFINE2(osf_proplist_syscall, enum pl_code, code,
default: default:
error = -EOPNOTSUPP; error = -EOPNOTSUPP;
break; break;
}; }
return error; return error;
} }
......
...@@ -638,7 +638,7 @@ sg_fill(struct device *dev, struct scatterlist *leader, struct scatterlist *end, ...@@ -638,7 +638,7 @@ sg_fill(struct device *dev, struct scatterlist *leader, struct scatterlist *end,
while (sg+1 < end && (int) sg[1].dma_address == -1) { while (sg+1 < end && (int) sg[1].dma_address == -1) {
size += sg[1].length; size += sg[1].length;
sg++; sg = sg_next(sg);
} }
npages = iommu_num_pages(paddr, size, PAGE_SIZE); npages = iommu_num_pages(paddr, size, PAGE_SIZE);
......
...@@ -253,7 +253,7 @@ reserve_std_resources(void) ...@@ -253,7 +253,7 @@ reserve_std_resources(void)
/* Fix up for the Jensen's queer RTC placement. */ /* Fix up for the Jensen's queer RTC placement. */
standard_io_resources[0].start = RTC_PORT(0); standard_io_resources[0].start = RTC_PORT(0);
standard_io_resources[0].end = RTC_PORT(0) + 0x10; standard_io_resources[0].end = RTC_PORT(0) + 0x0f;
for (i = 0; i < ARRAY_SIZE(standard_io_resources); ++i) for (i = 0; i < ARRAY_SIZE(standard_io_resources); ++i)
request_resource(io, standard_io_resources+i); request_resource(io, standard_io_resources+i);
...@@ -479,7 +479,7 @@ setup_arch(char **cmdline_p) ...@@ -479,7 +479,7 @@ setup_arch(char **cmdline_p)
#ifndef alpha_using_srm #ifndef alpha_using_srm
/* Assume that we've booted from SRM if we haven't booted from MILO. /* Assume that we've booted from SRM if we haven't booted from MILO.
Detect the later by looking for "MILO" in the system serial nr. */ Detect the later by looking for "MILO" in the system serial nr. */
alpha_using_srm = strncmp((const char *)hwrpb->ssn, "MILO", 4) != 0; alpha_using_srm = !str_has_prefix((const char *)hwrpb->ssn, "MILO");
#endif #endif
#ifndef alpha_using_qemu #ifndef alpha_using_qemu
/* Similarly, look for QEMU. */ /* Similarly, look for QEMU. */
...@@ -1425,6 +1425,7 @@ c_start(struct seq_file *f, loff_t *pos) ...@@ -1425,6 +1425,7 @@ c_start(struct seq_file *f, loff_t *pos)
static void * static void *
c_next(struct seq_file *f, void *v, loff_t *pos) c_next(struct seq_file *f, void *v, loff_t *pos)
{ {
(*pos)++;
return NULL; return NULL;
} }
......
...@@ -175,7 +175,7 @@ eiger_swizzle(struct pci_dev *dev, u8 *pinp) ...@@ -175,7 +175,7 @@ eiger_swizzle(struct pci_dev *dev, u8 *pinp)
case 0x03: bridge_count = 2; break; /* 2 */ case 0x03: bridge_count = 2; break; /* 2 */
case 0x07: bridge_count = 3; break; /* 3 */ case 0x07: bridge_count = 3; break; /* 3 */
case 0x0f: bridge_count = 4; break; /* 4 */ case 0x0f: bridge_count = 4; break; /* 4 */
}; }
slot = PCI_SLOT(dev->devfn); slot = PCI_SLOT(dev->devfn);
while (dev->bus->self) { while (dev->bus->self) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment