<div class="qmbox"><div style="font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 10.5pt; color: rgb(46, 48, 51);">Hi Thomas</div><div style="font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 10.5pt; color: rgb(46, 48, 51);"><br  /></div><div style="font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 10.5pt; color: rgb(46, 48, 51);">That is all right, thanks very much for your review.</div><div style="font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 10.5pt; color: rgb(46, 48, 51);"><br  /></div><div style="font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 10.5pt; color: rgb(46, 48, 51);"><br  /></div><div style="font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 10.5pt; color: rgb(46, 48, 51);"><br  /></div><div style="font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 10.5pt; color: rgb(46, 48, 51);"><br  /></div><div style="font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 10.5pt; color: rgb(46, 48, 51);">Best Regards</div><div style="font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 10.5pt; color: rgb(46, 48, 51);"><br  /></div><br  /><br  /><div class="xm_compose_origin_mail_container"><div style="line-height: 30px;position: relative;display: -webkit-box;display: -ms-flexbox;display: flex;-webkit-box-align: center;-ms-flex-align: center;align-items: center;">
                      <p style="color: #959DA6;font-size: 12px;">原始邮件</p>
                      <div style="flex-grow: 1;height: 1px;margin-left: 20px;background-color: #e6e8eb;"></div>
                    </div><div style="background-color: #F5F6F7;padding: 8px;"><p style="font-size: 12px;line-height: 20px;"><span style="color: #5C6166;">发件人:</span><span style="color: black;">"Thomas Zimmermann"</span><span style="color: #959DA6;">< tzimmermann@suse.de >;</span></p><p style="font-size: 12px;line-height: 20px;"><span style="color: #5C6166;">发件时间:</span><span style="color: black;">2024/8/26 22:45</span></p><p style="font-size: 12px;line-height: 20px;"><span style="color: #5C6166;">收件人:</span><span style="color: black;">"renjun wang"</span><span style="color: #959DA6;">< renjunw0@foxmail.com >;</span><span style="color: black;">"maarten.lankhorst"</span><span style="color: #959DA6;">< maarten.lankhorst@linux.intel.com >;</span><span style="color: black;">"mripard"</span><span style="color: #959DA6;">< mripard@kernel.org >;</span><span style="color: black;">"airlied"</span><span style="color: #959DA6;">< airlied@gmail.com >;</span><span style="color: black;">"daniel"</span><span style="color: #959DA6;">< daniel@ffwll.ch >;</span></p><p style="font-size: 12px;line-height: 20px;"><span style="color: #5C6166;">抄送人:</span><span style="color: black;">"jani.nikula"</span><span style="color: #959DA6;">< jani.nikula@linux.intel.com >;</span><span style="color: black;">"joonas.lahtinen"</span><span style="color: #959DA6;">< joonas.lahtinen@linux.intel.com >;</span><span style="color: black;">"rodrigo.vivi"</span><span style="color: #959DA6;">< rodrigo.vivi@intel.com >;</span><span style="color: black;">"tursulin"</span><span style="color: #959DA6;">< tursulin@ursulin.net >;</span><span style="color: black;">"lyude"</span><span style="color: #959DA6;">< lyude@redhat.com >;</span><span style="color: black;">"imre.deak"</span><span style="color: #959DA6;">< imre.deak@intel.com >;</span><span style="color: black;">"Wayne.Lin"</span><span style="color: #959DA6;">< Wayne.Lin@amd.com >;</span><span style="color: black;">"ville.syrjala"</span><span style="color: #959DA6;">< ville.syrjala@linux.intel.com >;</span><span style="color: black;">"vidya.srinivas"</span><span style="color: #959DA6;">< vidya.srinivas@intel.com >;</span><span style="color: black;">"jouni.hogander"</span><span style="color: #959DA6;">< jouni.hogander@intel.com >;</span><span style="color: black;">"andi.shyti"</span><span style="color: #959DA6;">< andi.shyti@linux.intel.com >;</span><span style="color: black;">"janusz.krzysztofik"</span><span style="color: #959DA6;">< janusz.krzysztofik@linux.intel.com >;</span><span style="color: black;">"dri-devel"</span><span style="color: #959DA6;">< dri-devel@lists.freedesktop.org >;</span><span style="color: black;">"linux-kernel"</span><span style="color: #959DA6;">< linux-kernel@vger.kernel.org >;</span><span style="color: black;">"intel-gfx"</span><span style="color: #959DA6;">< intel-gfx@lists.freedesktop.org >;</span></p><p style="font-size: 12px;line-height: 20px;"><span style="color: #5C6166;">主题:</span><span style="color: black;">Re: [PATCH] drm: Fix kerneldoc for "Returns" section</span></p></div><br  />Hi Renjun<br  /><br  />Am 26.08.24 um 16:26 schrieb Thomas Zimmermann:<br  />><br  />><br  />> Am 24.08.24 um 10:36 schrieb renjun wang:<br  />>> The blank line between title "Returns:" and detail description is not<br  />>> allowed, otherwise the title will goes under the description block in<br  />>> generated .html file after running `make htmldocs`.<br  />>><br  />>> There are a few examples for current kerneldoc:<br  />>> https://www.kernel.org/doc/html/latest/gpu/drm-kms.html#c.drm_crtc_commit_wait <br  />>><br  />>> https://www.kernel.org/doc/html/latest/gpu/drm-kms.html#c.drm_atomic_get_crtc_state <br  />>><br  />>> https://www.kernel.org/doc/html/latest/gpu/i915.html#c.i915_vma_pin_fence <br  />>><br  />>><br  />>> Signed-off-by: renjun wang <renjunw0@foxmail.com></renjunw0@foxmail.com><br  />><br  />> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de></tzimmermann@suse.de><br  />><br  />> I'll add this patch and the other doc fix to the drm-misc tree. Thanks <br  />> a lot for the fixes.<br  /><br  />I took the liberty to slightly change the commit messages. The links are <br  />now given in Link tags and point to stable URLs.<br  /><br  />Best regards<br  />Thomas<br  /><br  />><br  />> Best regards<br  />> Thomas<br  />><br  />>> ---<br  />>>   drivers/gpu/drm/display/drm_dp_mst_topology.c | 4 ----<br  />>>   drivers/gpu/drm/drm_atomic.c                  | 6 ------<br  />>>   drivers/gpu/drm/drm_atomic_helper.c           | 2 --<br  />>>   drivers/gpu/drm/drm_file.c                    | 7 -------<br  />>>   drivers/gpu/drm/drm_gem.c                     | 7 ++-----<br  />>>   drivers/gpu/drm/drm_modes.c                   | 1 -<br  />>>   drivers/gpu/drm/drm_rect.c                    | 1 -<br  />>>   drivers/gpu/drm/drm_vblank.c                  | 2 --<br  />>>   drivers/gpu/drm/i915/gem/i915_gem_object.h    | 1 -<br  />>>   drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c  | 1 -<br  />>>   drivers/gpu/drm/i915/i915_vma.h               | 1 -<br  />>>   11 files changed, 2 insertions(+), 31 deletions(-)<br  />>><br  />>> diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c <br  />>> b/drivers/gpu/drm/display/drm_dp_mst_topology.c<br  />>> index fc2ceae61db2..e68d23997d53 100644<br  />>> --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c<br  />>> +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c<br  />>> @@ -5569,7 +5569,6 @@ EXPORT_SYMBOL(drm_dp_mst_atomic_check_mgr);<br  />>>    * drm_dp_atomic_release_time_slots()<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * 0 if the new state is valid, negative error code otherwise.<br  />>>    */<br  />>>   int drm_dp_mst_atomic_check(struct drm_atomic_state *state)<br  />>> @@ -5606,7 +5605,6 @@ EXPORT_SYMBOL(drm_dp_mst_topology_state_funcs);<br  />>>    * topology object.<br  />>>    *<br  />>>    * RETURNS:<br  />>> - *<br  />>>    * The MST topology state or error pointer.<br  />>>    */<br  />>>   struct drm_dp_mst_topology_state <br  />>> *drm_atomic_get_mst_topology_state(struct drm_atomic_state *state,<br  />>> @@ -5626,7 +5624,6 @@ EXPORT_SYMBOL(drm_atomic_get_mst_topology_state);<br  />>>    * topology object.<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * The old MST topology state, or NULL if there's no topology state <br  />>> for this MST mgr<br  />>>    * in the global atomic state<br  />>>    */<br  />>> @@ -5651,7 +5648,6 @@ <br  />>> EXPORT_SYMBOL(drm_atomic_get_old_mst_topology_state);<br  />>>    * topology object.<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * The new MST topology state, or NULL if there's no topology state <br  />>> for this MST mgr<br  />>>    * in the global atomic state<br  />>>    */<br  />>> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c<br  />>> index 6e516c39a372..0fc99da93afe 100644<br  />>> --- a/drivers/gpu/drm/drm_atomic.c<br  />>> +++ b/drivers/gpu/drm/drm_atomic.c<br  />>> @@ -63,7 +63,6 @@ EXPORT_SYMBOL(__drm_crtc_commit_free);<br  />>>    * hardware and flipped to.<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * 0 on success, a negative error code otherwise.<br  />>>    */<br  />>>   int drm_crtc_commit_wait(struct drm_crtc_commit *commit)<br  />>> @@ -337,7 +336,6 @@ EXPORT_SYMBOL(__drm_atomic_state_free);<br  />>>    * not created by userspace through an IOCTL call.<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * Either the allocated state or the error code encoded into the <br  />>> pointer. When<br  />>>    * the error is EDEADLK then the w/w mutex code has detected a <br  />>> deadlock and the<br  />>>    * entire atomic sequence must be restarted. All other errors are <br  />>> fatal.<br  />>> @@ -518,7 +516,6 @@ static int drm_atomic_connector_check(struct <br  />>> drm_connector *connector,<br  />>>    * is consistent.<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * Either the allocated state or the error code encoded into the <br  />>> pointer. When<br  />>>    * the error is EDEADLK then the w/w mutex code has detected a <br  />>> deadlock and the<br  />>>    * entire atomic sequence must be restarted. All other errors are <br  />>> fatal.<br  />>> @@ -828,7 +825,6 @@ EXPORT_SYMBOL(drm_atomic_private_obj_fini);<br  />>>    * object lock to make sure that the state is consistent.<br  />>>    *<br  />>>    * RETURNS:<br  />>> - *<br  />>>    * Either the allocated state or the error code encoded into a <br  />>> pointer.<br  />>>    */<br  />>>   struct drm_private_state *<br  />>> @@ -1061,7 +1057,6 @@ <br  />>> EXPORT_SYMBOL(drm_atomic_get_new_crtc_for_encoder);<br  />>>    * make sure that the state is consistent.<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * Either the allocated state or the error code encoded into the <br  />>> pointer. When<br  />>>    * the error is EDEADLK then the w/w mutex code has detected a <br  />>> deadlock and the<br  />>>    * entire atomic sequence must be restarted. All other errors are <br  />>> fatal.<br  />>> @@ -1169,7 +1164,6 @@ static void <br  />>> drm_atomic_connector_print_state(struct drm_printer *p,<br  />>>    * state is consistent.<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * Either the allocated state or the error code encoded into the <br  />>> pointer. When<br  />>>    * the error is EDEADLK then the w/w mutex code has detected a <br  />>> deadlock and the<br  />>>    * entire atomic sequence must be restarted.<br  />>> diff --git a/drivers/gpu/drm/drm_atomic_helper.c <br  />>> b/drivers/gpu/drm/drm_atomic_helper.c<br  />>> index fb97b51b38f1..43cdf39019a4 100644<br  />>> --- a/drivers/gpu/drm/drm_atomic_helper.c<br  />>> +++ b/drivers/gpu/drm/drm_atomic_helper.c<br  />>> @@ -2266,7 +2266,6 @@ crtc_or_fake_commit(struct drm_atomic_state <br  />>> *state, struct drm_crtc *crtc)<br  />>>    * automatically.<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * 0 on success. -EBUSY when userspace schedules nonblocking <br  />>> commits too fast,<br  />>>    * -ENOMEM on allocation failures and -EINTR when a signal is pending.<br  />>>    */<br  />>> @@ -3009,7 +3008,6 @@ EXPORT_SYMBOL(drm_atomic_helper_cleanup_planes);<br  />>>    * don't pass the right state structures to the callbacks.<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * Returns 0 on success. Can return -ERESTARTSYS when @stall is <br  />>> true and the<br  />>>    * waiting for the previous commits has been interrupted.<br  />>>    */<br  />>> diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c<br  />>> index 714e42b05108..7beed6902208 100644<br  />>> --- a/drivers/gpu/drm/drm_file.c<br  />>> +++ b/drivers/gpu/drm/drm_file.c<br  />>> @@ -355,7 +355,6 @@ int drm_open_helper(struct file *filp, struct <br  />>> drm_minor *minor)<br  />>>    * resources for it. It also calls the &drm_driver.open driver <br  />>> callback.<br  />>>    *<br  />>>    * RETURNS:<br  />>> - *<br  />>>    * 0 on success or negative errno value on failure.<br  />>>    */<br  />>>   int drm_open(struct inode *inode, struct file *filp)<br  />>> @@ -417,7 +416,6 @@ void drm_lastclose(struct drm_device * dev)<br  />>>    * DRM device also proceeds to call the &drm_driver.lastclose <br  />>> driver callback.<br  />>>    *<br  />>>    * RETURNS:<br  />>> - *<br  />>>    * Always succeeds and returns 0.<br  />>>    */<br  />>>   int drm_release(struct inode *inode, struct file *filp)<br  />>> @@ -489,7 +487,6 @@ void drm_file_update_pid(struct drm_file *filp)<br  />>>    * call the &drm_driver.lastclose driver callback.<br  />>>    *<br  />>>    * RETURNS:<br  />>> - *<br  />>>    * Always succeeds and returns 0.<br  />>>    */<br  />>>   int drm_release_noglobal(struct inode *inode, struct file *filp)<br  />>> @@ -532,7 +529,6 @@ EXPORT_SYMBOL(drm_release_noglobal);<br  />>>    * safety.<br  />>>    *<br  />>>    * RETURNS:<br  />>> - *<br  />>>    * Number of bytes read (always aligned to full events, and can be <br  />>> 0) or a<br  />>>    * negative error code on failure.<br  />>>    */<br  />>> @@ -618,7 +614,6 @@ EXPORT_SYMBOL(drm_read);<br  />>>    * See also drm_read().<br  />>>    *<br  />>>    * RETURNS:<br  />>> - *<br  />>>    * Mask of POLL flags indicating the current status of the file.<br  />>>    */<br  />>>   __poll_t drm_poll(struct file *filp, struct poll_table_struct *wait)<br  />>> @@ -656,7 +651,6 @@ EXPORT_SYMBOL(drm_poll);<br  />>>    * already hold &drm_device.event_lock.<br  />>>    *<br  />>>    * RETURNS:<br  />>> - *<br  />>>    * 0 on success or a negative error code on failure.<br  />>>    */<br  />>>   int drm_event_reserve_init_locked(struct drm_device *dev,<br  />>> @@ -698,7 +692,6 @@ EXPORT_SYMBOL(drm_event_reserve_init_locked);<br  />>>    * drm_event_reserve_init_locked() instead.<br  />>>    *<br  />>>    * RETURNS:<br  />>> - *<br  />>>    * 0 on success or a negative error code on failure.<br  />>>    */<br  />>>   int drm_event_reserve_init(struct drm_device *dev,<br  />>> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c<br  />>> index d4bbc5d109c8..149b8e25da5b 100644<br  />>> --- a/drivers/gpu/drm/drm_gem.c<br  />>> +++ b/drivers/gpu/drm/drm_gem.c<br  />>> @@ -689,7 +689,6 @@ static int objects_lookup(struct drm_file *filp, <br  />>> u32 *handle, int count,<br  />>>    * For a single handle lookup, use drm_gem_object_lookup().<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * @objs filled in with GEM object pointers. Returned GEM objects <br  />>> need to be<br  />>>    * released with drm_gem_object_put(). -ENOENT is returned on a lookup<br  />>>    * failure. 0 is returned on success.<br  />>> @@ -737,12 +736,11 @@ EXPORT_SYMBOL(drm_gem_objects_lookup);<br  />>>    * @filp: DRM file private date<br  />>>    * @handle: userspace handle<br  />>>    *<br  />>> - * Returns:<br  />>> + * If looking up an array of handles, use drm_gem_objects_lookup().<br  />>>    *<br  />>> + * Returns:<br  />>>    * A reference to the object named by the handle if such exists on <br  />>> @filp, NULL<br  />>>    * otherwise.<br  />>> - *<br  />>> - * If looking up an array of handles, use drm_gem_objects_lookup().<br  />>>    */<br  />>>   struct drm_gem_object *<br  />>>   drm_gem_object_lookup(struct drm_file *filp, u32 handle)<br  />>> @@ -763,7 +761,6 @@ EXPORT_SYMBOL(drm_gem_object_lookup);<br  />>>    * @timeout: timeout value in jiffies or zero to return immediately<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or<br  />>>    * greater than 0 on success.<br  />>>    */<br  />>> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c<br  />>> index 1a0890083aee..6ba167a33461 100644<br  />>> --- a/drivers/gpu/drm/drm_modes.c<br  />>> +++ b/drivers/gpu/drm/drm_modes.c<br  />>> @@ -539,7 +539,6 @@ static int fill_analog_mode(struct drm_device *dev,<br  />>>    * to reach those resolutions.<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * A pointer to the mode, allocated with drm_mode_create(). Returns <br  />>> NULL<br  />>>    * on error.<br  />>>    */<br  />>> diff --git a/drivers/gpu/drm/drm_rect.c b/drivers/gpu/drm/drm_rect.c<br  />>> index 85c79a38c13a..492acce0516f 100644<br  />>> --- a/drivers/gpu/drm/drm_rect.c<br  />>> +++ b/drivers/gpu/drm/drm_rect.c<br  />>> @@ -85,7 +85,6 @@ static u32 clip_scaled(int src, int dst, int *clip)<br  />>>    * factors from @src to @dst.<br  />>>    *<br  />>>    * RETURNS:<br  />>> - *<br  />>>    * %true if rectangle @dst is still visible after being clipped,<br  />>>    * %false otherwise.<br  />>>    */<br  />>> diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c<br  />>> index cc3571e25a9a..6428b7975dd6 100644<br  />>> --- a/drivers/gpu/drm/drm_vblank.c<br  />>> +++ b/drivers/gpu/drm/drm_vblank.c<br  />>> @@ -686,7 +686,6 @@ EXPORT_SYMBOL(drm_calc_timestamping_constants);<br  />>>    * drm_atomic_helper_calc_timestamping_constants().<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * Returns true on success, and false on failure, i.e. when no <br  />>> accurate<br  />>>    * timestamp could be acquired.<br  />>>    */<br  />>> @@ -831,7 +830,6 @@ <br  />>> EXPORT_SYMBOL(drm_crtc_vblank_helper_get_vblank_timestamp_internal);<br  />>>    * drm_atomic_helper_calc_timestamping_constants().<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * Returns true on success, and false on failure, i.e. when no <br  />>> accurate<br  />>>    * timestamp could be acquired.<br  />>>    */<br  />>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h <br  />>> b/drivers/gpu/drm/i915/gem/i915_gem_object.h<br  />>> index 5d7446a48ae7..3dc61cbd2e11 100644<br  />>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h<br  />>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h<br  />>> @@ -89,7 +89,6 @@ __i915_gem_object_unset_pages(struct <br  />>> drm_i915_gem_object *obj);<br  />>>    * @handle: userspace handle<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * A pointer to the object named by the handle if such exists on <br  />>> @filp, NULL<br  />>>    * otherwise. This object is only valid whilst under the RCU read <br  />>> lock, and<br  />>>    * note carefully the object may be in the process of being destroyed.<br  />>> diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c <br  />>> b/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c<br  />>> index 93bc1cc1ee7e..0ffba50981e3 100644<br  />>> --- a/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c<br  />>> +++ b/drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c<br  />>> @@ -418,7 +418,6 @@ int __i915_vma_pin_fence(struct i915_vma *vma)<br  />>>    * For an untiled surface, this removes any existing fence.<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * 0 on success, negative error code on failure.<br  />>>    */<br  />>>   int i915_vma_pin_fence(struct i915_vma *vma)<br  />>> diff --git a/drivers/gpu/drm/i915/i915_vma.h <br  />>> b/drivers/gpu/drm/i915/i915_vma.h<br  />>> index e356dfb883d3..6a6be8048aa8 100644<br  />>> --- a/drivers/gpu/drm/i915/i915_vma.h<br  />>> +++ b/drivers/gpu/drm/i915/i915_vma.h<br  />>> @@ -389,7 +389,6 @@ void i915_vma_unpin_iomap(struct i915_vma *vma);<br  />>>    * i915_vma_unpin_fence().<br  />>>    *<br  />>>    * Returns:<br  />>> - *<br  />>>    * True if the vma has a fence, false otherwise.<br  />>>    */<br  />>>   int __must_check i915_vma_pin_fence(struct i915_vma *vma);<br  />><br  /><br  />-- <br  />--<br  />Thomas Zimmermann<br  />Graphics Driver Developer<br  />SUSE Software Solutions Germany GmbH<br  />Frankenstrasse 146, 90461 Nuernberg, Germany<br  />GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman<br  />HRB 36809 (AG Nuernberg)<br  /><span class="xm_compose_origin_mail_container_sign" style="display: none;"></span></div></div>