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

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

Merge tag 'please-pull-misc-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux

Pull ia64 updates from Tony Luck:
 "Miscellaneous ia64 cleanups"

* tag 'please-pull-misc-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux:
  ia64: salinfo: use a waitqueue instead a sema down/up combo
  ia64: efi: use timespec64 for persistent clock
parents ed780686 fbb0e4da
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -236,7 +236,7 @@ STUB_GET_NEXT_HIGH_MONO_COUNT(virt, id)
STUB_RESET_SYSTEM(virt, id)
STUB_RESET_SYSTEM(virt, id)


void
void
efi_gettimeofday (struct timespec *ts)
efi_gettimeofday (struct timespec64 *ts)
{
{
	efi_time_t tm;
	efi_time_t tm;


@@ -245,7 +245,7 @@ efi_gettimeofday (struct timespec *ts)
		return;
		return;
	}
	}


	ts->tv_sec = mktime(tm.year, tm.month, tm.day,
	ts->tv_sec = mktime64(tm.year, tm.month, tm.day,
			    tm.hour, tm.minute, tm.second);
			    tm.hour, tm.minute, tm.second);
	ts->tv_nsec = tm.nanosecond;
	ts->tv_nsec = tm.nanosecond;
}
}
+10 −28
Original line number Original line Diff line number Diff line
@@ -141,7 +141,7 @@ enum salinfo_state {


struct salinfo_data {
struct salinfo_data {
	cpumask_t		cpu_event;	/* which cpus have outstanding events */
	cpumask_t		cpu_event;	/* which cpus have outstanding events */
	struct semaphore	mutex;
	wait_queue_head_t	read_wait;
	u8			*log_buffer;
	u8			*log_buffer;
	u64			log_size;
	u64			log_size;
	u8			*oemdata;	/* decoded oem data */
	u8			*oemdata;	/* decoded oem data */
@@ -182,21 +182,6 @@ struct salinfo_platform_oemdata_parms {
	int ret;
	int ret;
};
};


/* Kick the mutex that tells user space that there is work to do.  Instead of
 * trying to track the state of the mutex across multiple cpus, in user
 * context, interrupt context, non-maskable interrupt context and hotplug cpu,
 * it is far easier just to grab the mutex if it is free then release it.
 *
 * This routine must be called with data_saved_lock held, to make the down/up
 * operation atomic.
 */
static void
salinfo_work_to_do(struct salinfo_data *data)
{
	(void)(down_trylock(&data->mutex) ?: 0);
	up(&data->mutex);
}

static void
static void
salinfo_platform_oemdata_cpu(void *context)
salinfo_platform_oemdata_cpu(void *context)
{
{
@@ -258,7 +243,7 @@ salinfo_log_wakeup(int type, u8 *buffer, u64 size, int irqsafe)
	}
	}
	cpumask_set_cpu(smp_processor_id(), &data->cpu_event);
	cpumask_set_cpu(smp_processor_id(), &data->cpu_event);
	if (irqsafe) {
	if (irqsafe) {
		salinfo_work_to_do(data);
		wake_up_interruptible(&data->read_wait);
		spin_unlock_irqrestore(&data_saved_lock, flags);
		spin_unlock_irqrestore(&data_saved_lock, flags);
	}
	}
}
}
@@ -271,14 +256,10 @@ extern void ia64_mlogbuf_dump(void);
static void
static void
salinfo_timeout_check(struct salinfo_data *data)
salinfo_timeout_check(struct salinfo_data *data)
{
{
	unsigned long flags;
	if (!data->open)
	if (!data->open)
		return;
		return;
	if (!cpumask_empty(&data->cpu_event)) {
	if (!cpumask_empty(&data->cpu_event))
		spin_lock_irqsave(&data_saved_lock, flags);
		wake_up_interruptible(&data->read_wait);
		salinfo_work_to_do(data);
		spin_unlock_irqrestore(&data_saved_lock, flags);
	}
}
}


