Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 1349
b: refs/heads/master
c: 9092f46
h: refs/heads/master
i:
  1347: ab137c1
v: v3
  • Loading branch information
John W. Linville authored and Jeff Garzik committed May 24, 2005
1 parent 1f2501c commit b0f1aa2
Show file tree
Hide file tree
Showing 15 changed files with 85 additions and 105 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: 384f1fcd2db8bc5a15f20f10793d8e1c82acd6c5
refs/heads/master: 9092f46b5aed4515d9a427d5dab3be1584851f07
2 changes: 1 addition & 1 deletion trunk/Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 12
EXTRAVERSION =-rc5
EXTRAVERSION =-rc4
NAME=Woozy Numbat

# *DOCUMENTATION*
Expand Down
17 changes: 9 additions & 8 deletions trunk/arch/i386/mach-voyager/voyager_smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ static void ack_vic_irq(unsigned int irq);
static void vic_enable_cpi(void);
static void do_boot_cpu(__u8 cpuid);
static void do_quad_bootstrap(void);
static inline void wrapper_smp_local_timer_interrupt(struct pt_regs *);

int hard_smp_processor_id(void);

Expand Down Expand Up @@ -124,14 +125,6 @@ send_QIC_CPI(__u32 cpuset, __u8 cpi)
}
}

static inline void
wrapper_smp_local_timer_interrupt(struct pt_regs *regs)
{
irq_enter();
smp_local_timer_interrupt(regs);
irq_exit();
}

static inline void
send_one_CPI(__u8 cpu, __u8 cpi)
{
Expand Down Expand Up @@ -1256,6 +1249,14 @@ smp_vic_timer_interrupt(struct pt_regs *regs)
smp_local_timer_interrupt(regs);
}

static inline void
wrapper_smp_local_timer_interrupt(struct pt_regs *regs)
{
irq_enter();
smp_local_timer_interrupt(regs);
irq_exit();
}

/* local (per CPU) timer interrupt. It does both profiling and
* process statistics/rescheduling.
*
Expand Down
85 changes: 20 additions & 65 deletions trunk/arch/ppc64/kernel/mf.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* mf.c
* Copyright (C) 2001 Troy D. Armstrong IBM Corporation
* Copyright (C) 2004-2005 Stephen Rothwell IBM Corporation
* Copyright (C) 2004 Stephen Rothwell IBM Corporation
*
* This modules exists as an interface between a Linux secondary partition
* running on an iSeries and the primary partition's Virtual Service
Expand Down Expand Up @@ -36,12 +36,10 @@

#include <asm/time.h>
#include <asm/uaccess.h>
#include <asm/paca.h>
#include <asm/iSeries/vio.h>
#include <asm/iSeries/mf.h>
#include <asm/iSeries/HvLpConfig.h>
#include <asm/iSeries/ItSpCommArea.h>
#include <asm/iSeries/ItLpQueue.h>

/*
* This is the structure layout for the Machine Facilites LPAR event
Expand Down Expand Up @@ -698,23 +696,36 @@ static void get_rtc_time_complete(void *token, struct ce_msg_data *ce_msg)
complete(&rtc->com);
}

static int rtc_set_tm(int rc, u8 *ce_msg, struct rtc_time *tm)
int mf_get_rtc(struct rtc_time *tm)
{
struct ce_msg_comp_data ce_complete;
struct rtc_time_data rtc_data;
int rc;

memset(&ce_complete, 0, sizeof(ce_complete));
memset(&rtc_data, 0, sizeof(rtc_data));
init_completion(&rtc_data.com);
ce_complete.handler = &get_rtc_time_complete;
ce_complete.token = &rtc_data;
rc = signal_ce_msg_simple(0x40, &ce_complete);
if (rc)
return rc;
wait_for_completion(&rtc_data.com);
tm->tm_wday = 0;
tm->tm_yday = 0;
tm->tm_isdst = 0;
if (rc) {
if (rtc_data.rc) {
tm->tm_sec = 0;
tm->tm_min = 0;
tm->tm_hour = 0;
tm->tm_mday = 15;
tm->tm_mon = 5;
tm->tm_year = 52;
return rc;
return rtc_data.rc;
}

if ((ce_msg[2] == 0xa9) ||
(ce_msg[2] == 0xaf)) {
if ((rtc_data.ce_msg.ce_msg[2] == 0xa9) ||
(rtc_data.ce_msg.ce_msg[2] == 0xaf)) {
/* TOD clock is not set */
tm->tm_sec = 1;
tm->tm_min = 1;
Expand All @@ -725,6 +736,7 @@ static int rtc_set_tm(int rc, u8 *ce_msg, struct rtc_time *tm)
mf_set_rtc(tm);
}
{
u8 *ce_msg = rtc_data.ce_msg.ce_msg;
u8 year = ce_msg[5];
u8 sec = ce_msg[6];
u8 min = ce_msg[7];
Expand Down Expand Up @@ -753,63 +765,6 @@ static int rtc_set_tm(int rc, u8 *ce_msg, struct rtc_time *tm)
return 0;
}

