Merge branch 'linux-2.6' into for-2.6.24
This commit is contained in:
@@ -210,6 +210,12 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
|
||||
#define I915REG_INT_MASK_R 0x020a8
|
||||
#define I915REG_INT_ENABLE_R 0x020a0
|
||||
|
||||
#define I915REG_PIPEASTAT 0x70024
|
||||
#define I915REG_PIPEBSTAT 0x71024
|
||||
|
||||
#define I915_VBLANK_INTERRUPT_ENABLE (1UL<<17)
|
||||
#define I915_VBLANK_CLEAR (1UL<<1)
|
||||
|
||||
#define SRX_INDEX 0x3c4
|
||||
#define SRX_DATA 0x3c5
|
||||
#define SR01 1
|
||||
|
@@ -214,6 +214,10 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
|
||||
struct drm_device *dev = (struct drm_device *) arg;
|
||||
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
|
||||
u16 temp;
|
||||
u32 pipea_stats, pipeb_stats;
|
||||
|
||||
pipea_stats = I915_READ(I915REG_PIPEASTAT);
|
||||
pipeb_stats = I915_READ(I915REG_PIPEBSTAT);
|
||||
|
||||
temp = I915_READ16(I915REG_INT_IDENTITY_R);
|
||||
|
||||
@@ -225,6 +229,8 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
|
||||
return IRQ_NONE;
|
||||
|
||||
I915_WRITE16(I915REG_INT_IDENTITY_R, temp);
|
||||
(void) I915_READ16(I915REG_INT_IDENTITY_R);
|
||||
DRM_READMEMORYBARRIER();
|
||||
|
||||
dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);
|
||||
|
||||
@@ -252,6 +258,12 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
|
||||
|
||||
if (dev_priv->swaps_pending > 0)
|
||||
drm_locked_tasklet(dev, i915_vblank_tasklet);
|
||||
I915_WRITE(I915REG_PIPEASTAT,
|
||||
pipea_stats|I915_VBLANK_INTERRUPT_ENABLE|
|
||||
I915_VBLANK_CLEAR);
|
||||
I915_WRITE(I915REG_PIPEBSTAT,
|
||||
pipeb_stats|I915_VBLANK_INTERRUPT_ENABLE|
|
||||
I915_VBLANK_CLEAR);
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
|
@@ -62,6 +62,8 @@
|
||||
|
||||
static u32 hpet_nhpet, hpet_max_freq = HPET_USER_FREQ;
|
||||
|
||||
/* This clocksource driver currently only works on ia64 */
|
||||
#ifdef CONFIG_IA64
|
||||
static void __iomem *hpet_mctr;
|
||||
|
||||
static cycle_t read_hpet(void)
|
||||
@@ -79,6 +81,7 @@ static struct clocksource clocksource_hpet = {
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
static struct clocksource *hpet_clocksource;
|
||||
#endif
|
||||
|
||||
/* A lock for concurrent access by app and isr hpet activity. */
|
||||
static DEFINE_SPINLOCK(hpet_lock);
|
||||
@@ -943,14 +946,14 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data)
|
||||
printk(KERN_DEBUG "%s: 0x%lx is busy\n",
|
||||
__FUNCTION__, hdp->hd_phys_address);
|
||||
iounmap(hdp->hd_address);
|
||||
return -EBUSY;
|
||||
return AE_ALREADY_EXISTS;
|
||||
}
|
||||
} else if (res->type == ACPI_RESOURCE_TYPE_FIXED_MEMORY32) {
|
||||
struct acpi_resource_fixed_memory32 *fixmem32;
|
||||
|
||||
fixmem32 = &res->data.fixed_memory32;
|
||||
if (!fixmem32)
|
||||
return -EINVAL;
|
||||
return AE_NO_MEMORY;
|
||||
|
||||
hdp->hd_phys_address = fixmem32->address;
|
||||
hdp->hd_address = ioremap(fixmem32->address,
|
||||
@@ -960,7 +963,7 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data)
|
||||
printk(KERN_DEBUG "%s: 0x%lx is busy\n",
|
||||
__FUNCTION__, hdp->hd_phys_address);
|
||||
iounmap(hdp->hd_address);
|
||||
return -EBUSY;
|
||||
return AE_ALREADY_EXISTS;
|
||||
}
|
||||
} else if (res->type == ACPI_RESOURCE_TYPE_EXTENDED_IRQ) {
|
||||
struct acpi_resource_extended_irq *irqp;
|
||||
|
@@ -155,23 +155,22 @@ mspec_open(struct vm_area_struct *vma)
|
||||
* mspec_close
|
||||
*
|
||||
* Called when unmapping a device mapping. Frees all mspec pages
|
||||
* belonging to the vma.
|
||||
* belonging to all the vma's sharing this vma_data structure.
|
||||
*/
|
||||
static void
|
||||
mspec_close(struct vm_area_struct *vma)
|
||||
{
|
||||
struct vma_data *vdata;
|
||||
int index, last_index, result;
|
||||
int index, last_index;
|
||||
unsigned long my_page;
|
||||
|
||||
vdata = vma->vm_private_data;
|
||||
|
||||
BUG_ON(vma->vm_start < vdata->vm_start || vma->vm_end > vdata->vm_end);
|
||||
if (!atomic_dec_and_test(&vdata->refcnt))
|
||||
return;
|
||||
|
||||
spin_lock(&vdata->lock);
|
||||
index = (vma->vm_start - vdata->vm_start) >> PAGE_SHIFT;
|
||||
last_index = (vma->vm_end - vdata->vm_start) >> PAGE_SHIFT;
|
||||
for (; index < last_index; index++) {
|
||||
last_index = (vdata->vm_end - vdata->vm_start) >> PAGE_SHIFT;
|
||||
for (index = 0; index < last_index; index++) {
|
||||
if (vdata->maddr[index] == 0)
|
||||
continue;
|
||||
/*
|
||||
@@ -180,20 +179,12 @@ mspec_close(struct vm_area_struct *vma)
|
||||
*/
|
||||
my_page = vdata->maddr[index];
|
||||
vdata->maddr[index] = 0;
|
||||
spin_unlock(&vdata->lock);
|
||||
result = mspec_zero_block(my_page, PAGE_SIZE);
|
||||
if (!result)
|
||||
if (!mspec_zero_block(my_page, PAGE_SIZE))
|
||||
uncached_free_page(my_page);
|
||||
else
|
||||
printk(KERN_WARNING "mspec_close(): "
|
||||
"failed to zero page %i\n",
|
||||
result);
|
||||
spin_lock(&vdata->lock);
|
||||
"failed to zero page %ld\n", my_page);
|
||||
}
|
||||
spin_unlock(&vdata->lock);
|
||||
|
||||
if (!atomic_dec_and_test(&vdata->refcnt))
|
||||
return;
|
||||
|
||||
if (vdata->flags & VMD_VMALLOCED)
|
||||
vfree(vdata);
|
||||
@@ -201,7 +192,6 @@ mspec_close(struct vm_area_struct *vma)
|
||||
kfree(vdata);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* mspec_nopfn
|
||||
*
|
||||
|
@@ -1550,11 +1550,13 @@ __u32 secure_tcp_sequence_number(__be32 saddr, __be32 daddr,
|
||||
* As close as possible to RFC 793, which
|
||||
* suggests using a 250 kHz clock.
|
||||
* Further reading shows this assumes 2 Mb/s networks.
|
||||
* For 10 Gb/s Ethernet, a 1 GHz clock is appropriate.
|
||||
* That's funny, Linux has one built in! Use it!
|
||||
* (Networks are faster now - should this be increased?)
|
||||
* For 10 Mb/s Ethernet, a 1 MHz clock is appropriate.
|
||||
* For 10 Gb/s Ethernet, a 1 GHz clock should be ok, but
|
||||
* we also need to limit the resolution so that the u32 seq
|
||||
* overlaps less than one time per MSL (2 minutes).
|
||||
* Choosing a clock of 64 ns period is OK. (period of 274 s)
|
||||
*/
|
||||
seq += ktime_get_real().tv64;
|
||||
seq += ktime_get_real().tv64 >> 6;
|
||||
#if 0
|
||||
printk("init_seq(%lx, %lx, %d, %d) = %d\n",
|
||||
saddr, daddr, sport, dport, seq);
|
||||
|
@@ -770,6 +770,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
|
||||
/*
|
||||
* Switching-from response
|
||||
*/
|
||||
acquire_console_sem();
|
||||
if (vc->vt_newvt >= 0) {
|
||||
if (arg == 0)
|
||||
/*
|
||||
@@ -784,7 +785,6 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
|
||||
* complete the switch.
|
||||
*/
|
||||
int newvt;
|
||||
acquire_console_sem();
|
||||
newvt = vc->vt_newvt;
|
||||
vc->vt_newvt = -1;
|
||||
i = vc_allocate(newvt);
|
||||
@@ -798,7 +798,6 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
|
||||
* other console switches..
|
||||
*/
|
||||
complete_change_console(vc_cons[newvt].d);
|
||||
release_console_sem();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -810,9 +809,12 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
|
||||
/*
|
||||
* If it's just an ACK, ignore it
|
||||
*/
|
||||
if (arg != VT_ACKACQ)
|
||||
if (arg != VT_ACKACQ) {
|
||||
release_console_sem();
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
release_console_sem();
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -1208,15 +1210,18 @@ void change_console(struct vc_data *new_vc)
|
||||
/*
|
||||
* Send the signal as privileged - kill_pid() will
|
||||
* tell us if the process has gone or something else
|
||||
* is awry
|
||||
* is awry.
|
||||
*
|
||||
* We need to set vt_newvt *before* sending the signal or we
|
||||
* have a race.
|
||||
*/
|
||||
vc->vt_newvt = new_vc->vc_num;
|
||||
if (kill_pid(vc->vt_pid, vc->vt_mode.relsig, 1) == 0) {
|
||||
/*
|
||||
* It worked. Mark the vt to switch to and
|
||||
* return. The process needs to send us a
|
||||
* VT_RELDISP ioctl to complete the switch.
|
||||
*/
|
||||
vc->vt_newvt = new_vc->vc_num;
|
||||
return;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user