Thanks for your review and your changes. > -----Original Message----- > From: Kristian Høgsberg [mailto:hoegsb...@gmail.com] > Sent: Tuesday, July 31, 2012 6:15 AM > To: Wang, Quanxian > Cc: wayland-devel@lists.freedesktop.org > Subject: Re: bug fix inactive encoder when weston restart > > On Thu, Jul 26, 2012 at 08:03:26PM +0000, Wang, Quanxian wrote: > > Hi, All > > > > Please help review the patch. > > > > Thanks > > > > Background: > > If we use 'pkill -9 weston', when restart weston, weston could not get the > active encoder attached on connector and exit abnormally. > > This is because when weston is pkilled, drm cleanups the encoders attached > to active connector in KMS. > > This patch will ignore the active encode checking, weston has the ability to > re-initialize encoder and reattached it into connector. > > Good catch. We don't handle connectors that aren't attached to a crtc, which > happens in your case above, but also just when hotplugging a monitor. I > applied your patch with a few changes, mostly to deal with how we don't have > the built-in mode. We now just exit if we don't find any modes to the output. > > Kristian > > > commit 7f991195c20d9dd57e14faf88cd36db0c77df424 > > Author: Wang Quanxian <quanxian.w...@intel.com> > > Date: Thu Jul 19 19:11:04 2012 +0800 > > User sends SIGKILL to weston, KMS will clean up encoder > > attached with connector. When weston restarts again, it causes > > exit of weston because no active encoder is attached to connector. > > This patch will ignore the checking and weston will initialize > > encoder again and re-attach it to connector in the following process. > > > > Sign-Off-By Quanxian Wang <quanxian.w...@intel.com> > > > > diff --git a/src/compositor-drm.c b/src/compositor-drm.c index > > 47cd512..bb1b138 100644 > > --- a/src/compositor-drm.c > > +++ b/src/compositor-drm.c > > @@ -1348,26 +1348,28 @@ create_output_for_connector(struct > drm_compositor *ec, > > /* Get the current mode on the crtc that's currently driving > > * this connector. */ > > encoder = drmModeGetEncoder(ec->drm.fd, > connector->encoder_id); > > - if (encoder == NULL) > > - goto err_free; > > - crtc = drmModeGetCrtc(ec->drm.fd, encoder->crtc_id); > > - drmModeFreeEncoder(encoder); > > - if (crtc == NULL) > > - goto err_free; > > - > > - /* if don't get mode from drm driver, use default 800x480 */ > > - if (crtc->mode.clock != 0) > > - { > > + if (encoder != NULL) > > + { > > + crtc = drmModeGetCrtc(ec->drm.fd, encoder->crtc_id); > > + drmModeFreeEncoder(encoder); > > + if (crtc == NULL) > > + goto err_free; > > crtc_mode = crtc->mode; > > - } else { > > + drmModeFreeCrtc(crtc); > > + } > > + /* > > + * No actiave encoder is connected with the connector > > + * If connector has no mode available, takes detault mode > > + * Or takes the first mode from connector > > + */ > > + if (encoder == NULL || crtc_mode.clock == 0) > > + { > > if (connector->count_modes == 0) > > crtc_mode = builtin_800x480; > > else > > crtc_mode = connector->modes[0]; > > } > > > > - drmModeFreeCrtc(crtc); > > - > > if (connector->count_modes == 0) { > > ret = drm_output_add_mode(output, &crtc_mode); > > if (ret) > > > > > > Thanks > > > > Quanxian Wang > > > > > > > > _______________________________________________ > > wayland-devel mailing list > > wayland-devel@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/wayland-devel
_______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel