diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/block/loop.c | 18 | ||||
-rw-r--r-- | drivers/staging/octeon/ethernet-tx.c | 3 | ||||
-rw-r--r-- | drivers/usb/host/pci-quirks.c | 14 | ||||
-rw-r--r-- | drivers/usb/host/uhci-q.c | 4 | ||||
-rw-r--r-- | drivers/video/fbdev/uvesafb.c | 28 |
5 files changed, 60 insertions, 7 deletions
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 974ee41f8c7d..a18d124942fe 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -741,6 +741,24 @@ out_err: return error; } +/* + * for AUFS + * no get/put for file. + */ +struct file *loop_backing_file(struct super_block *sb) +{ + struct file *ret; + struct loop_device *l; + + ret = NULL; + if (MAJOR(sb->s_dev) == LOOP_MAJOR) { + l = sb->s_bdev->bd_disk->private_data; + ret = l->lo_backing_file; + } + return ret; +} +EXPORT_SYMBOL_GPL(loop_backing_file); + /* loop sysfs attributes */ static ssize_t loop_attr_show(struct device *dev, char *page, diff --git a/drivers/staging/octeon/ethernet-tx.c b/drivers/staging/octeon/ethernet-tx.c index df3441b815bb..386fbc4f7eb9 100644 --- a/drivers/staging/octeon/ethernet-tx.c +++ b/drivers/staging/octeon/ethernet-tx.c @@ -261,6 +261,9 @@ int cvm_oct_xmit(struct sk_buff *skb, struct net_device *dev) pko_command.s.n2 = 1; /* Don't pollute L2 with the outgoing packet */ pko_command.s.segs = 1; pko_command.s.total_bytes = skb->len; +#if GCC_VERSION >= 80000 + barrier(); +#endif pko_command.s.size0 = CVMX_FAU_OP_SIZE_32; pko_command.s.subone0 = 1; diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c index 3625a5c1a41b..7da781af9bc6 100644 --- a/drivers/usb/host/pci-quirks.c +++ b/drivers/usb/host/pci-quirks.c @@ -627,6 +627,9 @@ EXPORT_SYMBOL_GPL(usb_amd_pt_check_port); */ void uhci_reset_hc(struct pci_dev *pdev, unsigned long base) { +#ifdef CONFIG_MIPS_MALTA + int timeout = 10; +#endif /* Turn off PIRQ enable and SMI enable. (This also turns off the * BIOS's USB Legacy Support.) Turn off all the R/WC bits too. */ @@ -640,9 +643,16 @@ void uhci_reset_hc(struct pci_dev *pdev, unsigned long base) outw(UHCI_USBCMD_HCRESET, base + UHCI_USBCMD); mb(); udelay(5); - if (inw(base + UHCI_USBCMD) & UHCI_USBCMD_HCRESET) - dev_warn(&pdev->dev, "HCRESET not completed yet!\n"); +#ifdef CONFIG_MIPS_MALTA + while (inw(base + UHCI_USBCMD) & UHCI_USBCMD_HCRESET) { + if (--timeout < 0) { + dev_warn(&pdev->dev, "HCRESET timed out!\n"); + break; + } + udelay(5); + } +#endif /* Just to be safe, disable interrupt requests and * make sure the controller is stopped. */ diff --git a/drivers/usb/host/uhci-q.c b/drivers/usb/host/uhci-q.c index 35fcb826152c..1cd2808eb455 100644 --- a/drivers/usb/host/uhci-q.c +++ b/drivers/usb/host/uhci-q.c @@ -72,7 +72,9 @@ static void uhci_fsbr_off(struct uhci_hcd *uhci) static void uhci_add_fsbr(struct uhci_hcd *uhci, struct urb *urb) { struct urb_priv *urbp = urb->hcpriv; - +#ifdef CONFIG_MIPS_MALTA + return; +#endif urbp->fsbr = 1; } diff --git a/drivers/video/fbdev/uvesafb.c b/drivers/video/fbdev/uvesafb.c index 440a6636d8f0..2dee073b21ad 100644 --- a/drivers/video/fbdev/uvesafb.c +++ b/drivers/video/fbdev/uvesafb.c @@ -43,6 +43,7 @@ static const struct fb_fix_screeninfo uvesafb_fix = { .visual = FB_VISUAL_TRUECOLOR, }; +static int task_timeout = UVESAFB_TIMEOUT; /* timeout [ms] of task execution */ static int mtrr = 3; /* enable mtrr by default */ static bool blank = 1; /* enable blanking by default */ static int ypan = 1; /* 0: scroll, 1: ypan, 2: ywrap */ @@ -146,7 +147,9 @@ static int uvesafb_exec(struct uvesafb_ktask *task) struct cn_msg *m; int err; int len = sizeof(task->t) + task->t.buf_len; - + int forever_wait = task_timeout < 0 ? 1 : 0; + /* For infinite wait case, set interval to the legacy 5000 ms */ + int timeout = forever_wait ? 5000 : task_timeout; /* * Check whether the message isn't longer than the maximum * allowed by connector. @@ -212,9 +215,21 @@ static int uvesafb_exec(struct uvesafb_ktask *task) } else if (err == -ENOBUFS) err = 0; - if (!err && !(task->t.flags & TF_EXIT)) - err = !wait_for_completion_timeout(task->done, - msecs_to_jiffies(UVESAFB_TIMEOUT)); + if (!err && !(task->t.flags & TF_EXIT)) { + do { + err = !wait_for_completion_timeout(task->done, + msecs_to_jiffies(timeout)); + if (err) + printk_ratelimited( + KERN_WARNING + "uvesafb: %u ms task timeout%s\n", + timeout, + forever_wait ? + ", infinitely waiting." : "."); + else + break; + } while (forever_wait); + } mutex_lock(&uvfb_lock); uvfb_tasks[seq] = NULL; @@ -1816,6 +1831,8 @@ static int uvesafb_setup(char *options) while ((this_opt = strsep(&options, ",")) != NULL) { if (!*this_opt) continue; + if (!strncmp(this_opt, "task_timeout", 12)) + task_timeout = simple_strtol(this_opt+12, NULL, 0); if (!strcmp(this_opt, "redraw")) ypan = 0; else if (!strcmp(this_opt, "ypan")) @@ -1959,6 +1976,9 @@ static const struct kernel_param_ops param_ops_scroll = { }; #define param_check_scroll(name, p) __param_check(name, p, void) +module_param(task_timeout, int, 0400); +MODULE_PARM_DESC(task_timeout, + "Timeout [ms] of a task's completion, or set to any negative value to infinitely wait"); module_param_named(scroll, ypan, scroll, 0); MODULE_PARM_DESC(scroll, "Scrolling mode, set to 'redraw', 'ypan', or 'ywrap'"); |