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

Commit b76a1e4f authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6

* 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6:
  [S390] qdio: free indicator after reset is finished
  [S390] nmi: fix clock comparator revalidation
parents 78daa87b 4814a2b3
Loading
Loading
Loading
Loading
+4 −6
Original line number Original line Diff line number Diff line
@@ -95,7 +95,6 @@ EXPORT_SYMBOL_GPL(s390_handle_mcck);
static int notrace s390_revalidate_registers(struct mci *mci)
static int notrace s390_revalidate_registers(struct mci *mci)
{
{
	int kill_task;
	int kill_task;
	u64 tmpclock;
	u64 zero;
	u64 zero;
	void *fpt_save_area, *fpt_creg_save_area;
	void *fpt_save_area, *fpt_creg_save_area;


@@ -214,11 +213,10 @@ static int notrace s390_revalidate_registers(struct mci *mci)
			: "0", "cc");
			: "0", "cc");
#endif
#endif
	/* Revalidate clock comparator register */
	/* Revalidate clock comparator register */
	asm volatile(
	if (S390_lowcore.clock_comparator == -1)
		"	stck	0(%1)\n"
		set_clock_comparator(S390_lowcore.mcck_clock);
		"	sckc	0(%1)"
	else
		: "=m" (tmpclock) : "a" (&(tmpclock)) : "cc", "memory");
		set_clock_comparator(S390_lowcore.clock_comparator);

	/* Check if old PSW is valid */
	/* Check if old PSW is valid */
	if (!mci->wp)
	if (!mci->wp)
		/*
		/*
+9 −5
Original line number Original line Diff line number Diff line
@@ -29,17 +29,21 @@ static void __udelay_disabled(unsigned long long usecs)
{
{
	unsigned long mask, cr0, cr0_saved;
	unsigned long mask, cr0, cr0_saved;
	u64 clock_saved;
	u64 clock_saved;
	u64 end;


	mask = psw_kernel_bits | PSW_MASK_WAIT | PSW_MASK_EXT;
	end = get_clock() + (usecs << 12);
	clock_saved = local_tick_disable();
	clock_saved = local_tick_disable();
	set_clock_comparator(get_clock() + (usecs << 12));
	__ctl_store(cr0_saved, 0, 0);
	__ctl_store(cr0_saved, 0, 0);
	cr0 = (cr0_saved & 0xffff00e0) | 0x00000800;
	cr0 = (cr0_saved & 0xffff00e0) | 0x00000800;
	__ctl_load(cr0 , 0, 0);
	__ctl_load(cr0 , 0, 0);
	mask = psw_kernel_bits | PSW_MASK_WAIT | PSW_MASK_EXT;
	lockdep_off();
	lockdep_off();
	do {
		set_clock_comparator(end);
		trace_hardirqs_on();
		trace_hardirqs_on();
		__load_psw_mask(mask);
		__load_psw_mask(mask);
		local_irq_disable();
		local_irq_disable();
	} while (get_clock() < end);
	lockdep_on();
	lockdep_on();
	__ctl_load(cr0_saved, 0, 0);
	__ctl_load(cr0_saved, 0, 0);
	local_tick_enable(clock_saved);
	local_tick_enable(clock_saved);
+1 −1
Original line number Original line Diff line number Diff line
@@ -292,8 +292,8 @@ void qdio_shutdown_thinint(struct qdio_irq *irq_ptr)
		return;
		return;


	/* reset adapter interrupt indicators */
	/* reset adapter interrupt indicators */
	put_indicator(irq_ptr->dsci);
	set_subchannel_ind(irq_ptr, 1);
	set_subchannel_ind(irq_ptr, 1);
	put_indicator(irq_ptr->dsci);
}
}


void __exit tiqdio_unregister_thinints(void)
void __exit tiqdio_unregister_thinints(void)