mirror of https://gitee.com/openkylin/linux.git
Merge branch 'master'
This commit is contained in:
commit
26ba2a7a9f
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 14
|
||||
EXTRAVERSION =-rc5
|
||||
EXTRAVERSION =
|
||||
NAME=Affluent Albatross
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -488,6 +488,7 @@ static int is_pxafb_device(struct device * dev, void * data)
|
|||
|
||||
unsigned long spitz_get_hsync_len(void)
|
||||
{
|
||||
#ifdef CONFIG_FB_PXA
|
||||
if (!spitz_pxafb_dev) {
|
||||
spitz_pxafb_dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
|
||||
if (!spitz_pxafb_dev)
|
||||
|
@ -496,6 +497,7 @@ unsigned long spitz_get_hsync_len(void)
|
|||
if (!get_hsync_time)
|
||||
get_hsync_time = symbol_get(pxafb_get_hsync_time);
|
||||
if (!get_hsync_time)
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
return pxafb_get_hsync_time(spitz_pxafb_dev);
|
||||
|
|
|
@ -506,8 +506,8 @@ struct mpic * __init mpic_alloc(unsigned long phys_addr,
|
|||
mpic->senses_count = senses_count;
|
||||
|
||||
/* Map the global registers */
|
||||
mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x1000);
|
||||
mpic->tmregs = mpic->gregs + (MPIC_TIMER_BASE >> 2);
|
||||
mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x2000);
|
||||
mpic->tmregs = mpic->gregs + ((MPIC_TIMER_BASE - MPIC_GREG_BASE) >> 2);
|
||||
BUG_ON(mpic->gregs == NULL);
|
||||
|
||||
/* Reset */
|
||||
|
|
|
@ -1133,10 +1133,10 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
|
|||
ring_start = (dev_priv->cp_ring->offset
|
||||
- dev->agp->base
|
||||
+ dev_priv->gart_vm_start);
|
||||
} else
|
||||
} else
|
||||
#endif
|
||||
ring_start = (dev_priv->cp_ring->offset
|
||||
- dev->sg->handle
|
||||
- (unsigned long)dev->sg->virtual
|
||||
+ dev_priv->gart_vm_start);
|
||||
|
||||
RADEON_WRITE( RADEON_CP_RB_BASE, ring_start );
|
||||
|
@ -1164,7 +1164,8 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev,
|
|||
drm_sg_mem_t *entry = dev->sg;
|
||||
unsigned long tmp_ofs, page_ofs;
|
||||
|
||||
tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle;
|
||||
tmp_ofs = dev_priv->ring_rptr->offset -
|
||||
(unsigned long)dev->sg->virtual;
|
||||
page_ofs = tmp_ofs >> PAGE_SHIFT;
|
||||
|
||||
RADEON_WRITE( RADEON_CP_RB_RPTR_ADDR,
|
||||
|
@ -1491,8 +1492,8 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init )
|
|||
else
|
||||
#endif
|
||||
dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset
|
||||
- dev->sg->handle
|
||||
+ dev_priv->gart_vm_start);
|
||||
- (unsigned long)dev->sg->virtual
|
||||
+ dev_priv->gart_vm_start);
|
||||
|
||||
DRM_DEBUG( "dev_priv->gart_size %d\n",
|
||||
dev_priv->gart_size );
|
||||
|
|
|
@ -315,9 +315,9 @@ static void dbs_check_cpu(int cpu)
|
|||
policy = this_dbs_info->cur_policy;
|
||||
|
||||
if ( init_flag == 0 ) {
|
||||
for ( /* NULL */; init_flag < NR_CPUS; init_flag++ ) {
|
||||
dbs_info = &per_cpu(cpu_dbs_info, init_flag);
|
||||
requested_freq[cpu] = dbs_info->cur_policy->cur;
|
||||
for_each_online_cpu(j) {
|
||||
dbs_info = &per_cpu(cpu_dbs_info, j);
|
||||
requested_freq[j] = dbs_info->cur_policy->cur;
|
||||
}
|
||||
init_flag = 1;
|
||||
}
|
||||
|
|
|
@ -3568,7 +3568,8 @@ static void md_do_sync(mddev_t *mddev)
|
|||
mddev->curr_resync = 2;
|
||||
|
||||
try_again:
|
||||
if (signal_pending(current)) {
|
||||
if (signal_pending(current) ||
|
||||
kthread_should_stop()) {
|
||||
flush_signals(current);
|
||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||
goto skip;
|
||||
|
@ -3590,8 +3591,9 @@ static void md_do_sync(mddev_t *mddev)
|
|||
*/
|
||||
continue;
|
||||
prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE);
|
||||
if (!signal_pending(current)
|
||||
&& mddev2->curr_resync >= mddev->curr_resync) {
|
||||
if (!signal_pending(current) &&
|
||||
!kthread_should_stop() &&
|
||||
mddev2->curr_resync >= mddev->curr_resync) {
|
||||
printk(KERN_INFO "md: delaying resync of %s"
|
||||
" until %s has finished resync (they"
|
||||
" share one or more physical units)\n",
|
||||
|
@ -3697,7 +3699,7 @@ static void md_do_sync(mddev_t *mddev)
|
|||
}
|
||||
|
||||
|
||||
if (signal_pending(current)) {
|
||||
if (signal_pending(current) || kthread_should_stop()) {
|
||||
/*
|
||||
* got a signal, exit.
|
||||
*/
|
||||
|
|
|
@ -152,6 +152,7 @@ static int __devinit pci_hp_diva_init(struct pci_dev *dev)
|
|||
rc = 4;
|
||||
break;
|
||||
case PCI_DEVICE_ID_HP_DIVA_POWERBAR:
|
||||
case PCI_DEVICE_ID_HP_DIVA_HURRICANE:
|
||||
rc = 1;
|
||||
break;
|
||||
}
|
||||
|
@ -226,8 +227,10 @@ static int __devinit pci_plx9050_init(struct pci_dev *dev)
|
|||
}
|
||||
|
||||
irq_config = 0x41;
|
||||
if (dev->vendor == PCI_VENDOR_ID_PANACOM)
|
||||
if (dev->vendor == PCI_VENDOR_ID_PANACOM ||
|
||||
dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS) {
|
||||
irq_config = 0x43;
|
||||
}
|
||||
if ((dev->vendor == PCI_VENDOR_ID_PLX) &&
|
||||
(dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) {
|
||||
/*
|
||||
|
@ -661,6 +664,15 @@ static struct pci_serial_quirk pci_serial_quirks[] = {
|
|||
/*
|
||||
* PLX
|
||||
*/
|
||||
{
|
||||
.vendor = PCI_VENDOR_ID_PLX,
|
||||
.device = PCI_DEVICE_ID_PLX_9050,
|
||||
.subvendor = PCI_SUBVENDOR_ID_EXSYS,
|
||||
.subdevice = PCI_SUBDEVICE_ID_EXSYS_4055,
|
||||
.init = pci_plx9050_init,
|
||||
.setup = pci_default_setup,
|
||||
.exit = __devexit_p(pci_plx9050_exit),
|
||||
},
|
||||
{
|
||||
.vendor = PCI_VENDOR_ID_PLX,
|
||||
.device = PCI_DEVICE_ID_PLX_9050,
|
||||
|
@ -927,6 +939,7 @@ enum pci_board_num_t {
|
|||
pbn_panacom,
|
||||
pbn_panacom2,
|
||||
pbn_panacom4,
|
||||
pbn_exsys_4055,
|
||||
pbn_plx_romulus,
|
||||
pbn_oxsemi,
|
||||
pbn_intel_i960,
|
||||
|
@ -1292,6 +1305,13 @@ static struct pciserial_board pci_boards[] __devinitdata = {
|
|||
.reg_shift = 7,
|
||||
},
|
||||
|
||||
[pbn_exsys_4055] = {
|
||||
.flags = FL_BASE2,
|
||||
.num_ports = 4,
|
||||
.base_baud = 115200,
|
||||
.uart_offset = 8,
|
||||
},
|
||||
|
||||
/* I think this entry is broken - the first_offset looks wrong --rmk */
|
||||
[pbn_plx_romulus] = {
|
||||
.flags = FL_BASE2,
|
||||
|
@ -1853,6 +1873,10 @@ static struct pci_device_id serial_pci_tbl[] = {
|
|||
PCI_SUBVENDOR_ID_CHASE_PCIRAS,
|
||||
PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0,
|
||||
pbn_b2_8_460800 },
|
||||
{ PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
|
||||
PCI_SUBVENDOR_ID_EXSYS,
|
||||
PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0,
|
||||
pbn_exsys_4055 },
|
||||
/*
|
||||
* Megawolf Romulus PCI Serial Card, from Mike Hudson
|
||||
* (Exoray@isys.ca)
|
||||
|
|
|
@ -50,6 +50,7 @@ static void hfsplus_read_inode(struct inode *inode)
|
|||
init_MUTEX(&HFSPLUS_I(inode).extents_lock);
|
||||
HFSPLUS_I(inode).flags = 0;
|
||||
HFSPLUS_I(inode).rsrc_inode = NULL;
|
||||
atomic_set(&HFSPLUS_I(inode).opencnt, 0);
|
||||
|
||||
if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID) {
|
||||
read_inode:
|
||||
|
|
|
@ -347,7 +347,6 @@ static inline unsigned long __ffs(unsigned long word)
|
|||
* the clz instruction for much better code efficiency.
|
||||
*/
|
||||
|
||||
static __inline__ int generic_fls(int x);
|
||||
#define fls(x) \
|
||||
( __builtin_constant_p(x) ? generic_fls(x) : \
|
||||
({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) )
|
||||
|
|
|
@ -50,10 +50,10 @@ extern int iommu_setup(char *opt);
|
|||
* address space. The networking and block device layers use
|
||||
* this boolean for bounce buffer decisions
|
||||
*
|
||||
* On x86-64 it mostly equals, but we set it to zero to tell some subsystems
|
||||
* that an hard or soft IOMMU is available.
|
||||
* On AMD64 it mostly equals, but we set it to zero to tell some subsystems
|
||||
* that an IOMMU is available.
|
||||
*/
|
||||
#define PCI_DMA_BUS_IS_PHYS 0
|
||||
#define PCI_DMA_BUS_IS_PHYS (no_iommu ? 1 : 0)
|
||||
|
||||
/*
|
||||
* x86-64 always supports DAC, but sometimes it is useful to force
|
||||
|
|
|
@ -723,6 +723,7 @@
|
|||
#define PCI_DEVICE_ID_HP_DIVA_EVEREST 0x1282
|
||||
#define PCI_DEVICE_ID_HP_DIVA_AUX 0x1290
|
||||
#define PCI_DEVICE_ID_HP_DIVA_RMP3 0x1301
|
||||
#define PCI_DEVICE_ID_HP_DIVA_HURRICANE 0x132a
|
||||
#define PCI_DEVICE_ID_HP_CISS 0x3210
|
||||
#define PCI_DEVICE_ID_HP_CISSA 0x3220
|
||||
#define PCI_DEVICE_ID_HP_CISSB 0x3222
|
||||
|
@ -2696,6 +2697,7 @@
|
|||
|
||||
#define PCI_SUBVENDOR_ID_EXSYS 0xd84d
|
||||
#define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014
|
||||
#define PCI_SUBDEVICE_ID_EXSYS_4055 0x4055
|
||||
|
||||
#define PCI_VENDOR_ID_TIGERJET 0xe159
|
||||
#define PCI_DEVICE_ID_TIGERJET_300 0x0001
|
||||
|
|
|
@ -825,6 +825,14 @@ fastcall NORET_TYPE void do_exit(long code)
|
|||
|
||||
tsk->flags |= PF_EXITING;
|
||||
|
||||
/*
|
||||
* Make sure we don't try to process any timer firings
|
||||
* while we are already exiting.
|
||||
*/
|
||||
tsk->it_virt_expires = cputime_zero;
|
||||
tsk->it_prof_expires = cputime_zero;
|
||||
tsk->it_sched_expires = 0;
|
||||
|
||||
if (unlikely(in_atomic()))
|
||||
printk(KERN_INFO "note: %s[%d] exited with preempt_count %d\n",
|
||||
current->comm, current->pid,
|
||||
|
|
|
@ -91,7 +91,7 @@ static inline union cpu_time_count cpu_time_sub(clockid_t which_clock,
|
|||
* Update expiry time from increment, and increase overrun count,
|
||||
* given the current clock sample.
|
||||
*/
|
||||
static inline void bump_cpu_timer(struct k_itimer *timer,
|
||||
static void bump_cpu_timer(struct k_itimer *timer,
|
||||
union cpu_time_count now)
|
||||
{
|
||||
int i;
|
||||
|
@ -110,7 +110,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer,
|
|||
for (i = 0; incr < delta - incr; i++)
|
||||
incr = incr << 1;
|
||||
for (; i >= 0; incr >>= 1, i--) {
|
||||
if (delta <= incr)
|
||||
if (delta < incr)
|
||||
continue;
|
||||
timer->it.cpu.expires.sched += incr;
|
||||
timer->it_overrun += 1 << i;
|
||||
|
@ -128,7 +128,7 @@ static inline void bump_cpu_timer(struct k_itimer *timer,
|
|||
for (i = 0; cputime_lt(incr, cputime_sub(delta, incr)); i++)
|
||||
incr = cputime_add(incr, incr);
|
||||
for (; i >= 0; incr = cputime_halve(incr), i--) {
|
||||
if (cputime_le(delta, incr))
|
||||
if (cputime_lt(delta, incr))
|
||||
continue;
|
||||
timer->it.cpu.expires.cpu =
|
||||
cputime_add(timer->it.cpu.expires.cpu, incr);
|
||||
|
@ -497,7 +497,7 @@ static void process_timer_rebalance(struct task_struct *p,
|
|||
left = cputime_div(cputime_sub(expires.cpu, val.cpu),
|
||||
nthreads);
|
||||
do {
|
||||
if (!unlikely(t->exit_state)) {
|
||||
if (!unlikely(t->flags & PF_EXITING)) {
|
||||
ticks = cputime_add(prof_ticks(t), left);
|
||||
if (cputime_eq(t->it_prof_expires,
|
||||
cputime_zero) ||
|
||||
|
@ -512,7 +512,7 @@ static void process_timer_rebalance(struct task_struct *p,
|
|||
left = cputime_div(cputime_sub(expires.cpu, val.cpu),
|
||||
nthreads);
|
||||
do {
|
||||
if (!unlikely(t->exit_state)) {
|
||||
if (!unlikely(t->flags & PF_EXITING)) {
|
||||
ticks = cputime_add(virt_ticks(t), left);
|
||||
if (cputime_eq(t->it_virt_expires,
|
||||
cputime_zero) ||
|
||||
|
@ -527,7 +527,7 @@ static void process_timer_rebalance(struct task_struct *p,
|
|||
nsleft = expires.sched - val.sched;
|
||||
do_div(nsleft, nthreads);
|
||||
do {
|
||||
if (!unlikely(t->exit_state)) {
|
||||
if (!unlikely(t->flags & PF_EXITING)) {
|
||||
ns = t->sched_time + nsleft;
|
||||
if (t->it_sched_expires == 0 ||
|
||||
t->it_sched_expires > ns) {
|
||||
|
@ -566,6 +566,9 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now)
|
|||
struct cpu_timer_list *next;
|
||||
unsigned long i;
|
||||
|
||||
if (CPUCLOCK_PERTHREAD(timer->it_clock) && (p->flags & PF_EXITING))
|
||||
return;
|
||||
|
||||
head = (CPUCLOCK_PERTHREAD(timer->it_clock) ?
|
||||
p->cpu_timers : p->signal->cpu_timers);
|
||||
head += CPUCLOCK_WHICH(timer->it_clock);
|
||||
|
@ -576,17 +579,15 @@ static void arm_timer(struct k_itimer *timer, union cpu_time_count now)
|
|||
listpos = head;
|
||||
if (CPUCLOCK_WHICH(timer->it_clock) == CPUCLOCK_SCHED) {
|
||||
list_for_each_entry(next, head, entry) {
|
||||
if (next->expires.sched > nt->expires.sched) {
|
||||
listpos = &next->entry;
|
||||
if (next->expires.sched > nt->expires.sched)
|
||||
break;
|
||||
}
|
||||
listpos = &next->entry;
|
||||
}
|
||||
} else {
|
||||
list_for_each_entry(next, head, entry) {
|
||||
if (cputime_gt(next->expires.cpu, nt->expires.cpu)) {
|
||||
listpos = &next->entry;
|
||||
if (cputime_gt(next->expires.cpu, nt->expires.cpu))
|
||||
break;
|
||||
}
|
||||
listpos = &next->entry;
|
||||
}
|
||||
}
|
||||
list_add(&nt->entry, listpos);
|
||||
|
@ -1206,7 +1207,7 @@ static void check_process_timers(struct task_struct *tsk,
|
|||
|
||||
do {
|
||||
t = next_thread(t);
|
||||
} while (unlikely(t->exit_state));
|
||||
} while (unlikely(t->flags & PF_EXITING));
|
||||
} while (t != tsk);
|
||||
}
|
||||
}
|
||||
|
@ -1295,30 +1296,30 @@ void run_posix_cpu_timers(struct task_struct *tsk)
|
|||
|
||||
#undef UNEXPIRED
|
||||
|
||||
BUG_ON(tsk->exit_state);
|
||||
|
||||
/*
|
||||
* Double-check with locks held.
|
||||
*/
|
||||
read_lock(&tasklist_lock);
|
||||
if (likely(tsk->signal != NULL)) {
|
||||
spin_lock(&tsk->sighand->siglock);
|
||||
spin_lock(&tsk->sighand->siglock);
|
||||
|
||||
/*
|
||||
* Here we take off tsk->cpu_timers[N] and tsk->signal->cpu_timers[N]
|
||||
* all the timers that are firing, and put them on the firing list.
|
||||
*/
|
||||
check_thread_timers(tsk, &firing);
|
||||
check_process_timers(tsk, &firing);
|
||||
/*
|
||||
* Here we take off tsk->cpu_timers[N] and tsk->signal->cpu_timers[N]
|
||||
* all the timers that are firing, and put them on the firing list.
|
||||
*/
|
||||
check_thread_timers(tsk, &firing);
|
||||
check_process_timers(tsk, &firing);
|
||||
|
||||
/*
|
||||
* We must release these locks before taking any timer's lock.
|
||||
* There is a potential race with timer deletion here, as the
|
||||
* siglock now protects our private firing list. We have set
|
||||
* the firing flag in each timer, so that a deletion attempt
|
||||
* that gets the timer lock before we do will give it up and
|
||||
* spin until we've taken care of that timer below.
|
||||
*/
|
||||
spin_unlock(&tsk->sighand->siglock);
|
||||
}
|
||||
/*
|
||||
* We must release these locks before taking any timer's lock.
|
||||
* There is a potential race with timer deletion here, as the
|
||||
* siglock now protects our private firing list. We have set
|
||||
* the firing flag in each timer, so that a deletion attempt
|
||||
* that gets the timer lock before we do will give it up and
|
||||
* spin until we've taken care of that timer below.
|
||||
*/
|
||||
spin_unlock(&tsk->sighand->siglock);
|
||||
read_unlock(&tasklist_lock);
|
||||
|
||||
/*
|
||||
|
|
|
@ -3879,6 +3879,7 @@ EXPORT_SYMBOL(cpu_present_map);
|
|||
|
||||
#ifndef CONFIG_SMP
|
||||
cpumask_t cpu_online_map = CPU_MASK_ALL;
|
||||
EXPORT_SYMBOL_GPL(cpu_online_map);
|
||||
cpumask_t cpu_possible_map = CPU_MASK_ALL;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1750,6 +1750,8 @@ inline void setup_pageset(struct per_cpu_pageset *p, unsigned long batch)
|
|||
{
|
||||
struct per_cpu_pages *pcp;
|
||||
|
||||
memset(p, 0, sizeof(*p));
|
||||
|
||||
pcp = &p->pcp[0]; /* hot */
|
||||
pcp->count = 0;
|
||||
pcp->low = 2 * batch;
|
||||
|
|
|
@ -455,10 +455,15 @@ static inline struct iw_statistics *get_wireless_stats(struct net_device *dev)
|
|||
|
||||
/* Old location, field to be removed in next WE */
|
||||
if(dev->get_wireless_stats) {
|
||||
printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n",
|
||||
dev->name);
|
||||
static int printed_message;
|
||||
|
||||
if (!printed_message++)
|
||||
printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n",
|
||||
dev->name);
|
||||
|
||||
return dev->get_wireless_stats(dev);
|
||||
}
|
||||
|
||||
/* Not found */
|
||||
return (struct iw_statistics *) NULL;
|
||||
}
|
||||
|
|
|
@ -2239,6 +2239,7 @@ static int tcp_ack_update_window(struct sock *sk, struct tcp_sock *tp,
|
|||
/* Note, it is the only place, where
|
||||
* fast path is recovered for sending TCP.
|
||||
*/
|
||||
tp->pred_flags = 0;
|
||||
tcp_fast_path_check(sk, tp);
|
||||
|
||||
if (nwin > tp->max_window) {
|
||||
|
|
|
@ -587,7 +587,7 @@ svc_udp_recvfrom(struct svc_rqst *rqstp)
|
|||
struct timeval tv;
|
||||
|
||||
tv.tv_sec = xtime.tv_sec;
|
||||
tv.tv_usec = xtime.tv_nsec * 1000;
|
||||
tv.tv_usec = xtime.tv_nsec / NSEC_PER_USEC;
|
||||
skb_set_timestamp(skb, &tv);
|
||||
/* Don't enable netstamp, sunrpc doesn't
|
||||
need that much accuracy */
|
||||
|
|
Loading…
Reference in New Issue