diff options
Diffstat (limited to 'drivers')
28 files changed, 117 insertions, 65 deletions
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c index e60390597372..6745fe137b9e 100644 --- a/drivers/acpi/acpi_lpss.c +++ b/drivers/acpi/acpi_lpss.c | |||
| @@ -162,7 +162,6 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = { | |||
| 162 | { "80860F14", (unsigned long)&byt_sdio_dev_desc }, | 162 | { "80860F14", (unsigned long)&byt_sdio_dev_desc }, |
| 163 | { "80860F41", (unsigned long)&byt_i2c_dev_desc }, | 163 | { "80860F41", (unsigned long)&byt_i2c_dev_desc }, |
| 164 | { "INT33B2", }, | 164 | { "INT33B2", }, |
| 165 | { "INT33FC", }, | ||
| 166 | 165 | ||
| 167 | { "INT3430", (unsigned long)&lpt_dev_desc }, | 166 | { "INT3430", (unsigned long)&lpt_dev_desc }, |
| 168 | { "INT3431", (unsigned long)&lpt_dev_desc }, | 167 | { "INT3431", (unsigned long)&lpt_dev_desc }, |
diff --git a/drivers/clocksource/cadence_ttc_timer.c b/drivers/clocksource/cadence_ttc_timer.c index b2bb3a4bc205..a92350b55d32 100644 --- a/drivers/clocksource/cadence_ttc_timer.c +++ b/drivers/clocksource/cadence_ttc_timer.c | |||
| @@ -67,11 +67,13 @@ | |||
| 67 | * struct ttc_timer - This definition defines local timer structure | 67 | * struct ttc_timer - This definition defines local timer structure |
| 68 | * | 68 | * |
| 69 | * @base_addr: Base address of timer | 69 | * @base_addr: Base address of timer |
| 70 | * @freq: Timer input clock frequency | ||
| 70 | * @clk: Associated clock source | 71 | * @clk: Associated clock source |
| 71 | * @clk_rate_change_nb Notifier block for clock rate changes | 72 | * @clk_rate_change_nb Notifier block for clock rate changes |
| 72 | */ | 73 | */ |
| 73 | struct ttc_timer { | 74 | struct ttc_timer { |
| 74 | void __iomem *base_addr; | 75 | void __iomem *base_addr; |
| 76 | unsigned long freq; | ||
| 75 | struct clk *clk; | 77 | struct clk *clk; |
| 76 | struct notifier_block clk_rate_change_nb; | 78 | struct notifier_block clk_rate_change_nb; |
| 77 | }; | 79 | }; |
| @@ -196,9 +198,8 @@ static void ttc_set_mode(enum clock_event_mode mode, | |||
| 196 | 198 | ||
| 197 | switch (mode) { | 199 | switch (mode) { |
| 198 | case CLOCK_EVT_MODE_PERIODIC: | 200 | case CLOCK_EVT_MODE_PERIODIC: |
| 199 | ttc_set_interval(timer, | 201 | ttc_set_interval(timer, DIV_ROUND_CLOSEST(ttce->ttc.freq, |
| 200 | DIV_ROUND_CLOSEST(clk_get_rate(ttce->ttc.clk), | 202 | PRESCALE * HZ)); |
| 201 | PRESCALE * HZ)); | ||
| 202 | break; | 203 | break; |
| 203 | case CLOCK_EVT_MODE_ONESHOT: | 204 | case CLOCK_EVT_MODE_ONESHOT: |
| 204 | case CLOCK_EVT_MODE_UNUSED: | 205 | case CLOCK_EVT_MODE_UNUSED: |
| @@ -273,6 +274,8 @@ static void __init ttc_setup_clocksource(struct clk *clk, void __iomem *base) | |||
| 273 | return; | 274 | return; |
| 274 | } | 275 | } |
| 275 | 276 | ||
| 277 | ttccs->ttc.freq = clk_get_rate(ttccs->ttc.clk); | ||
| 278 | |||
| 276 | ttccs->ttc.clk_rate_change_nb.notifier_call = | 279 | ttccs->ttc.clk_rate_change_nb.notifier_call = |
| 277 | ttc_rate_change_clocksource_cb; | 280 | ttc_rate_change_clocksource_cb; |
| 278 | ttccs->ttc.clk_rate_change_nb.next = NULL; | 281 | ttccs->ttc.clk_rate_change_nb.next = NULL; |
| @@ -298,16 +301,14 @@ static void __init ttc_setup_clocksource(struct clk *clk, void __iomem *base) | |||
| 298 | __raw_writel(CNT_CNTRL_RESET, | 301 | __raw_writel(CNT_CNTRL_RESET, |
| 299 | ttccs->ttc.base_addr + TTC_CNT_CNTRL_OFFSET); | 302 | ttccs->ttc.base_addr + TTC_CNT_CNTRL_OFFSET); |
| 300 | 303 | ||
| 301 | err = clocksource_register_hz(&ttccs->cs, | 304 | err = clocksource_register_hz(&ttccs->cs, ttccs->ttc.freq / PRESCALE); |
| 302 | clk_get_rate(ttccs->ttc.clk) / PRESCALE); | ||
| 303 | if (WARN_ON(err)) { | 305 | if (WARN_ON(err)) { |
| 304 | kfree(ttccs); | 306 | kfree(ttccs); |
| 305 | return; | 307 | return; |
| 306 | } | 308 | } |
| 307 | 309 | ||
| 308 | ttc_sched_clock_val_reg = base + TTC_COUNT_VAL_OFFSET; | 310 | ttc_sched_clock_val_reg = base + TTC_COUNT_VAL_OFFSET; |
| 309 | setup_sched_clock(ttc_sched_clock_read, 16, | 311 | setup_sched_clock(ttc_sched_clock_read, 16, ttccs->ttc.freq / PRESCALE); |
| 310 | clk_get_rate(ttccs->ttc.clk) / PRESCALE); | ||
| 311 | } | 312 | } |
| 312 | 313 | ||
| 313 | static int ttc_rate_change_clockevent_cb(struct notifier_block *nb, | 314 | static int ttc_rate_change_clockevent_cb(struct notifier_block *nb, |
| @@ -334,6 +335,9 @@ static int ttc_rate_change_clockevent_cb(struct notifier_block *nb, | |||
| 334 | ndata->new_rate / PRESCALE); | 335 | ndata->new_rate / PRESCALE); |
| 335 | local_irq_restore(flags); | 336 | local_irq_restore(flags); |
| 336 | 337 | ||
| 338 | /* update cached frequency */ | ||
| 339 | ttc->freq = ndata->new_rate; | ||
| 340 | |||
| 337 | /* fall through */ | 341 | /* fall through */ |
| 338 | } | 342 | } |
| 339 | case PRE_RATE_CHANGE: | 343 | case PRE_RATE_CHANGE: |
| @@ -367,6 +371,7 @@ static void __init ttc_setup_clockevent(struct clk *clk, | |||
| 367 | if (clk_notifier_register(ttcce->ttc.clk, | 371 | if (clk_notifier_register(ttcce->ttc.clk, |
| 368 | &ttcce->ttc.clk_rate_change_nb)) | 372 | &ttcce->ttc.clk_rate_change_nb)) |
| 369 | pr_warn("Unable to register clock notifier.\n"); | 373 | pr_warn("Unable to register clock notifier.\n"); |
| 374 | ttcce->ttc.freq = clk_get_rate(ttcce->ttc.clk); | ||
| 370 | 375 | ||
| 371 | ttcce->ttc.base_addr = base; | 376 | ttcce->ttc.base_addr = base; |
| 372 | ttcce->ce.name = "ttc_clockevent"; | 377 | ttcce->ce.name = "ttc_clockevent"; |
| @@ -396,7 +401,7 @@ static void __init ttc_setup_clockevent(struct clk *clk, | |||
| 396 | } | 401 | } |
| 397 | 402 | ||
| 398 | clockevents_config_and_register(&ttcce->ce, | 403 | clockevents_config_and_register(&ttcce->ce, |
| 399 | clk_get_rate(ttcce->ttc.clk) / PRESCALE, 1, 0xfffe); | 404 | ttcce->ttc.freq / PRESCALE, 1, 0xfffe); |
| 400 | } | 405 | } |
| 401 | 406 | ||
| 402 | /** | 407 | /** |
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index 85071a1c4547..b0733153dfd2 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c | |||
| @@ -1041,7 +1041,7 @@ void drm_mode_connector_list_update(struct drm_connector *connector) | |||
| 1041 | /* if equal delete the probed mode */ | 1041 | /* if equal delete the probed mode */ |
| 1042 | mode->status = pmode->status; | 1042 | mode->status = pmode->status; |
| 1043 | /* Merge type bits together */ | 1043 | /* Merge type bits together */ |
| 1044 | mode->type = pmode->type; | 1044 | mode->type |= pmode->type; |
| 1045 | list_del(&pmode->head); | 1045 | list_del(&pmode->head); |
| 1046 | drm_mode_destroy(connector->dev, pmode); | 1046 | drm_mode_destroy(connector->dev, pmode); |
| 1047 | break; | 1047 | break; |
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 5d1dedc02f15..f13d5edc39d5 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
| @@ -2713,6 +2713,8 @@ static void gen8_irq_preinstall(struct drm_device *dev) | |||
| 2713 | #undef GEN8_IRQ_INIT_NDX | 2713 | #undef GEN8_IRQ_INIT_NDX |
| 2714 | 2714 | ||
| 2715 | POSTING_READ(GEN8_PCU_IIR); | 2715 | POSTING_READ(GEN8_PCU_IIR); |
| 2716 | |||
| 2717 | ibx_irq_preinstall(dev); | ||
| 2716 | } | 2718 | } |
| 2717 | 2719 | ||
| 2718 | static void ibx_hpd_irq_setup(struct drm_device *dev) | 2720 | static void ibx_hpd_irq_setup(struct drm_device *dev) |
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c index 526c8ded16b0..b69dc3e66c16 100644 --- a/drivers/gpu/drm/i915/intel_ddi.c +++ b/drivers/gpu/drm/i915/intel_ddi.c | |||
| @@ -1057,12 +1057,18 @@ void intel_ddi_setup_hw_pll_state(struct drm_device *dev) | |||
| 1057 | enum pipe pipe; | 1057 | enum pipe pipe; |
| 1058 | struct intel_crtc *intel_crtc; | 1058 | struct intel_crtc *intel_crtc; |
| 1059 | 1059 | ||
| 1060 | dev_priv->ddi_plls.spll_refcount = 0; | ||
| 1061 | dev_priv->ddi_plls.wrpll1_refcount = 0; | ||
| 1062 | dev_priv->ddi_plls.wrpll2_refcount = 0; | ||
| 1063 | |||
| 1060 | for_each_pipe(pipe) { | 1064 | for_each_pipe(pipe) { |
| 1061 | intel_crtc = | 1065 | intel_crtc = |
| 1062 | to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); | 1066 | to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); |
| 1063 | 1067 | ||
| 1064 | if (!intel_crtc->active) | 1068 | if (!intel_crtc->active) { |
| 1069 | intel_crtc->ddi_pll_sel = PORT_CLK_SEL_NONE; | ||
| 1065 | continue; | 1070 | continue; |
| 1071 | } | ||
| 1066 | 1072 | ||
| 1067 | intel_crtc->ddi_pll_sel = intel_ddi_get_crtc_pll(dev_priv, | 1073 | intel_crtc->ddi_pll_sel = intel_ddi_get_crtc_pll(dev_priv, |
| 1068 | pipe); | 1074 | pipe); |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 769b864465a9..2bde35d34eb9 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -11053,10 +11053,10 @@ void intel_modeset_gem_init(struct drm_device *dev) | |||
| 11053 | 11053 | ||
| 11054 | intel_setup_overlay(dev); | 11054 | intel_setup_overlay(dev); |
| 11055 | 11055 | ||
| 11056 | drm_modeset_lock_all(dev); | 11056 | mutex_lock(&dev->mode_config.mutex); |
| 11057 | drm_mode_config_reset(dev); | 11057 | drm_mode_config_reset(dev); |
| 11058 | intel_modeset_setup_hw_state(dev, false); | 11058 | intel_modeset_setup_hw_state(dev, false); |
| 11059 | drm_modeset_unlock_all(dev); | 11059 | mutex_unlock(&dev->mode_config.mutex); |
| 11060 | } | 11060 | } |
| 11061 | 11061 | ||
| 11062 | void intel_modeset_cleanup(struct drm_device *dev) | 11062 | void intel_modeset_cleanup(struct drm_device *dev) |
diff --git a/drivers/gpu/drm/nouveau/core/include/subdev/i2c.h b/drivers/gpu/drm/nouveau/core/include/subdev/i2c.h index 9fa5da723871..7f50a858b16f 100644 --- a/drivers/gpu/drm/nouveau/core/include/subdev/i2c.h +++ b/drivers/gpu/drm/nouveau/core/include/subdev/i2c.h | |||
| @@ -73,7 +73,7 @@ struct nouveau_i2c { | |||
| 73 | int (*identify)(struct nouveau_i2c *, int index, | 73 | int (*identify)(struct nouveau_i2c *, int index, |
| 74 | const char *what, struct nouveau_i2c_board_info *, | 74 | const char *what, struct nouveau_i2c_board_info *, |
| 75 | bool (*match)(struct nouveau_i2c_port *, | 75 | bool (*match)(struct nouveau_i2c_port *, |
| 76 | struct i2c_board_info *)); | 76 | struct i2c_board_info *, void *), void *); |
| 77 | struct list_head ports; | 77 | struct list_head ports; |
| 78 | }; | 78 | }; |
| 79 | 79 | ||
diff --git a/drivers/gpu/drm/nouveau/core/include/subdev/instmem.h b/drivers/gpu/drm/nouveau/core/include/subdev/instmem.h index ec7a54e91a08..4aca33887aaa 100644 --- a/drivers/gpu/drm/nouveau/core/include/subdev/instmem.h +++ b/drivers/gpu/drm/nouveau/core/include/subdev/instmem.h | |||
| @@ -50,6 +50,13 @@ struct nouveau_instmem { | |||
| 50 | static inline struct nouveau_instmem * | 50 | static inline struct nouveau_instmem * |
| 51 | nouveau_instmem(void *obj) | 51 | nouveau_instmem(void *obj) |
| 52 | { | 52 | { |
| 53 | /* nv04/nv40 impls need to create objects in their constructor, | ||
| 54 | * which is before the subdev pointer is valid | ||
| 55 | */ | ||
| 56 | if (nv_iclass(obj, NV_SUBDEV_CLASS) && | ||
| 57 | nv_subidx(obj) == NVDEV_SUBDEV_INSTMEM) | ||
| 58 | return obj; | ||
| 59 | |||
| 53 | return (void *)nv_device(obj)->subdev[NVDEV_SUBDEV_INSTMEM]; | 60 | return (void *)nv_device(obj)->subdev[NVDEV_SUBDEV_INSTMEM]; |
| 54 | } | 61 | } |
| 55 | 62 | ||
diff --git a/drivers/gpu/drm/nouveau/core/subdev/i2c/base.c b/drivers/gpu/drm/nouveau/core/subdev/i2c/base.c index 041fd5edaebf..c33c03d2f4af 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/i2c/base.c +++ b/drivers/gpu/drm/nouveau/core/subdev/i2c/base.c | |||
| @@ -197,7 +197,7 @@ static int | |||
| 197 | nouveau_i2c_identify(struct nouveau_i2c *i2c, int index, const char *what, | 197 | nouveau_i2c_identify(struct nouveau_i2c *i2c, int index, const char *what, |
| 198 | struct nouveau_i2c_board_info *info, | 198 | struct nouveau_i2c_board_info *info, |
| 199 | bool (*match)(struct nouveau_i2c_port *, | 199 | bool (*match)(struct nouveau_i2c_port *, |
| 200 | struct i2c_board_info *)) | 200 | struct i2c_board_info *, void *), void *data) |
| 201 | { | 201 | { |
| 202 | struct nouveau_i2c_port *port = nouveau_i2c_find(i2c, index); | 202 | struct nouveau_i2c_port *port = nouveau_i2c_find(i2c, index); |
| 203 | int i; | 203 | int i; |
| @@ -221,7 +221,7 @@ nouveau_i2c_identify(struct nouveau_i2c *i2c, int index, const char *what, | |||
| 221 | } | 221 | } |
| 222 | 222 | ||
| 223 | if (nv_probe_i2c(port, info[i].dev.addr) && | 223 | if (nv_probe_i2c(port, info[i].dev.addr) && |
| 224 | (!match || match(port, &info[i].dev))) { | 224 | (!match || match(port, &info[i].dev, data))) { |
| 225 | nv_info(i2c, "detected %s: %s\n", what, | 225 | nv_info(i2c, "detected %s: %s\n", what, |
| 226 | info[i].dev.type); | 226 | info[i].dev.type); |
| 227 | return i; | 227 | return i; |
diff --git a/drivers/gpu/drm/nouveau/core/subdev/mxm/nv50.c b/drivers/gpu/drm/nouveau/core/subdev/mxm/nv50.c index af129c2e8113..64f8b4702bf7 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/mxm/nv50.c +++ b/drivers/gpu/drm/nouveau/core/subdev/mxm/nv50.c | |||
| @@ -100,7 +100,7 @@ mxm_match_dcb(struct nouveau_mxm *mxm, u8 *data, void *info) | |||
| 100 | static int | 100 | static int |
| 101 | mxm_dcb_sanitise_entry(struct nouveau_bios *bios, void *data, int idx, u16 pdcb) | 101 | mxm_dcb_sanitise_entry(struct nouveau_bios *bios, void *data, int idx, u16 pdcb) |
| 102 | { | 102 | { |
| 103 | struct nouveau_mxm *mxm = nouveau_mxm(bios); | 103 | struct nouveau_mxm *mxm = data; |
| 104 | struct context ctx = { .outp = (u32 *)(bios->data + pdcb) }; | 104 | struct context ctx = { .outp = (u32 *)(bios->data + pdcb) }; |
| 105 | u8 type, i2cidx, link, ver, len; | 105 | u8 type, i2cidx, link, ver, len; |
| 106 | u8 *conn; | 106 | u8 *conn; |
| @@ -199,7 +199,7 @@ mxm_dcb_sanitise(struct nouveau_mxm *mxm) | |||
| 199 | return; | 199 | return; |
| 200 | } | 200 | } |
| 201 | 201 | ||
| 202 | dcb_outp_foreach(bios, NULL, mxm_dcb_sanitise_entry); | 202 | dcb_outp_foreach(bios, mxm, mxm_dcb_sanitise_entry); |
| 203 | mxms_foreach(mxm, 0x01, mxm_show_unmatched, NULL); | 203 | mxms_foreach(mxm, 0x01, mxm_show_unmatched, NULL); |
| 204 | } | 204 | } |
| 205 | 205 | ||
diff --git a/drivers/gpu/drm/nouveau/core/subdev/therm/ic.c b/drivers/gpu/drm/nouveau/core/subdev/therm/ic.c index e44ed7b93c6d..7610fc5f8fa2 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/therm/ic.c +++ b/drivers/gpu/drm/nouveau/core/subdev/therm/ic.c | |||
| @@ -29,9 +29,9 @@ | |||
| 29 | 29 | ||
| 30 | static bool | 30 | static bool |
| 31 | probe_monitoring_device(struct nouveau_i2c_port *i2c, | 31 | probe_monitoring_device(struct nouveau_i2c_port *i2c, |
| 32 | struct i2c_board_info *info) | 32 | struct i2c_board_info *info, void *data) |
| 33 | { | 33 | { |
| 34 | struct nouveau_therm_priv *priv = (void *)nouveau_therm(i2c); | 34 | struct nouveau_therm_priv *priv = data; |
| 35 | struct nvbios_therm_sensor *sensor = &priv->bios_sensor; | 35 | struct nvbios_therm_sensor *sensor = &priv->bios_sensor; |
| 36 | struct i2c_client *client; | 36 | struct i2c_client *client; |
| 37 | 37 | ||
| @@ -96,7 +96,7 @@ nouveau_therm_ic_ctor(struct nouveau_therm *therm) | |||
| 96 | }; | 96 | }; |
| 97 | 97 | ||
| 98 | i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device", | 98 | i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device", |
| 99 | board, probe_monitoring_device); | 99 | board, probe_monitoring_device, therm); |
| 100 | if (priv->ic) | 100 | if (priv->ic) |
| 101 | return; | 101 | return; |
| 102 | } | 102 | } |
| @@ -108,7 +108,7 @@ nouveau_therm_ic_ctor(struct nouveau_therm *therm) | |||
| 108 | }; | 108 | }; |
| 109 | 109 | ||
| 110 | i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device", | 110 | i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device", |
| 111 | board, probe_monitoring_device); | 111 | board, probe_monitoring_device, therm); |
| 112 | if (priv->ic) | 112 | if (priv->ic) |
| 113 | return; | 113 | return; |
| 114 | } | 114 | } |
| @@ -117,5 +117,5 @@ nouveau_therm_ic_ctor(struct nouveau_therm *therm) | |||
| 117 | device. Let's try our static list. | 117 | device. Let's try our static list. |
| 118 | */ | 118 | */ |
| 119 | i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device", | 119 | i2c->identify(i2c, NV_I2C_DEFAULT(0), "monitoring device", |
| 120 | nv_board_infos, probe_monitoring_device); | 120 | nv_board_infos, probe_monitoring_device, therm); |
| 121 | } | 121 | } |
diff --git a/drivers/gpu/drm/nouveau/dispnv04/dfp.c b/drivers/gpu/drm/nouveau/dispnv04/dfp.c index 936a71c59080..7fdc51e2a571 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/dfp.c +++ b/drivers/gpu/drm/nouveau/dispnv04/dfp.c | |||
| @@ -643,7 +643,7 @@ static void nv04_tmds_slave_init(struct drm_encoder *encoder) | |||
| 643 | get_tmds_slave(encoder)) | 643 | get_tmds_slave(encoder)) |
| 644 | return; | 644 | return; |
| 645 | 645 | ||
| 646 | type = i2c->identify(i2c, 2, "TMDS transmitter", info, NULL); | 646 | type = i2c->identify(i2c, 2, "TMDS transmitter", info, NULL, NULL); |
| 647 | if (type < 0) | 647 | if (type < 0) |
| 648 | return; | 648 | return; |
| 649 | 649 | ||
diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c b/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c index cc4b208ce546..244822df8ffc 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c +++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv04.c | |||
| @@ -59,7 +59,7 @@ int nv04_tv_identify(struct drm_device *dev, int i2c_index) | |||
| 59 | struct nouveau_i2c *i2c = nouveau_i2c(drm->device); | 59 | struct nouveau_i2c *i2c = nouveau_i2c(drm->device); |
| 60 | 60 | ||
| 61 | return i2c->identify(i2c, i2c_index, "TV encoder", | 61 | return i2c->identify(i2c, i2c_index, "TV encoder", |
| 62 | nv04_tv_encoder_info, NULL); | 62 | nv04_tv_encoder_info, NULL, NULL); |
| 63 | } | 63 | } |
| 64 | 64 | ||
| 65 | 65 | ||
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c index 78be66176840..942509892895 100644 --- a/drivers/hwmon/coretemp.c +++ b/drivers/hwmon/coretemp.c | |||
| @@ -52,7 +52,7 @@ MODULE_PARM_DESC(tjmax, "TjMax value in degrees Celsius"); | |||
| 52 | 52 | ||
| 53 | #define BASE_SYSFS_ATTR_NO 2 /* Sysfs Base attr no for coretemp */ | 53 | #define BASE_SYSFS_ATTR_NO 2 /* Sysfs Base attr no for coretemp */ |
| 54 | #define NUM_REAL_CORES 32 /* Number of Real cores per cpu */ | 54 | #define NUM_REAL_CORES 32 /* Number of Real cores per cpu */ |
| 55 | #define CORETEMP_NAME_LENGTH 17 /* String Length of attrs */ | 55 | #define CORETEMP_NAME_LENGTH 19 /* String Length of attrs */ |
| 56 | #define MAX_CORE_ATTRS 4 /* Maximum no of basic attrs */ | 56 | #define MAX_CORE_ATTRS 4 /* Maximum no of basic attrs */ |
| 57 | #define TOTAL_ATTRS (MAX_CORE_ATTRS + 1) | 57 | #define TOTAL_ATTRS (MAX_CORE_ATTRS + 1) |
| 58 | #define MAX_CORE_DATA (NUM_REAL_CORES + BASE_SYSFS_ATTR_NO) | 58 | #define MAX_CORE_DATA (NUM_REAL_CORES + BASE_SYSFS_ATTR_NO) |
diff --git a/drivers/md/md.c b/drivers/md/md.c index 21f4d7ff0da2..369d919bdafe 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -1077,6 +1077,7 @@ static int super_90_validate(struct mddev *mddev, struct md_rdev *rdev) | |||
| 1077 | rdev->raid_disk = -1; | 1077 | rdev->raid_disk = -1; |
| 1078 | clear_bit(Faulty, &rdev->flags); | 1078 | clear_bit(Faulty, &rdev->flags); |
| 1079 | clear_bit(In_sync, &rdev->flags); | 1079 | clear_bit(In_sync, &rdev->flags); |
| 1080 | clear_bit(Bitmap_sync, &rdev->flags); | ||
| 1080 | clear_bit(WriteMostly, &rdev->flags); | 1081 | clear_bit(WriteMostly, &rdev->flags); |
| 1081 | 1082 | ||
| 1082 | if (mddev->raid_disks == 0) { | 1083 | if (mddev->raid_disks == 0) { |
| @@ -1155,6 +1156,8 @@ static int super_90_validate(struct mddev *mddev, struct md_rdev *rdev) | |||
| 1155 | */ | 1156 | */ |
| 1156 | if (ev1 < mddev->bitmap->events_cleared) | 1157 | if (ev1 < mddev->bitmap->events_cleared) |
| 1157 | return 0; | 1158 | return 0; |
| 1159 | if (ev1 < mddev->events) | ||
| 1160 | set_bit(Bitmap_sync, &rdev->flags); | ||
| 1158 | } else { | 1161 | } else { |
| 1159 | if (ev1 < mddev->events) | 1162 | if (ev1 < mddev->events) |
| 1160 | /* just a hot-add of a new device, leave raid_disk at -1 */ | 1163 | /* just a hot-add of a new device, leave raid_disk at -1 */ |
| @@ -1563,6 +1566,7 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev) | |||
| 1563 | rdev->raid_disk = -1; | 1566 | rdev->raid_disk = -1; |
| 1564 | clear_bit(Faulty, &rdev->flags); | 1567 | clear_bit(Faulty, &rdev->flags); |
| 1565 | clear_bit(In_sync, &rdev->flags); | 1568 | clear_bit(In_sync, &rdev->flags); |
| 1569 | clear_bit(Bitmap_sync, &rdev->flags); | ||
| 1566 | clear_bit(WriteMostly, &rdev->flags); | 1570 | clear_bit(WriteMostly, &rdev->flags); |
| 1567 | 1571 | ||
| 1568 | if (mddev->raid_disks == 0) { | 1572 | if (mddev->raid_disks == 0) { |
| @@ -1645,6 +1649,8 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev) | |||
| 1645 | */ | 1649 | */ |
| 1646 | if (ev1 < mddev->bitmap->events_cleared) | 1650 | if (ev1 < mddev->bitmap->events_cleared) |
| 1647 | return 0; | 1651 | return 0; |
| 1652 | if (ev1 < mddev->events) | ||
| 1653 | set_bit(Bitmap_sync, &rdev->flags); | ||
| 1648 | } else { | 1654 | } else { |
| 1649 | if (ev1 < mddev->events) | 1655 | if (ev1 < mddev->events) |
| 1650 | /* just a hot-add of a new device, leave raid_disk at -1 */ | 1656 | /* just a hot-add of a new device, leave raid_disk at -1 */ |
| @@ -2788,6 +2794,7 @@ slot_store(struct md_rdev *rdev, const char *buf, size_t len) | |||
| 2788 | else | 2794 | else |
| 2789 | rdev->saved_raid_disk = -1; | 2795 | rdev->saved_raid_disk = -1; |
| 2790 | clear_bit(In_sync, &rdev->flags); | 2796 | clear_bit(In_sync, &rdev->flags); |
| 2797 | clear_bit(Bitmap_sync, &rdev->flags); | ||
| 2791 | err = rdev->mddev->pers-> | 2798 | err = rdev->mddev->pers-> |
| 2792 | hot_add_disk(rdev->mddev, rdev); | 2799 | hot_add_disk(rdev->mddev, rdev); |
| 2793 | if (err) { | 2800 | if (err) { |
| @@ -5760,6 +5767,7 @@ static int add_new_disk(struct mddev * mddev, mdu_disk_info_t *info) | |||
| 5760 | info->raid_disk < mddev->raid_disks) { | 5767 | info->raid_disk < mddev->raid_disks) { |
| 5761 | rdev->raid_disk = info->raid_disk; | 5768 | rdev->raid_disk = info->raid_disk; |
| 5762 | set_bit(In_sync, &rdev->flags); | 5769 | set_bit(In_sync, &rdev->flags); |
| 5770 | clear_bit(Bitmap_sync, &rdev->flags); | ||
| 5763 | } else | 5771 | } else |
| 5764 | rdev->raid_disk = -1; | 5772 | rdev->raid_disk = -1; |
| 5765 | } else | 5773 | } else |
| @@ -7706,7 +7714,8 @@ static int remove_and_add_spares(struct mddev *mddev, | |||
| 7706 | if (test_bit(Faulty, &rdev->flags)) | 7714 | if (test_bit(Faulty, &rdev->flags)) |
| 7707 | continue; | 7715 | continue; |
| 7708 | if (mddev->ro && | 7716 | if (mddev->ro && |
| 7709 | rdev->saved_raid_disk < 0) | 7717 | ! (rdev->saved_raid_disk >= 0 && |
| 7718 | !test_bit(Bitmap_sync, &rdev->flags))) | ||
| 7710 | continue; | 7719 | continue; |
| 7711 | 7720 | ||
| 7712 | rdev->recovery_offset = 0; | 7721 | rdev->recovery_offset = 0; |
| @@ -7787,9 +7796,12 @@ void md_check_recovery(struct mddev *mddev) | |||
| 7787 | * As we only add devices that are already in-sync, | 7796 | * As we only add devices that are already in-sync, |
| 7788 | * we can activate the spares immediately. | 7797 | * we can activate the spares immediately. |
| 7789 | */ | 7798 | */ |
| 7790 | clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery); | ||
| 7791 | remove_and_add_spares(mddev, NULL); | 7799 | remove_and_add_spares(mddev, NULL); |
| 7792 | mddev->pers->spare_active(mddev); | 7800 | /* There is no thread, but we need to call |
| 7801 | * ->spare_active and clear saved_raid_disk | ||
| 7802 | */ | ||
| 7803 | md_reap_sync_thread(mddev); | ||
| 7804 | clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery); | ||
| 7793 | goto unlock; | 7805 | goto unlock; |
| 7794 | } | 7806 | } |
| 7795 | 7807 | ||
diff --git a/drivers/md/md.h b/drivers/md/md.h index 2f5cc8a7ef3e..0095ec84ffc7 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h | |||
| @@ -129,6 +129,9 @@ struct md_rdev { | |||
| 129 | enum flag_bits { | 129 | enum flag_bits { |
| 130 | Faulty, /* device is known to have a fault */ | 130 | Faulty, /* device is known to have a fault */ |
| 131 | In_sync, /* device is in_sync with rest of array */ | 131 | In_sync, /* device is in_sync with rest of array */ |
| 132 | Bitmap_sync, /* ..actually, not quite In_sync. Need a | ||
| 133 | * bitmap-based recovery to get fully in sync | ||
| 134 | */ | ||
| 132 | Unmerged, /* device is being added to array and should | 135 | Unmerged, /* device is being added to array and should |
| 133 | * be considerred for bvec_merge_fn but not | 136 | * be considerred for bvec_merge_fn but not |
| 134 | * yet for actual IO | 137 | * yet for actual IO |
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 1e5a540995e9..a49cfcc7a343 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
| @@ -924,9 +924,8 @@ static sector_t wait_barrier(struct r1conf *conf, struct bio *bio) | |||
| 924 | conf->next_window_requests++; | 924 | conf->next_window_requests++; |
| 925 | else | 925 | else |
| 926 | conf->current_window_requests++; | 926 | conf->current_window_requests++; |
| 927 | } | ||
| 928 | if (bio->bi_sector >= conf->start_next_window) | ||
| 929 | sector = conf->start_next_window; | 927 | sector = conf->start_next_window; |
| 928 | } | ||
| 930 | } | 929 | } |
| 931 | 930 | ||
| 932 | conf->nr_pending++; | 931 | conf->nr_pending++; |
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index c504e8389e69..06eeb99ea6fc 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
| @@ -1319,7 +1319,7 @@ read_again: | |||
| 1319 | /* Could not read all from this device, so we will | 1319 | /* Could not read all from this device, so we will |
| 1320 | * need another r10_bio. | 1320 | * need another r10_bio. |
| 1321 | */ | 1321 | */ |
| 1322 | sectors_handled = (r10_bio->sectors + max_sectors | 1322 | sectors_handled = (r10_bio->sector + max_sectors |
| 1323 | - bio->bi_sector); | 1323 | - bio->bi_sector); |
| 1324 | r10_bio->sectors = max_sectors; | 1324 | r10_bio->sectors = max_sectors; |
| 1325 | spin_lock_irq(&conf->device_lock); | 1325 | spin_lock_irq(&conf->device_lock); |
| @@ -1327,7 +1327,7 @@ read_again: | |||
| 1327 | bio->bi_phys_segments = 2; | 1327 | bio->bi_phys_segments = 2; |
| 1328 | else | 1328 | else |
| 1329 | bio->bi_phys_segments++; | 1329 | bio->bi_phys_segments++; |
| 1330 | spin_unlock(&conf->device_lock); | 1330 | spin_unlock_irq(&conf->device_lock); |
| 1331 | /* Cannot call generic_make_request directly | 1331 | /* Cannot call generic_make_request directly |
| 1332 | * as that will be queued in __generic_make_request | 1332 | * as that will be queued in __generic_make_request |
| 1333 | * and subsequent mempool_alloc might block | 1333 | * and subsequent mempool_alloc might block |
| @@ -3218,10 +3218,6 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, | |||
| 3218 | if (j == conf->copies) { | 3218 | if (j == conf->copies) { |
| 3219 | /* Cannot recover, so abort the recovery or | 3219 | /* Cannot recover, so abort the recovery or |
| 3220 | * record a bad block */ | 3220 | * record a bad block */ |
| 3221 | put_buf(r10_bio); | ||
| 3222 | if (rb2) | ||
| 3223 | atomic_dec(&rb2->remaining); | ||
| 3224 | r10_bio = rb2; | ||
| 3225 | if (any_working) { | 3221 | if (any_working) { |
| 3226 | /* problem is that there are bad blocks | 3222 | /* problem is that there are bad blocks |
| 3227 | * on other device(s) | 3223 | * on other device(s) |
| @@ -3253,6 +3249,10 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, | |||
| 3253 | mirror->recovery_disabled | 3249 | mirror->recovery_disabled |
| 3254 | = mddev->recovery_disabled; | 3250 | = mddev->recovery_disabled; |
| 3255 | } | 3251 | } |
| 3252 | put_buf(r10_bio); | ||
| 3253 | if (rb2) | ||
| 3254 | atomic_dec(&rb2->remaining); | ||
| 3255 | r10_bio = rb2; | ||
| 3256 | break; | 3256 | break; |
| 3257 | } | 3257 | } |
| 3258 | } | 3258 | } |
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index cc055da02e2a..cbb15716a5db 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
| @@ -687,7 +687,8 @@ get_active_stripe(struct r5conf *conf, sector_t sector, | |||
| 687 | } else { | 687 | } else { |
| 688 | if (!test_bit(STRIPE_HANDLE, &sh->state)) | 688 | if (!test_bit(STRIPE_HANDLE, &sh->state)) |
| 689 | atomic_inc(&conf->active_stripes); | 689 | atomic_inc(&conf->active_stripes); |
| 690 | BUG_ON(list_empty(&sh->lru)); | 690 | BUG_ON(list_empty(&sh->lru) && |
| 691 | !test_bit(STRIPE_EXPANDING, &sh->state)); | ||
| 691 | list_del_init(&sh->lru); | 692 | list_del_init(&sh->lru); |
| 692 | if (sh->group) { | 693 | if (sh->group) { |
| 693 | sh->group->stripes_cnt--; | 694 | sh->group->stripes_cnt--; |
| @@ -3608,7 +3609,7 @@ static void analyse_stripe(struct stripe_head *sh, struct stripe_head_state *s) | |||
| 3608 | */ | 3609 | */ |
| 3609 | set_bit(R5_Insync, &dev->flags); | 3610 | set_bit(R5_Insync, &dev->flags); |
| 3610 | 3611 | ||
| 3611 | if (rdev && test_bit(R5_WriteError, &dev->flags)) { | 3612 | if (test_bit(R5_WriteError, &dev->flags)) { |
| 3612 | /* This flag does not apply to '.replacement' | 3613 | /* This flag does not apply to '.replacement' |
| 3613 | * only to .rdev, so make sure to check that*/ | 3614 | * only to .rdev, so make sure to check that*/ |
| 3614 | struct md_rdev *rdev2 = rcu_dereference( | 3615 | struct md_rdev *rdev2 = rcu_dereference( |
| @@ -3621,7 +3622,7 @@ static void analyse_stripe(struct stripe_head *sh, struct stripe_head_state *s) | |||
| 3621 | } else | 3622 | } else |
| 3622 | clear_bit(R5_WriteError, &dev->flags); | 3623 | clear_bit(R5_WriteError, &dev->flags); |
| 3623 | } | 3624 | } |
| 3624 | if (rdev && test_bit(R5_MadeGood, &dev->flags)) { | 3625 | if (test_bit(R5_MadeGood, &dev->flags)) { |
| 3625 | /* This flag does not apply to '.replacement' | 3626 | /* This flag does not apply to '.replacement' |
| 3626 | * only to .rdev, so make sure to check that*/ | 3627 | * only to .rdev, so make sure to check that*/ |
| 3627 | struct md_rdev *rdev2 = rcu_dereference( | 3628 | struct md_rdev *rdev2 = rcu_dereference( |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index 8b3107b2fcc1..0067b975873f 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | |||
| @@ -12942,25 +12942,26 @@ static void __bnx2x_remove(struct pci_dev *pdev, | |||
| 12942 | pci_set_power_state(pdev, PCI_D3hot); | 12942 | pci_set_power_state(pdev, PCI_D3hot); |
| 12943 | } | 12943 | } |
| 12944 | 12944 | ||
| 12945 | if (bp->regview) | 12945 | if (remove_netdev) { |
| 12946 | iounmap(bp->regview); | 12946 | if (bp->regview) |
| 12947 | iounmap(bp->regview); | ||
| 12947 | 12948 | ||
| 12948 | /* for vf doorbells are part of the regview and were unmapped along with | 12949 | /* For vfs, doorbells are part of the regview and were unmapped |
| 12949 | * it. FW is only loaded by PF. | 12950 | * along with it. FW is only loaded by PF. |
| 12950 | */ | 12951 | */ |
| 12951 | if (IS_PF(bp)) { | 12952 | if (IS_PF(bp)) { |
| 12952 | if (bp->doorbells) | 12953 | if (bp->doorbells) |
| 12953 | iounmap(bp->doorbells); | 12954 | iounmap(bp->doorbells); |
| 12954 | 12955 | ||
| 12955 | bnx2x_release_firmware(bp); | 12956 | bnx2x_release_firmware(bp); |
| 12956 | } | 12957 | } |
| 12957 | bnx2x_free_mem_bp(bp); | 12958 | bnx2x_free_mem_bp(bp); |
| 12958 | 12959 | ||
| 12959 | if (remove_netdev) | ||
| 12960 | free_netdev(dev); | 12960 | free_netdev(dev); |
| 12961 | 12961 | ||
| 12962 | if (atomic_read(&pdev->enable_cnt) == 1) | 12962 | if (atomic_read(&pdev->enable_cnt) == 1) |
| 12963 | pci_release_regions(pdev); | 12963 | pci_release_regions(pdev); |
| 12964 | } | ||
| 12964 | 12965 | ||
| 12965 | pci_disable_device(pdev); | 12966 | pci_disable_device(pdev); |
| 12966 | } | 12967 | } |
diff --git a/drivers/net/ethernet/chelsio/cxgb4/l2t.c b/drivers/net/ethernet/chelsio/cxgb4/l2t.c index cb05be905def..81e8402a74b4 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/l2t.c +++ b/drivers/net/ethernet/chelsio/cxgb4/l2t.c | |||
| @@ -423,7 +423,7 @@ u64 cxgb4_select_ntuple(struct net_device *dev, | |||
| 423 | * in the Compressed Filter Tuple. | 423 | * in the Compressed Filter Tuple. |
| 424 | */ | 424 | */ |
| 425 | if (tp->vlan_shift >= 0 && l2t->vlan != VLAN_NONE) | 425 | if (tp->vlan_shift >= 0 && l2t->vlan != VLAN_NONE) |
| 426 | ntuple |= (F_FT_VLAN_VLD | l2t->vlan) << tp->vlan_shift; | 426 | ntuple |= (u64)(F_FT_VLAN_VLD | l2t->vlan) << tp->vlan_shift; |
| 427 | 427 | ||
| 428 | if (tp->port_shift >= 0) | 428 | if (tp->port_shift >= 0) |
| 429 | ntuple |= (u64)l2t->lport << tp->port_shift; | 429 | ntuple |= (u64)l2t->lport << tp->port_shift; |
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index bf40fdaecfa3..a37039d353c5 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
| @@ -1776,6 +1776,7 @@ static void be_post_rx_frags(struct be_rx_obj *rxo, gfp_t gfp) | |||
| 1776 | struct be_rx_page_info *page_info = NULL, *prev_page_info = NULL; | 1776 | struct be_rx_page_info *page_info = NULL, *prev_page_info = NULL; |
| 1777 | struct be_queue_info *rxq = &rxo->q; | 1777 | struct be_queue_info *rxq = &rxo->q; |
| 1778 | struct page *pagep = NULL; | 1778 | struct page *pagep = NULL; |
| 1779 | struct device *dev = &adapter->pdev->dev; | ||
| 1779 | struct be_eth_rx_d *rxd; | 1780 | struct be_eth_rx_d *rxd; |
| 1780 | u64 page_dmaaddr = 0, frag_dmaaddr; | 1781 | u64 page_dmaaddr = 0, frag_dmaaddr; |
| 1781 | u32 posted, page_offset = 0; | 1782 | u32 posted, page_offset = 0; |
| @@ -1788,9 +1789,15 @@ static void be_post_rx_frags(struct be_rx_obj *rxo, gfp_t gfp) | |||
| 1788 | rx_stats(rxo)->rx_post_fail++; | 1789 | rx_stats(rxo)->rx_post_fail++; |
| 1789 | break; | 1790 | break; |
| 1790 | } | 1791 | } |
| 1791 | page_dmaaddr = dma_map_page(&adapter->pdev->dev, pagep, | 1792 | page_dmaaddr = dma_map_page(dev, pagep, 0, |
| 1792 | 0, adapter->big_page_size, | 1793 | adapter->big_page_size, |
| 1793 | DMA_FROM_DEVICE); | 1794 | DMA_FROM_DEVICE); |
| 1795 | if (dma_mapping_error(dev, page_dmaaddr)) { | ||
| 1796 | put_page(pagep); | ||
| 1797 | pagep = NULL; | ||
| 1798 | rx_stats(rxo)->rx_post_fail++; | ||
| 1799 | break; | ||
| 1800 | } | ||
| 1794 | page_info->page_offset = 0; | 1801 | page_info->page_offset = 0; |
| 1795 | } else { | 1802 | } else { |
| 1796 | get_page(pagep); | 1803 | get_page(pagep); |
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index c30d41d6e426..6d14eea17918 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c | |||
| @@ -6174,7 +6174,7 @@ static int __e1000_resume(struct pci_dev *pdev) | |||
| 6174 | return 0; | 6174 | return 0; |
| 6175 | } | 6175 | } |
| 6176 | 6176 | ||
| 6177 | #ifdef CONFIG_PM | 6177 | #ifdef CONFIG_PM_SLEEP |
| 6178 | static int e1000_suspend(struct device *dev) | 6178 | static int e1000_suspend(struct device *dev) |
| 6179 | { | 6179 | { |
| 6180 | struct pci_dev *pdev = to_pci_dev(dev); | 6180 | struct pci_dev *pdev = to_pci_dev(dev); |
| @@ -6193,7 +6193,7 @@ static int e1000_resume(struct device *dev) | |||
| 6193 | 6193 | ||
| 6194 | return __e1000_resume(pdev); | 6194 | return __e1000_resume(pdev); |
| 6195 | } | 6195 | } |
| 6196 | #endif /* CONFIG_PM */ | 6196 | #endif /* CONFIG_PM_SLEEP */ |
| 6197 | 6197 | ||
| 6198 | #ifdef CONFIG_PM_RUNTIME | 6198 | #ifdef CONFIG_PM_RUNTIME |
| 6199 | static int e1000_runtime_suspend(struct device *dev) | 6199 | static int e1000_runtime_suspend(struct device *dev) |
| @@ -7015,13 +7015,11 @@ static DEFINE_PCI_DEVICE_TABLE(e1000_pci_tbl) = { | |||
| 7015 | }; | 7015 | }; |
| 7016 | MODULE_DEVICE_TABLE(pci, e1000_pci_tbl); | 7016 | MODULE_DEVICE_TABLE(pci, e1000_pci_tbl); |
| 7017 | 7017 | ||
| 7018 | #ifdef CONFIG_PM | ||
| 7019 | static const struct dev_pm_ops e1000_pm_ops = { | 7018 | static const struct dev_pm_ops e1000_pm_ops = { |
| 7020 | SET_SYSTEM_SLEEP_PM_OPS(e1000_suspend, e1000_resume) | 7019 | SET_SYSTEM_SLEEP_PM_OPS(e1000_suspend, e1000_resume) |
| 7021 | SET_RUNTIME_PM_OPS(e1000_runtime_suspend, e1000_runtime_resume, | 7020 | SET_RUNTIME_PM_OPS(e1000_runtime_suspend, e1000_runtime_resume, |
| 7022 | e1000_idle) | 7021 | e1000_idle) |
| 7023 | }; | 7022 | }; |
| 7024 | #endif | ||
| 7025 | 7023 | ||
| 7026 | /* PCI Device API Driver */ | 7024 | /* PCI Device API Driver */ |
| 7027 | static struct pci_driver e1000_driver = { | 7025 | static struct pci_driver e1000_driver = { |
| @@ -7029,11 +7027,9 @@ static struct pci_driver e1000_driver = { | |||
| 7029 | .id_table = e1000_pci_tbl, | 7027 | .id_table = e1000_pci_tbl, |
| 7030 | .probe = e1000_probe, | 7028 | .probe = e1000_probe, |
| 7031 | .remove = e1000_remove, | 7029 | .remove = e1000_remove, |
| 7032 | #ifdef CONFIG_PM | ||
| 7033 | .driver = { | 7030 | .driver = { |
| 7034 | .pm = &e1000_pm_ops, | 7031 | .pm = &e1000_pm_ops, |
| 7035 | }, | 7032 | }, |
| 7036 | #endif | ||
| 7037 | .shutdown = e1000_shutdown, | 7033 | .shutdown = e1000_shutdown, |
| 7038 | .err_handler = &e1000_err_handler | 7034 | .err_handler = &e1000_err_handler |
| 7039 | }; | 7035 | }; |
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c index 449f506d2e8f..f705aeeba767 100644 --- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c +++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c | |||
| @@ -4765,6 +4765,8 @@ static int qlge_probe(struct pci_dev *pdev, | |||
| 4765 | NETIF_F_RXCSUM; | 4765 | NETIF_F_RXCSUM; |
| 4766 | ndev->features = ndev->hw_features; | 4766 | ndev->features = ndev->hw_features; |
| 4767 | ndev->vlan_features = ndev->hw_features; | 4767 | ndev->vlan_features = ndev->hw_features; |
| 4768 | /* vlan gets same features (except vlan filter) */ | ||
| 4769 | ndev->vlan_features &= ~NETIF_F_HW_VLAN_CTAG_FILTER; | ||
| 4768 | 4770 | ||
| 4769 | if (test_bit(QL_DMA64, &qdev->flags)) | 4771 | if (test_bit(QL_DMA64, &qdev->flags)) |
| 4770 | ndev->features |= NETIF_F_HIGHDMA; | 4772 | ndev->features |= NETIF_F_HIGHDMA; |
diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c index cce6c4bc556a..ef312bc6b865 100644 --- a/drivers/net/ethernet/via/via-rhine.c +++ b/drivers/net/ethernet/via/via-rhine.c | |||
| @@ -1618,6 +1618,7 @@ static void rhine_reset_task(struct work_struct *work) | |||
| 1618 | goto out_unlock; | 1618 | goto out_unlock; |
| 1619 | 1619 | ||
| 1620 | napi_disable(&rp->napi); | 1620 | napi_disable(&rp->napi); |
| 1621 | netif_tx_disable(dev); | ||
| 1621 | spin_lock_bh(&rp->lock); | 1622 | spin_lock_bh(&rp->lock); |
| 1622 | 1623 | ||
| 1623 | /* clear all descriptors */ | 1624 | /* clear all descriptors */ |
diff --git a/drivers/net/usb/dm9601.c b/drivers/net/usb/dm9601.c index 14aa48fa8d7e..e80219877730 100644 --- a/drivers/net/usb/dm9601.c +++ b/drivers/net/usb/dm9601.c | |||
| @@ -614,6 +614,18 @@ static const struct usb_device_id products[] = { | |||
| 614 | USB_DEVICE(0x0a46, 0x9621), /* DM9621A USB to Fast Ethernet Adapter */ | 614 | USB_DEVICE(0x0a46, 0x9621), /* DM9621A USB to Fast Ethernet Adapter */ |
| 615 | .driver_info = (unsigned long)&dm9601_info, | 615 | .driver_info = (unsigned long)&dm9601_info, |
| 616 | }, | 616 | }, |
| 617 | { | ||
| 618 | USB_DEVICE(0x0a46, 0x9622), /* DM9622 USB to Fast Ethernet Adapter */ | ||
| 619 | .driver_info = (unsigned long)&dm9601_info, | ||
| 620 | }, | ||
| 621 | { | ||
| 622 | USB_DEVICE(0x0a46, 0x0269), /* DM962OA USB to Fast Ethernet Adapter */ | ||
| 623 | .driver_info = (unsigned long)&dm9601_info, | ||
| 624 | }, | ||
| 625 | { | ||
| 626 | USB_DEVICE(0x0a46, 0x1269), /* DM9621A USB to Fast Ethernet Adapter */ | ||
| 627 | .driver_info = (unsigned long)&dm9601_info, | ||
| 628 | }, | ||
| 617 | {}, // END | 629 | {}, // END |
| 618 | }; | 630 | }; |
| 619 | 631 | ||
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 8494bb53ebdc..aba04f561760 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c | |||
| @@ -1245,7 +1245,7 @@ static int build_dma_sg(const struct sk_buff *skb, struct urb *urb) | |||
| 1245 | return -ENOMEM; | 1245 | return -ENOMEM; |
| 1246 | 1246 | ||
| 1247 | urb->num_sgs = num_sgs; | 1247 | urb->num_sgs = num_sgs; |
| 1248 | sg_init_table(urb->sg, urb->num_sgs); | 1248 | sg_init_table(urb->sg, urb->num_sgs + 1); |
| 1249 | 1249 | ||
| 1250 | sg_set_buf(&urb->sg[s++], skb->data, skb_headlen(skb)); | 1250 | sg_set_buf(&urb->sg[s++], skb->data, skb_headlen(skb)); |
| 1251 | total_len += skb_headlen(skb); | 1251 | total_len += skb_headlen(skb); |
diff --git a/drivers/pinctrl/pinctrl-baytrail.c b/drivers/pinctrl/pinctrl-baytrail.c index 114f5ef4b73a..2832576d8b12 100644 --- a/drivers/pinctrl/pinctrl-baytrail.c +++ b/drivers/pinctrl/pinctrl-baytrail.c | |||
| @@ -512,7 +512,6 @@ static const struct dev_pm_ops byt_gpio_pm_ops = { | |||
| 512 | 512 | ||
| 513 | static const struct acpi_device_id byt_gpio_acpi_match[] = { | 513 | static const struct acpi_device_id byt_gpio_acpi_match[] = { |
| 514 | { "INT33B2", 0 }, | 514 | { "INT33B2", 0 }, |
| 515 | { "INT33FC", 0 }, | ||
| 516 | { } | 515 | { } |
| 517 | }; | 516 | }; |
| 518 | MODULE_DEVICE_TABLE(acpi, byt_gpio_acpi_match); | 517 | MODULE_DEVICE_TABLE(acpi, byt_gpio_acpi_match); |
