/* head > tail --> copy head <-> top */
        if (gma_head > gma_tail) {
                ret = copy_gma_to_hva(vgpu, vgpu->gtt.ggtt_mm,
 -                              gma_head, gma_top,
 -                              workload->shadow_ring_buffer_va);
 +                                    gma_head, gma_top, cs);
-               if (ret < 0) {
-                       gvt_err("fail to copy guest ring buffer\n");
+               if (ret) {
+                       gvt_vgpu_err("fail to copy guest ring buffer\n");
                        return ret;
                }
 -              copy_len = gma_top - gma_head;
 +              cs += ret / sizeof(u32);
                gma_head = workload->rb_start;
        }
  
        /* copy head or start <-> tail */
 -      ret = copy_gma_to_hva(vgpu, vgpu->gtt.ggtt_mm,
 -                      gma_head, gma_tail,
 -                      workload->shadow_ring_buffer_va + copy_len);
 +      ret = copy_gma_to_hva(vgpu, vgpu->gtt.ggtt_mm, gma_head, gma_tail, cs);
-       if (ret < 0) {
-               gvt_err("fail to copy guest ring buffer\n");
+       if (ret) {
+               gvt_vgpu_err("fail to copy guest ring buffer\n");
                return ret;
        }
 -      ring->tail += workload->rb_len;
 -      intel_ring_advance(ring);
 +      cs += ret / sizeof(u32);
 +      intel_ring_advance(workload->req, cs);
        return 0;
  }
  
 
                return 0;
  
        vlv_c0_read(dev_priv, &now);
 -      if (now.cz_clock == 0)
 -              return 0;
  
 -      if (prev->cz_clock) {
 +      if (prev->ktime) {
                u64 time, c0;
 -              unsigned int mul;
 +              u32 render, media;
  
 -              mul = VLV_CZ_CLOCK_TO_MILLI_SEC * 100; /* scale to threshold% */
 -              if (I915_READ(VLV_COUNTER_CONTROL) & VLV_COUNT_RANGE_HIGH)
 -                      mul <<= 8;
 +              time = ktime_us_delta(now.ktime, prev->ktime);
+ 
 -              time = now.cz_clock - prev->cz_clock;
                time *= dev_priv->czclk_freq;
  
                /* Workload can be split between render + media,