forked from Minki/linux
Miscellaneous ia64 cleanups
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJXn8QHAAoJEKurIx+X31iBA8MQAINFPoU1ZbRiEqfRvCzU/evR snyu/sh4uBlFm7o2cOg5atdPYV+28Gz+yW7Y/aWAF+ftrcPJnFEfQaBZG4P3pGYv g5hiAcL/0ITLsBL0WoOGjE0FxUdF9MpajIwocHmfghlUycmLk1AJTD1iUBzpLcnu yiO2IL1AvfNIeDJangsAlCe/xhdfdCGmODj5gDnOTmGKjH2Pd9jLHd12L/bt0J9s PY6iGFgmhD373VJGeGeakHZA+eLcGXzyBBcoNg1L63vGVIIgM62AQwr1IFfwNGEr 4XwcQvetTTdvdjOnco5LF6IPjKW4IQ3pIy7SSP2b9LQheaKSnaLDuUt7kXh5jSC/ ICXW/+TvVKA1oU0Audp+RaXdwXjI7Jc+HvEwSLsiR4/61A8iUqoF1qlEBv5MmYU5 WZLoWQKTVuqg5HmTWfvF9LwBFuTHti8yjHt4LJ/lNryvmbYirZllXkB8CIY9fYsN u8aex71WiMV6qAVTb1zwHbeRzGRILK2/ngPfJ3QN4uS99rVcqTKO+gs2B0vl0VZj F399JSidnVFxeSwhpHwprgvOrBpGuQ5e6NpHCbYcYcdYRfvS7cMtOivfIJ5ENMp1 bZcCF/NyBerBAckznEyISFkAR/9l1gNl4bGp00cX2Dd8CAkgLnAtlULbgB8461ae VioZS6lltaXPTTewUNo5 =Jpj7 -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
e48af7aaf1
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user