int mf_get_rtc(struct rtc_time *tm)
{
struct ce_msg_comp_data ce_complete;
struct rtc_time_data rtc_data;
int rc;

memset(&ce_complete, 0, sizeof(ce_complete));
memset(&rtc_data, 0, sizeof(rtc_data));
init_completion(&rtc_data.com);
ce_complete.handler = &get_rtc_time_complete;
ce_complete.token = &rtc_data;
rc = signal_ce_msg_simple(0x40, &ce_complete);
if (rc)
return rc;
wait_for_completion(&rtc_data.com);
return rtc_set_tm(rtc_data.rc, rtc_data.ce_msg.ce_msg, tm);
}

struct boot_rtc_time_data {
int busy;
struct ce_msg_data ce_msg;
int rc;
};

static void get_boot_rtc_time_complete(void *token, struct ce_msg_data *ce_msg)
{
struct boot_rtc_time_data *rtc = token;

memcpy(&rtc->ce_msg, ce_msg, sizeof(rtc->ce_msg));
rtc->rc = 0;
rtc->busy = 0;
}

int mf_get_boot_rtc(struct rtc_time *tm)
{
struct ce_msg_comp_data ce_complete;
struct boot_rtc_time_data rtc_data;
int rc;

memset(&ce_complete, 0, sizeof(ce_complete));
memset(&rtc_data, 0, sizeof(rtc_data));
rtc_data.busy = 1;
ce_complete.handler = &get_boot_rtc_time_complete;
ce_complete.token = &rtc_data;
rc = signal_ce_msg_simple(0x40, &ce_complete);
if (rc)
return rc;
/* We need to poll here as we are not yet taking interrupts */
while (rtc_data.busy) {
extern unsigned long lpevent_count;
struct ItLpQueue *lpq = get_paca()->lpqueue_ptr;
if (lpq && ItLpQueue_isLpIntPending(lpq))
lpevent_count += ItLpQueue_process(lpq, NULL);
}
return rtc_set_tm(rtc_data.rc, rtc_data.ce_msg.ce_msg, tm);
}

int mf_set_rtc(struct rtc_time *tm)
{
char ce_time[12];
Expand Down
39 changes: 38 additions & 1 deletion trunk/arch/ppc64/kernel/rtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -292,10 +292,47 @@ int iSeries_set_rtc_time(struct rtc_time *tm)

void iSeries_get_boot_time(struct rtc_time *tm)
{
unsigned long time;
static unsigned long lastsec = 1;

u32 dataWord1 = *((u32 *)(&xSpCommArea.xBcdTimeAtIplStart));
u32 dataWord2 = *(((u32 *)&(xSpCommArea.xBcdTimeAtIplStart)) + 1);
int year = 1970;
int year1 = ( dataWord1 >> 24 ) & 0x000000FF;
int year2 = ( dataWord1 >> 16 ) & 0x000000FF;
int sec = ( dataWord1 >> 8 ) & 0x000000FF;
int min = dataWord1 & 0x000000FF;
int hour = ( dataWord2 >> 24 ) & 0x000000FF;
int day = ( dataWord2 >> 8 ) & 0x000000FF;
int mon = dataWord2 & 0x000000FF;

if ( piranha_simulator )
return;

mf_get_boot_rtc(tm);
BCD_TO_BIN(sec);
BCD_TO_BIN(min);
BCD_TO_BIN(hour);
BCD_TO_BIN(day);
BCD_TO_BIN(mon);
BCD_TO_BIN(year1);
BCD_TO_BIN(year2);
year = year1 * 100 + year2;

time = mktime(year, mon, day, hour, min, sec);
time += ( jiffies / HZ );

/* Now THIS is a nasty hack!
* It ensures that the first two calls get different answers.
* That way the loop in init_time (time.c) will not think
* the clock is stuck.
*/
if ( lastsec ) {
time -= lastsec;
--lastsec;
}

to_tm(time, tm);
tm->tm_year -= 1900;
tm->tm_mon -= 1;
}
#endif
Expand Down
1 change: 0 additions & 1 deletion trunk/arch/ppc64/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -515,7 +515,6 @@ void __init time_init(void)
do_gtod.varp = &do_gtod.vars[0];
do_gtod.var_idx = 0;
do_gtod.varp->tb_orig_stamp = tb_last_stamp;
get_paca()->next_jiffy_update_tb = tb_last_stamp + tb_ticks_per_jiffy;
do_gtod.varp->stamp_xsec = xtime.tv_sec * XSEC_PER_SEC;
do_gtod.tb_ticks_per_sec = tb_ticks_per_sec;
do_gtod.varp->tb_to_xs = tb_to_xs;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/ide/ide-cd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1933,7 +1933,7 @@ static ide_startstop_t cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
/*
* check if dma is safe
*/
if ((rq->data_len & 3) || (addr & mask))
if ((rq->data_len & mask) || (addr & mask))
info->dma = 0;
}