static void
static void
@@ -308,10 +289,11 @@ salinfo_event_read(struct file *file, char __user *buffer, size_t count, loff_t
	int i, n, cpu = -1;
	int i, n, cpu = -1;


retry:
retry:
	if (cpumask_empty(&data->cpu_event) && down_trylock(&data->mutex)) {
	if (cpumask_empty(&data->cpu_event)) {
		if (file->f_flags & O_NONBLOCK)
		if (file->f_flags & O_NONBLOCK)
			return -EAGAIN;
			return -EAGAIN;
		if (down_interruptible(&data->mutex))
		if (wait_event_interruptible(data->read_wait,
					     !cpumask_empty(&data->cpu_event)))
			return -EINTR;
			return -EINTR;
	}
	}


@@ -510,7 +492,7 @@ salinfo_log_clear(struct salinfo_data *data, int cpu)
	if (data->state == STATE_LOG_RECORD) {
	if (data->state == STATE_LOG_RECORD) {
		spin_lock_irqsave(&data_saved_lock, flags);
		spin_lock_irqsave(&data_saved_lock, flags);
		cpumask_set_cpu(cpu, &data->cpu_event);
		cpumask_set_cpu(cpu, &data->cpu_event);
		salinfo_work_to_do(data);
		wake_up_interruptible(&data->read_wait);
		spin_unlock_irqrestore(&data_saved_lock, flags);
		spin_unlock_irqrestore(&data_saved_lock, flags);
	}
	}
	return 0;
	return 0;
@@ -582,7 +564,7 @@ salinfo_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu
		     i < ARRAY_SIZE(salinfo_data);
		     i < ARRAY_SIZE(salinfo_data);
		     ++i, ++data) {
		     ++i, ++data) {
			cpumask_set_cpu(cpu, &data->cpu_event);
			cpumask_set_cpu(cpu, &data->cpu_event);
			salinfo_work_to_do(data);
			wake_up_interruptible(&data->read_wait);
		}
		}
		spin_unlock_irqrestore(&data_saved_lock, flags);
		spin_unlock_irqrestore(&data_saved_lock, flags);
		break;
		break;
@@ -640,7 +622,7 @@ salinfo_init(void)
	for (i = 0; i < ARRAY_SIZE(salinfo_log_name); i++) {
	for (i = 0; i < ARRAY_SIZE(salinfo_log_name); i++) {
		data = salinfo_data + i;
		data = salinfo_data + i;
		data->type = i;
		data->type = i;
		sema_init(&data->mutex, 1);
		init_waitqueue_head(&data->read_wait);
		dir = proc_mkdir(salinfo_log_name[i], salinfo_dir);
		dir = proc_mkdir(salinfo_log_name[i], salinfo_dir);
		if (!dir)
		if (!dir)
			continue;
			continue;
+1 −1
Original line number Original line Diff line number Diff line
@@ -355,7 +355,7 @@ static struct irqaction timer_irqaction = {
	.name =		"timer"
	.name =		"timer"
};
};


void read_persistent_clock(struct timespec *ts)
void read_persistent_clock64(struct timespec64 *ts)
{
{
	efi_gettimeofday(ts);
	efi_gettimeofday(ts);
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -879,7 +879,7 @@ extern void efi_init (void);
extern void *efi_get_pal_addr (void);
extern void *efi_get_pal_addr (void);
extern void efi_map_pal_code (void);
extern void efi_map_pal_code (void);
extern void efi_memmap_walk (efi_freemem_callback_t callback, void *arg);
extern void efi_memmap_walk (efi_freemem_callback_t callback, void *arg);
extern void efi_gettimeofday (struct timespec *ts);
extern void efi_gettimeofday (struct timespec64 *ts);
extern void efi_enter_virtual_mode (void);	/* switch EFI to virtual mode, if possible */
extern void efi_enter_virtual_mode (void);	/* switch EFI to virtual mode, if possible */
#ifdef CONFIG_X86
#ifdef CONFIG_X86
extern void efi_late_init(void);
extern void efi_late_init(void);