1. 08 9月, 2017 1 次提交
    • M
      drm/atomic: Fix freeing connector/plane state too early by tracking commits, v3. · 21a01abb
      Maarten Lankhorst 提交于
      Currently we neatly track the crtc state, but forget to look at
      plane/connector state.
      
      When doing a nonblocking modeset, immediately followed by a setprop
      before the modeset completes, the setprop will see the modesets new
      state as the old state and free it.
      
      This has to be solved by waiting for hw_done on the connector, even
      if it's not assigned to a crtc. When a connector is unbound we take
      the last crtc commit, and when it stays unbound we create a new
      fake crtc commit for that gets signaled on hw_done for all the
      planes/connectors.
      
      We wait for it the same way as we do for crtc's, which will make
      sure we never run into a use-after-free situation.
      
      Changes since v1:
      - Only create a single disable commit. (danvet)
      - Fix leak in intel_legacy_cursor_update.
      Changes since v2:
      - Make reference counting in drm_atomic_helper_setup_commit
        more obvious. (pinchartl)
      - Call cleanup_done for fake commit. (danvet)
      - Add comments to drm_atomic_helper_setup_commit. (danvet, pinchartl)
      - Add comment to drm_atomic_helper_swap_state. (pinchartl)
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Testcase: kms_atomic_transition.plane-use-after-nonblocking-unbind*
      Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20170904104838.23822-6-maarten.lankhorst@linux.intel.comReviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      21a01abb
  2. 08 8月, 2017 1 次提交
    • D
      drm: Handle properties in the core for atomic drivers · 144a7999
      Daniel Vetter 提交于
      The reason behind the original indirection through the helper
      functions was to allow existing drivers to overwrite how they handle
      properties. For example when a vendor-specific userspace had
      expectations that didn't match atomic. That seemed likely, since
      atomic is standardizing a _lot_ more of the behaviour of a kms driver.
      
      But 20 drivers later there's no such need at all. Worse, this forces
      all drivers to hook up the default behaviour, breaking userspace if
      they forget to do that. And it forces us to export a bunch of core
      function just for those helpers.
      
      And finally, these helpers are the last places using
      drm_atomic_legacy_backoff() and the implicit acquire_ctx.
      
      This patch here just implements the new behaviour and updates the
      docs. Follow-up patches will garbage-collect all the dead code.
      
      v2: Fixup docs even better!
      
      v3: Make it actually work ...
      
      v4: Drop the uses_atomic_modeset() checks from the previous patch
      again, since they're now moved up in the callchain.
      
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Reviewed-by: Archit Taneja <architt@codeaurora.org> (v3)
      Reviewed-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20170725120204.2107-1-daniel.vetter@ffwll.ch
      144a7999
  3. 15 7月, 2017 3 次提交
    • S
      drm/edid: parse ycbcr 420 deep color information · e6a9a2c3
      Shashank Sharma 提交于
      CEA-861-F spec adds ycbcr420 deep color support information
      in hf-vsdb block. This patch extends the existing hf-vsdb parsing
      function by adding parsing of ycbcr420 deep color support from the
      EDID and adding it into display information stored.
      
      V2: Rebase
      V3: Rebase
      V4: Moved definition of y420_dc_modes into this patch, where its used
          (Ville)
      V5: Optimize function, if(conditions) not reqd (Ville)
      V6: Rebase
      V7: Rebase
      
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Jose Abreu <joabreu@synopsys.com>
      Signed-off-by: NShashank Sharma <shashank.sharma@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1499960000-9232-8-git-send-email-shashank.sharma@intel.com
      [vsyrjala: Fix sparse indentation warn]
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      e6a9a2c3
    • S
      drm/edid: parse YCBCR420 videomodes from EDID · 832d4f2f
      Shashank Sharma 提交于
      HDMI 2.0 spec adds support for YCBCR420 sub-sampled output.
      CEA-861-F adds two new blocks in EDID's CEA extension blocks,
      to provide information about sink's YCBCR420 output capabilities.
      
      These blocks are:
      
      - YCBCR420vdb(YCBCR 420 video data block):
      This block contains VICs of video modes, which can be sopported only
      in YCBCR420 output mode (Not in RGB/YCBCR444/422. Its like a normal
      SVD block, valid for YCBCR420 modes only.
      
      - YCBCR420cmdb(YCBCR 420 capability map data block):
      This block gives information about video modes which can support
      YCBCR420 output mode also (along with RGB,YCBCR444/422 etc) This
      block contains a bitmap index of normal svd videomodes, which can
      support YCBCR420 output too.
      So if bit 0 from first vcb byte is set, first video mode in the svd
      list can support YCBCR420 output too. Bit 1 means second video mode
      from svd list can support YCBCR420 output too, and so on.
      
      This patch adds two bitmaps in display's hdmi_info structure, one each
      for VCB and VDB modes. If the source is HDMI 2.0 capable, this patch
      adds:
      - VDB modes (YCBCR 420 only modes) in connector's mode list, also makes
        an entry in the vdb_bitmap per vic.
      - VCB modes (YCBCR 420 also modes) only entry in the vcb_bitmap.
      
      Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
      Cc: Jose Abreu <joabreu@synopsys.com>
      Cc: Emil Velikov <emil.l.velikov@gmail.com>
      
      V2: Addressed
          Review comments from Emil:
          - Use 1ULL<<i instead of 1<<i to make sure the output is 64bit.
          - Use the suggested method for updating dbmap.
          - Add documentation for YCBCR420_vcb_map to fix kbuild warning.
      
          Review comments from Ville:
          - Do not expose the YCBCR420 flags in uabi layer, keep it internal.
          - Save a map of YCBCR420 modes for future reference.
          - Check db length before trying to parse extended tag.
          - Add a warning if there are > 64 modes in capability map block.
          - Use y420cmdb in function names and macros while dealing with vcb
            to be aligned with spec.
          - Move the display information parsing block ahead of mode parsing
            blocks.
      
      V3: Addressed design/review comments from Ville
          - Do not add flags in video modes, else we have to expose them to user
          - There should not be a UABI change, and kernel should detect the
            choice of the output based on type of mode, and the bitmaps.
          - Use standard bitops from kernel bitmap header, instead of calculating
            bit positions manually.
      
      V4: Addressed review comments from Ville:
          - s/ycbcr_420_vdb/y420vdb
          - s/ycbcr_420_vcb/y420cmdb
          - Be less verbose on description of do_y420vdb_modes
          - Move newmode variable in the loop scope.
          - Use svd_to_vic() to get a VIC, instead of 0x7f
          - Remove bitmap description for CMDB modes & VDB modes
          - Dont add connector->ycbcr_420_allowed check for cmdb modes
          - Remove 'len' variable, in is_y420cmdb function, which is used
            only once
          - Add length check in is_y420vdb function
          - Remove unnecessary if (!db) check in function parse_y420cmdb_bitmap
          - Do not add print about YCBCR 420 modes
          - Fix indentation in few places
          - Move ycbcr420_dc_modes in next patch, where its used
          - Add a separate patch for movement of drm_add_display_info()
      
      V5: Addressed review comments from Ville:
          - Add the patch which cleans up the current EXTENDED_TAG usage
          - Make y420_cmdb_map u64
          - Do not block ycbcr420 modes while parsing the EDID, rather
            add a separate helper function to prune ycbcr420-only modes from
            connector's probed modes.
      
      V6: Rebase
      V7: Move this patch after the 420_only validation patch (Ville)
      V8: Addressed review comments from Ville
          - use cea_vic_valid check before adding cmdb/vdb modes
          - add check for i < 64 while adding cmdb modes
          - use 1ULL while checking bitmap
      Signed-off-by: NShashank Sharma <shashank.sharma@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1500028426-14883-1-git-send-email-shashank.sharma@intel.com
      [vsyrjala: Fix checkpatch complaints and indentation]
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      832d4f2f
    • S
      drm: add helper to validate YCBCR420 modes · d8523153
      Shashank Sharma 提交于
      YCBCR420 modes are supported only on HDMI 2.0 capable sources.
      This patch adds:
      - A drm helper to validate YCBCR420-only mode on a particular
        connector. This function will help pruning the YCBCR420-only
        modes from the connector's modelist.
      - A bool variable (ycbcr_420_allowed) in the drm connector structure.
        While handling the EDID from HDMI 2.0 sinks, its important to know
        if the source is capable of handling YCBCR420 output, so that no
        YCBCR 420 modes will be listed for sources which can't handle it.
        A driver should set this variable if it wants to see YCBCR420 modes
        in the modedb.
      
      V5: Introduced the patch in series.
      V6: Squashed two patches (validate YCBCR420 and add YCBCR420
      	   identifier)
      V7: Addressed review comments from Vile:
          - Move this patch before we add 420 modes from EDID.
          - No need for drm_valid_cea_vic() check, function back to non-static.
          - Update MODE_STATUS with NO_420 condition.
          - Introduce y420_vdb_modes variable in this patch
      
      Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
      Signed-off-by: NShashank Sharma <shashank.sharma@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1499960000-9232-6-git-send-email-shashank.sharma@intel.com
      [vsyrjala: Drop the now bogus EXPORT_SYMBOL(drm_valid_cea_vic)]
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      d8523153
  4. 15 6月, 2017 1 次提交
  5. 26 5月, 2017 1 次提交
  6. 18 5月, 2017 1 次提交
  7. 08 5月, 2017 2 次提交
  8. 07 4月, 2017 1 次提交
  9. 04 4月, 2017 1 次提交
  10. 29 3月, 2017 1 次提交
  11. 28 3月, 2017 1 次提交
  12. 21 3月, 2017 2 次提交
    • S
      drm/edid: detect SCDC support in HF-VSDB · 62c58af3
      Shashank Sharma 提交于
      This patch does following:
      - Adds a new structure (drm_hdmi_info) in drm_display_info.
        This structure will be used to save and indicate if sink
        supports advanced HDMI 2.0 features
      - Adds another structure drm_scdc within drm_hdmi_info, to
        reflect scdc support and capabilities in connected HDMI 2.0 sink.
      - Checks the HF-VSDB block for presence of SCDC, and marks it
        in scdc structure
      - If SCDC is present, checks if sink is capable of generating
        SCDC read request, and marks it in scdc structure.
      
      V2: Addressed review comments
        Thierry:
        - Fix typos in commit message and make abbreviation consistent
          across the commit message.
        - Change structure object name from hdmi_info -> hdmi
        - Fix typos and abbreviations in description of structure drm_hdmi_info
          end the description with a full stop.
        - Create a structure drm_scdc, and keep all information related to SCDC
          register set (supported, read request supported) etc in it.
      
        Ville:
        - Change rr -> read_request
        - Call drm_detect_scrambling function drm_parse_hf_vsdb so that all
          of HF-VSDB parsing can be kept in same function, in incremental
          patches.
      
      V3: Rebase.
      V4: Rebase.
      V5: Rebase.
      V6: Addressed review comments from Ville
        - Add clock rate calculations for 1/10 and 1/40 ratios
        - Remove leftovers from old patchset
      V7: Added R-B from Jose.
      V8: Rebase.
      V9: Rebase.
      V10: Rebase.
      Signed-off-by: NShashank Sharma <shashank.sharma@intel.com>
      Reviewed-by: NThierry Reding <treding@nvidia.com>
      Reviewed-by: NJose Abreu <joabreu@synopsys.com>
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1489404244-16608-5-git-send-email-shashank.sharma@intel.com
      62c58af3
    • S
      drm/edid: detect SCDC support in HF-VSDB · afa1c763
      Shashank Sharma 提交于
      This patch does following:
      - Adds a new structure (drm_hdmi_info) in drm_display_info.
        This structure will be used to save and indicate if sink
        supports advanced HDMI 2.0 features
      - Adds another structure drm_scdc within drm_hdmi_info, to
        reflect scdc support and capabilities in connected HDMI 2.0 sink.
      - Checks the HF-VSDB block for presence of SCDC, and marks it
        in scdc structure
      - If SCDC is present, checks if sink is capable of generating
        SCDC read request, and marks it in scdc structure.
      
      V2: Addressed review comments
       Thierry:
       - Fix typos in commit message and make abbreviation consistent
         across the commit message.
       - Change structure object name from hdmi_info -> hdmi
       - Fix typos and abbreviations in description of structure drm_hdmi_info
         end the description with a full stop.
       - Create a structure drm_scdc, and keep all information related to SCDC
         register set (supported, read request supported) etc in it.
      
      Ville:
       - Change rr -> read_request
       - Call drm_detect_scrambling function drm_parse_hf_vsdb so that all
         of HF-VSDB parsing can be kept in same function, in incremental
         patches.
      
      V3: Rebase.
      V4: Rebase.
      V5: Rebase.
      V6: Rebase.
      V7: Added R-B from Jose.
      V8: Rebase.
      V9: Rebase.
      V10: Rebase.
      Signed-off-by: NShashank Sharma <shashank.sharma@intel.com>
      Reviewed-by: NThierry Reding <treding@nvidia.com>
      Reviewed-by: NJose Abreu <joabreu@synopsys.com>
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/1489404244-16608-4-git-send-email-shashank.sharma@intel.com
      afa1c763
  13. 01 3月, 2017 1 次提交
  14. 28 2月, 2017 2 次提交
  15. 27 2月, 2017 1 次提交
    • M
      drm: Add a new connector atomic property for link status · 40ee6fbe
      Manasi Navare 提交于
      At the time userspace does setcrtc, we've already promised the mode
      would work. The promise is based on the theoretical capabilities of
      the link, but it's possible we can't reach this in practice. The DP
      spec describes how the link should be reduced, but we can't reduce
      the link below the requirements of the mode. Black screen follows.
      
      One idea would be to have setcrtc return a failure. However, it
      already should not fail as the atomic checks have passed. It would
      also conflict with the idea of making setcrtc asynchronous in the
      future, returning before the actual mode setting and link training.
      
      Another idea is to train the link "upfront" at hotplug time, before
      pruning the mode list, so that we can do the pruning based on
      practical not theoretical capabilities. However, the changes for link
      training are pretty drastic, all for the sake of error handling and
      DP compliance, when the most common happy day scenario is the current
      approach of link training at mode setting time, using the optimal
      parameters for the mode. It is also not certain all hardware could do
      this without the pipe on; not even all our hardware can do this. Some
      of this can be solved, but not trivially.
      
      Both of the above ideas also fail to address link degradation *during*
      operation.
      
      The solution is to add a new "link-status" connector property in order
      to address link training failure in a way that:
      a) changes the current happy day scenario as little as possible, to
      avoid regressions, b) can be implemented the same way by all drm
      drivers, c) is still opt-in for the drivers and userspace, and opting
      out doesn't regress the user experience, d) doesn't prevent drivers
      from implementing better or alternate approaches, possibly without
      userspace involvement. And, of course, handles all the issues presented.
      In the usual happy day scenario, this is always "good". If something
      fails during or after a mode set, the kernel driver can set the link
      status to "bad" and issue a hotplug uevent for userspace to have it
      re-check the valid modes through GET_CONNECTOR IOCTL, and try modeset
      again. If the theoretical capabilities of the link can't be reached,
      the mode list is trimmed based on that.
      
      v7 by Jani:
      * Rebase, simplify set property while at it, checkpatch fix
      v6:
      * Fix a typo in kernel doc (Sean Paul)
      v5:
      * Clarify doc for silent rejection of atomic properties by driver (Daniel Vetter)
      v4:
      * Add comments in kernel-doc format (Daniel Vetter)
      * Update the kernel-doc for link-status (Sean Paul)
      v3:
      * Fixed a build error (Jani Saarinen)
      v2:
      * Removed connector->link_status (Daniel Vetter)
      * Set connector->state->link_status in drm_mode_connector_set_link_status_property
      (Daniel Vetter)
      * Set the connector_changed flag to true if connector->state->link_status changed.
      * Reset link_status to GOOD in update_output_state (Daniel Vetter)
      * Never allow userspace to set link status from Good To Bad (Daniel Vetter)
      Reviewed-by: NSean Paul <seanpaul@chromium.org>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Reviewed-by: NJani Nikula <jani.nikula@intel.com>
      Acked-by: NTony Cheng <tony.cheng@amd.com>
      Acked-by: NHarry Wentland <harry.wentland@amd.com>
      Cc: Jani Nikula <jani.nikula@linux.intel.com>
      Cc: Daniel Vetter <daniel.vetter@intel.com>
      Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: Sean Paul <seanpaul@chromium.org>
      Signed-off-by: NManasi Navare <manasi.d.navare@intel.com>
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      Acked-by: Eric Anholt <eric@anholt.net> (for the -modesetting patch)
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: http://patchwork.freedesktop.org/patch/msgid/0182487051aa9f1594820e35a4853de2f8747b4e.1481883920.git.jani.nikula@intel.com
      40ee6fbe
  16. 30 1月, 2017 1 次提交
  17. 25 1月, 2017 1 次提交
  18. 30 12月, 2016 2 次提交
  19. 18 12月, 2016 4 次提交
    • P
      drm: Fix spelling of clock in drm_connector.h · 188f7882
      Peter Meerwald-Stadler 提交于
      Signed-off-by: NPeter Meerwald-Stadler <pmeerw@pmeerw.net>
      Cc: Daniel Vetter <daniel.vetter@intel.com>
      Cc: Jani Nikula <jani.nikula@linux.intel.com>
      Cc: trivial@kernel.org
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: http://patchwork.freedesktop.org/patch/msgid/1481894663-4570-1-git-send-email-pmeerw@pmeerw.net
      188f7882
    • D
      drm: Tighten locking in drm_mode_getconnector · 91eefc05
      Daniel Vetter 提交于
      - Modeset state needs mode_config->connection mutex, that covers
        figuring out the encoder, and reading properties (since in the
        atomic case those need to look at connector->state).
      
      - Don't hold any locks for stuff that's invariant (i.e. possible
        connectors).
      
      - Same for connector lookup and unref, those don't need any locks.
      
      - And finally the probe stuff is only protected by mode_config->mutex.
      
      While at it updated the kerneldoc for these fields in drm_connector
      and add docs explaining what's protected by which locks.
      Reviewed-by: NSean Paul <seanpaul@chromium.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161213230814.19598-10-daniel.vetter@ffwll.ch
      91eefc05
    • D
      drm: prevent double-(un)registration for connectors · e73ab00e
      Daniel Vetter 提交于
      If we're unlucky then the registration from a hotplugged connector
      might race with the final registration step on driver load. And since
      MST topology discover is asynchronous that's even somewhat likely.
      
      v2: Also update the kerneldoc for @registered!
      
      v3: Review from Chris:
      - Improve kerneldoc for late_register/early_unregister callbacks.
      - Use mutex_destroy.
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NSean Paul <seanpaul@chromium.org>
      Reported-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161218133545.2106-1-daniel.vetter@ffwll.ch
      e73ab00e
    • D
      drm: locking&new iterators for connector_list · 613051da
      Daniel Vetter 提交于
      The requirements for connector_list locking are a bit tricky:
      - We need to be able to jump over zombie conectors (i.e. with refcount
        == 0, but not yet removed from the list). If instead we require that
        there's no zombies on the list then the final kref_put must happen
        under the list protection lock, which means that locking context
        leaks all over the place. Not pretty - better to deal with zombies
        and wrap the locking just around the list_del in the destructor.
      
      - When we walk the list we must _not_ hold the connector list lock. We
        walk the connector list at an absolutely massive amounts of places,
        if all those places can't ever call drm_connector_unreference the
        code would get unecessarily complicated.
      
      - connector_list needs it own lock, again too many places that walk it
        that we could reuse e.g. mode_config.mutex without resulting in
        inversions.
      
      - Lots of code uses these loops to look-up a connector, i.e. they want
        to be able to call drm_connector_reference. But on the other hand we
        want connectors to stay on that list until they're dead (i.e.
        connector_list can't hold a full reference), which means despite the
        "can't hold lock for the loop body" rule we need to make sure a
        connector doesn't suddenly become a zombie.
      
      At first Dave&I discussed various horror-show approaches using srcu,
      but turns out it's fairly easy:
      
      - For the loop body we always hold an additional reference to the
        current connector. That means it can't zombify, and it also means
        it'll stay on the list, which means we can use it as our iterator to
        find the next connector.
      
      - When we try to find the next connector we only have to jump over
        zombies. To make sure we don't chase bad pointers that entire loop
        is protected with the new connect_list_lock spinlock. And because we
        know that we're starting out with a non-zombie (need to drop our
        reference for the old connector only after we have our new one),
        we're guranteed to still be on the connector_list and either find
        the next non-zombie or complete the iteration.
      
      - Only downside is that we need to make sure that the temporary
        reference for the loop body doesn't leak. iter_get/put() functions +
        lockdep make sure that's the case.
      
      - To avoid a flag day the new iterator macro has an _iter postfix. We
        can rename it back once all the users of the unsafe version are gone
        (there's about 100 list walkers for the connector_list).
      
      For now this patch only converts all the list walking in the core,
      leaving helpers and drivers for later patches. The nice thing is that
      we can now finally remove 2 FIXME comments from the
      register/unregister functions.
      
      v2:
      - use irqsafe spinlocks, so that we can use this in drm_state_dump
        too.
      - nuke drm_modeset_lock_all from drm_connector_init, now entirely
        cargo-culted nonsense.
      
      v3:
      - do {} while (!kref_get_unless_zero), makes for a tidier loop (Dave).
      - pretty kerneldoc
      - add EXPORT_SYMBOL, helpers&drivers are supposed to use this.
      
      v4: Change lockdep annotations to only check whether we release the
      iter fake lock again (i.e. make sure that iter_put is called), but
      not check any locking dependecies itself. That seams to require a
      recursive read lock in trylock mode.
      
      Cc: Dave Airlie <airlied@gmail.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NSean Paul <seanpaul@chromium.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161213230814.19598-6-daniel.vetter@ffwll.ch
      613051da
  20. 10 12月, 2016 1 次提交
  21. 01 12月, 2016 1 次提交
  22. 15 11月, 2016 1 次提交
  23. 09 11月, 2016 1 次提交
  24. 10 10月, 2016 1 次提交
  25. 04 10月, 2016 2 次提交
  26. 19 9月, 2016 2 次提交
  27. 29 8月, 2016 1 次提交
  28. 17 8月, 2016 2 次提交