Expand Down
10 changes: 5 additions & 5 deletions trunk/drivers/media/video/saa7134/saa6752hs.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,15 @@ enum saa6752hs_videoformat {
static const struct v4l2_format v4l2_format_table[] =
{
[SAA6752HS_VF_D1] = {
.fmt = { .pix = { .width = 720, .height = 576 }, }, },
.fmt.pix.width = 720, .fmt.pix.height = 576 },
[SAA6752HS_VF_2_3_D1] = {
.fmt = { .pix = { .width = 480, .height = 576 }, }, },
.fmt.pix.width = 480, .fmt.pix.height = 576 },
[SAA6752HS_VF_1_2_D1] = {
.fmt = { .pix = { .width = 352, .height = 576 }, }, },
.fmt.pix.width = 352, .fmt.pix.height = 576 },
[SAA6752HS_VF_SIF] = {
.fmt = { .pix = { .width = 352, .height = 288 }, }, },
.fmt.pix.width = 352, .fmt.pix.height = 288 },
[SAA6752HS_VF_UNKNOWN] = {
.fmt = { .pix = { .width = 0, .height = 0 }, }, },
.fmt.pix.width = 0, .fmt.pix.height = 0},
};

struct saa6752hs_state {
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/net/tulip/media.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ void tulip_mdio_write(struct net_device *dev, int phy_id, int location, int val)
break;
}
spin_unlock_irqrestore(&tp->mii_lock, flags);
return;
}

/* Establish sync by sending 32 logic ones. */
Expand Down
7 changes: 2 additions & 5 deletions trunk/drivers/scsi/aic7xxx/aic7xxx_osm.c
Original file line number Diff line number Diff line change
Expand Up @@ -659,11 +659,8 @@ ahc_linux_slave_alloc(struct scsi_device *device)
ahc_lock(ahc, &flags);
targ = ahc->platform_data->targets[target_offset];
if (targ == NULL) {
struct seeprom_config *sc;

targ = ahc_linux_alloc_target(ahc, starget->channel,
starget->id);
sc = ahc->seep_config;
targ = ahc_linux_alloc_target(ahc, starget->channel, starget->id);
struct seeprom_config *sc = ahc->seep_config;
if (targ == NULL)
goto out;

Expand Down
2 changes: 0 additions & 2 deletions trunk/drivers/usb/atm/speedtch.c
Original file line number Diff line number Diff line change
Expand Up @@ -386,8 +386,6 @@ static void speedtch_poll_status(struct speedtch_instance_data *instance)
if (instance->u.atm_dev->signal != ATM_PHY_SIG_LOST) {
instance->u.atm_dev->signal = ATM_PHY_SIG_LOST;
printk(KERN_NOTICE "ADSL line is down\n");
/* It'll never resync again unless we ask it to... */
speedtch_start_synchro(instance);
}
break;

Expand Down
1 change: 0 additions & 1 deletion trunk/include/asm-ppc64/iSeries/mf.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ extern void mf_clear_src(void);
extern void mf_init(void);

extern int mf_get_rtc(struct rtc_time *tm);
extern int mf_get_boot_rtc(struct rtc_time *tm);
extern int mf_set_rtc(struct rtc_time *tm);

#endif /* _ASM_PPC64_ISERIES_MF_H */
4 changes: 3 additions & 1 deletion trunk/include/linux/wait.h
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,9 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
wait_queue_t name = { \
.task = current, \
.func = autoremove_wake_function, \
.task_list = LIST_HEAD_INIT((name).task_list), \
.task_list = { .next = &(name).task_list, \
.prev = &(name).task_list, \
}, \
}

#define DEFINE_WAIT_BIT(name, word, bit) \
Expand Down
11 changes: 1 addition & 10 deletions trunk/kernel/signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -522,16 +522,7 @@ static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
{
int sig = 0;

/* SIGKILL must have priority, otherwise it is quite easy
* to create an unkillable process, sending sig < SIGKILL
* to self */
if (unlikely(sigismember(&pending->signal, SIGKILL))) {
if (!sigismember(mask, SIGKILL))
sig = SIGKILL;
}

if (likely(!sig))
sig = next_signal(pending, mask);
sig = next_signal(pending, mask);
if (sig) {
if (current->notifier) {
if (sigismember(current->notifier_mask, sig)) {
Expand Down
6 changes: 3 additions & 3 deletions trunk/mm/rmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -626,7 +626,7 @@ static void try_to_unmap_cluster(unsigned long cursor,
pgd_t *pgd;
pud_t *pud;
pmd_t *pmd;
pte_t *pte, *original_pte;
pte_t *pte;
pte_t pteval;
struct page *page;
unsigned long address;
Expand Down Expand Up @@ -658,7 +658,7 @@ static void try_to_unmap_cluster(unsigned long cursor,
if (!pmd_present(*pmd))
goto out_unlock;

for (original_pte = pte = pte_offset_map(pmd, address);
for (pte = pte_offset_map(pmd, address);
address < end; pte++, address += PAGE_SIZE) {

if (!pte_present(*pte))
Expand Down Expand Up @@ -694,7 +694,7 @@ static void try_to_unmap_cluster(unsigned long cursor,
(*mapcount)--;
}

pte_unmap(original_pte);
pte_unmap(pte);
out_unlock:
spin_unlock(&mm->page_table_lock);
}
Expand Down

0 comments on commit b0f1aa2

Please sign in to comment.