Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 839fe915 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull parisc updates from Helge Deller:
 "The most important changes in this patchset are:

   - re-enable 64bit PCI bus addresses which were temporarily disabled
     for PA-RISC in kernel 4.2

   - fix the 64bit CAS operation in the LWS path which now enables us to
     enable the 64bit gcc atomic builtins even on 32bit userspace with
     64bit kernel

   - fix a long-standing bug which sometimes crashed kernel at bootup
     while serial interrupt wasn't registered yet"

* 'parisc-4.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
  parisc: Use platform_device_register_simple("rtc-generic")
  parisc: Drop CONFIG_SMP around update_cr16_clocksource()
  parisc: Use double word condition in 64bit CAS operation
  parisc: Filter out spurious interrupts in PA-RISC irq handler
  parisc: Additionally check for in_atomic() in page fault handler
  PCI,parisc: Enable 64-bit bus addresses on PA-RISC
  parisc: Define ioremap_uc and ioremap_wc
parents 54283aed 6dc0dcde
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -137,6 +137,8 @@ static inline void __iomem * ioremap(unsigned long offset, unsigned long size)
	return __ioremap(offset, size, _PAGE_NO_CACHE);
}
#define ioremap_nocache(off, sz)	ioremap((off), (sz))
#define ioremap_wc			ioremap_nocache
#define ioremap_uc			ioremap_nocache

extern void iounmap(const volatile void __iomem *addr);

+7 −2
Original line number Diff line number Diff line
@@ -507,8 +507,8 @@ void do_cpu_irq_mask(struct pt_regs *regs)
	struct pt_regs *old_regs;
	unsigned long eirr_val;
	int irq, cpu = smp_processor_id();
#ifdef CONFIG_SMP
	struct irq_data *irq_data;
#ifdef CONFIG_SMP
	cpumask_t dest;
#endif

@@ -521,8 +521,13 @@ void do_cpu_irq_mask(struct pt_regs *regs)
		goto set_out;
	irq = eirr_to_irq(eirr_val);

#ifdef CONFIG_SMP
	irq_data = irq_get_irq_data(irq);

	/* Filter out spurious interrupts, mostly from serial port at bootup */
	if (unlikely(!irq_desc_has_action(irq_data_to_desc(irq_data))))
		goto set_out;

#ifdef CONFIG_SMP
	cpumask_copy(&dest, irq_data_get_affinity_mask(irq_data));
	if (irqd_is_per_cpu(irq_data) &&
	    !cpumask_test_cpu(smp_processor_id(), &dest)) {
+1 −1
Original line number Diff line number Diff line
@@ -821,7 +821,7 @@ cas2_action:
	/* 64bit CAS */
#ifdef CONFIG_64BIT
19:	ldd,ma	0(%sr3,%r26), %r29
	sub,=	%r29, %r25, %r0
	sub,*=	%r29, %r25, %r0
	b,n	cas2_end
20:	std,ma	%r24, 0(%sr3,%r26)
	copy	%r0, %r28
+4 −17
Original line number Diff line number Diff line
@@ -202,7 +202,6 @@ static struct clocksource clocksource_cr16 = {
	.flags			= CLOCK_SOURCE_IS_CONTINUOUS,
};

#ifdef CONFIG_SMP
int update_cr16_clocksource(void)
{
	/* since the cr16 cycle counters are not synchronized across CPUs,
@@ -214,12 +213,6 @@ int update_cr16_clocksource(void)

	return 0;
}
#else
int update_cr16_clocksource(void)
{
	return 0; /* no change */
}
#endif /*CONFIG_SMP*/

void __init start_cpu_itimer(void)
{
@@ -231,20 +224,14 @@ void __init start_cpu_itimer(void)
	per_cpu(cpu_data, cpu).it_value = next_tick;
}

static struct platform_device rtc_generic_dev = {
	.name = "rtc-generic",
	.id = -1,
};

static int __init rtc_init(void)
{
	if (platform_device_register(&rtc_generic_dev) < 0)
		printk(KERN_ERR "unable to register rtc device...\n");
	struct platform_device *pdev;

	/* not necessarily an error */
	return 0;
	pdev = platform_device_register_simple("rtc-generic", -1, NULL, 0);
	return PTR_ERR_OR_ZERO(pdev);
}
module_init(rtc_init);
device_initcall(rtc_init);

void read_persistent_clock(struct timespec *ts)
{
+1 −1
Original line number Diff line number Diff line
@@ -207,7 +207,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
	int fault;
	unsigned int flags;

	if (pagefault_disabled())
	if (faulthandler_disabled())
		goto no_context;

	tsk = current;
Loading