Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b9f57019 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'drm-fixes-for-v4.17-rc7' of git://people.freedesktop.org/~airlied/linux

Pull drm fixes from Dave Airlie:
 "Only two sets of drivers fixes: one rcar-du lvds regression fix, and a
  group of fixes for vmwgfx"

* tag 'drm-fixes-for-v4.17-rc7' of git://people.freedesktop.org/~airlied/linux:
  drm/vmwgfx: Schedule an fb dirty update after resume
  drm/vmwgfx: Fix host logging / guestinfo reading error paths
  drm/vmwgfx: Fix 32-bit VMW_PORT_HB_[IN|OUT] macros
  drm: rcar-du: lvds: Fix crash in .atomic_check when disabling connector
parents a1a9f537 4bc6f777
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -88,6 +88,9 @@ static int rcar_lvds_connector_atomic_check(struct drm_connector *connector,
	const struct drm_display_mode *panel_mode;
	struct drm_crtc_state *crtc_state;

	if (!state->crtc)
		return 0;

	if (list_empty(&connector->modes)) {
		dev_dbg(lvds->dev, "connector: empty modes list\n");
		return -EINVAL;
+0 −5
Original line number Diff line number Diff line
@@ -1278,8 +1278,6 @@ static void vmw_master_drop(struct drm_device *dev,
	dev_priv->active_master = &dev_priv->fbdev_master;
	ttm_lock_set_kill(&dev_priv->fbdev_master.lock, false, SIGTERM);
	ttm_vt_unlock(&dev_priv->fbdev_master.lock);

	vmw_fb_refresh(dev_priv);
}

/**
@@ -1483,7 +1481,6 @@ static int vmw_pm_freeze(struct device *kdev)
			vmw_kms_resume(dev);
		if (dev_priv->enable_fb)
			vmw_fb_on(dev_priv);
		vmw_fb_refresh(dev_priv);
		return -EBUSY;
	}

@@ -1523,8 +1520,6 @@ static int vmw_pm_restore(struct device *kdev)
	if (dev_priv->enable_fb)
		vmw_fb_on(dev_priv);

	vmw_fb_refresh(dev_priv);

	return 0;
}

+0 −1
Original line number Diff line number Diff line
@@ -910,7 +910,6 @@ int vmw_fb_init(struct vmw_private *vmw_priv);
int vmw_fb_close(struct vmw_private *dev_priv);
int vmw_fb_off(struct vmw_private *vmw_priv);
int vmw_fb_on(struct vmw_private *vmw_priv);
void vmw_fb_refresh(struct vmw_private *vmw_priv);

/**
 * Kernel modesetting - vmwgfx_kms.c
+7 −15
Original line number Diff line number Diff line
@@ -867,20 +867,12 @@ int vmw_fb_on(struct vmw_private *vmw_priv)
	par->dirty.active = true;
	spin_unlock_irqrestore(&par->dirty.lock, flags);

	return 0;
}

/**
 * vmw_fb_refresh - Refresh fb display
 *
 * @vmw_priv: Pointer to device private
 *
 * Call into kms to show the fbdev display(s).
	/*
	 * Need to reschedule a dirty update, because otherwise that's
	 * only done in dirty_mark() if the previous coalesced
	 * dirty region was empty.
	 */
void vmw_fb_refresh(struct vmw_private *vmw_priv)
{
	if (!vmw_priv->fb_info)
		return;
	schedule_delayed_work(&par->local_work, 0);

	vmw_fb_set_par(vmw_priv->fb_info);
	return 0;
}
+31 −17
Original line number Diff line number Diff line
@@ -329,8 +329,6 @@ int vmw_host_get_guestinfo(const char *guest_info_param,
	struct rpc_channel channel;
	char *msg, *reply = NULL;
	size_t reply_len = 0;
	int ret = 0;


	if (!vmw_msg_enabled)
		return -ENODEV;
@@ -344,15 +342,14 @@ int vmw_host_get_guestinfo(const char *guest_info_param,
		return -ENOMEM;
	}

	if (vmw_open_channel(&channel, RPCI_PROTOCOL_NUM) ||
	    vmw_send_msg(&channel, msg) ||
	    vmw_recv_msg(&channel, (void *) &reply, &reply_len) ||
	    vmw_close_channel(&channel)) {
		DRM_ERROR("Failed to get %s", guest_info_param);
	if (vmw_open_channel(&channel, RPCI_PROTOCOL_NUM))
		goto out_open;

		ret = -EINVAL;
	}
	if (vmw_send_msg(&channel, msg) ||
	    vmw_recv_msg(&channel, (void *) &reply, &reply_len))
		goto out_msg;

	vmw_close_channel(&channel);
	if (buffer && reply && reply_len > 0) {
		/* Remove reply code, which are the first 2 characters of
		 * the reply
@@ -369,7 +366,17 @@ int vmw_host_get_guestinfo(const char *guest_info_param,
	kfree(reply);
	kfree(msg);

	return ret;
	return 0;

out_msg:
	vmw_close_channel(&channel);
	kfree(reply);
out_open:
	*length = 0;
	kfree(msg);
	DRM_ERROR("Failed to get %s", guest_info_param);

	return -EINVAL;
}


@@ -400,15 +407,22 @@ int vmw_host_log(const char *log)
		return -ENOMEM;
	}

	if (vmw_open_channel(&channel, RPCI_PROTOCOL_NUM) ||
	    vmw_send_msg(&channel, msg) ||
	    vmw_close_channel(&channel)) {
		DRM_ERROR("Failed to send log\n");
	if (vmw_open_channel(&channel, RPCI_PROTOCOL_NUM))
		goto out_open;

		ret = -EINVAL;
	}
	if (vmw_send_msg(&channel, msg))
		goto out_msg;

	vmw_close_channel(&channel);
	kfree(msg);

	return ret;
	return 0;

out_msg:
	vmw_close_channel(&channel);
out_open:
	kfree(msg);
	DRM_ERROR("Failed to send log\n");

	return -EINVAL;
}
Loading