Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 121360
b: refs/heads/master
c: 0b3016b
h: refs/heads/master
v: v3
  • Loading branch information
Martin Schwidefsky committed Dec 25, 2008
1 parent c2611ad commit 25e2def
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 750887dedc088d28198b170bcae83695247797d1
refs/heads/master: 0b3016b781abeabc502042c942cbc611e31250c7
23 changes: 18 additions & 5 deletions trunk/arch/s390/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,7 @@ static struct timer_list etr_timer;

static void etr_timeout(unsigned long dummy);
static void etr_work_fn(struct work_struct *work);
static DEFINE_MUTEX(etr_work_mutex);
static DECLARE_WORK(etr_work, etr_work_fn);

/*
Expand Down Expand Up @@ -976,6 +977,9 @@ static void etr_work_fn(struct work_struct *work)
struct etr_aib aib;
int sync_port;

/* prevent multiple execution. */
mutex_lock(&etr_work_mutex);

/* Create working copy of etr_eacr. */
eacr = etr_eacr;

Expand All @@ -991,7 +995,7 @@ static void etr_work_fn(struct work_struct *work)
del_timer_sync(&etr_timer);
etr_update_eacr(eacr);
clear_bit(CLOCK_SYNC_ETR, &clock_sync_flags);
return;
goto out_unlock;
}

/* Store aib to get the current ETR status word. */
Expand Down Expand Up @@ -1078,7 +1082,7 @@ static void etr_work_fn(struct work_struct *work)
eacr.es || sync_port < 0) {
etr_update_eacr(eacr);
etr_set_tolec_timeout(now);
return;
goto out_unlock;
}

/*
Expand Down Expand Up @@ -1106,6 +1110,8 @@ static void etr_work_fn(struct work_struct *work)
etr_set_sync_timeout();
} else
etr_set_tolec_timeout(now);
out_unlock:
mutex_unlock(&etr_work_mutex);
}

/*
Expand Down Expand Up @@ -1394,6 +1400,7 @@ static struct stp_sstpi stp_info;
static void *stp_page;

static void stp_work_fn(struct work_struct *work);
static DEFINE_MUTEX(stp_work_mutex);
static DECLARE_WORK(stp_work, stp_work_fn);

static int __init early_parse_stp(char *p)
Expand Down Expand Up @@ -1542,24 +1549,30 @@ static void stp_work_fn(struct work_struct *work)
struct clock_sync_data stp_sync;
int rc;

/* prevent multiple execution. */
mutex_lock(&stp_work_mutex);

if (!stp_online) {
chsc_sstpc(stp_page, STP_OP_CTRL, 0x0000);
return;
goto out_unlock;
}

rc = chsc_sstpc(stp_page, STP_OP_CTRL, 0xb0e0);
if (rc)
return;
goto out_unlock;

rc = chsc_sstpi(stp_page, &stp_info, sizeof(struct stp_sstpi));
if (rc || stp_info.c == 0)
return;
goto out_unlock;

memset(&stp_sync, 0, sizeof(stp_sync));
get_online_cpus();
atomic_set(&stp_sync.cpus, num_online_cpus() - 1);
stop_machine(stp_sync_clock, &stp_sync, &cpu_online_map);
put_online_cpus();

out_unlock:
mutex_unlock(&stp_work_mutex);
}

/*
Expand Down

0 comments on commit 25e2def

Please sign in to comment.