The overlay code also manipulates sync object counters these days.
Instead of duplicating the same tracing code in two places, move
the code to the place where the sync counters are actually
manipulated.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
oflip->vblank_ref = false;
psb_fb_increase_read_ops_pending(oflip->old_mem_info);
+ psb_fb_flip_trace(oflip->old_mem_info, oflip->mem_info);
/* we must pipeline the register changes */
memcpy(&oflip->regs, &ovl->regs, sizeof ovl->regs);
#include "mdfld_dsi_dbi.h"
#include "mdfld_dsi_output.h"
#include "mdfld_output.h"
+#include "pvr_trace_cmd.h"
extern struct mutex gPVRSRVLock;
if (psKernelMemInfo && psKernelMemInfo->psKernelSyncInfo)
psKernelMemInfo->psKernelSyncInfo
->psSyncData->ui32ReadOpsComplete++;
+
+ pvr_trcmd_check_syn_completions(PVR_TRCMD_FLPCOMP);
+}
+
+void
+psb_fb_flip_trace(PVRSRV_KERNEL_MEM_INFO *old, PVRSRV_KERNEL_MEM_INFO *new)
+{
+ struct pvr_trcmd_flpreq *fltrace;
+
+ fltrace = pvr_trcmd_reserve(PVR_TRCMD_FLPREQ, task_tgid_nr(current),
+ current->comm, sizeof(*fltrace));
+ if (old && old->psKernelSyncInfo)
+ pvr_trcmd_set_syn(&fltrace->old_syn, old->psKernelSyncInfo);
+ else
+ pvr_trcmd_clear_syn(&fltrace->old_syn);
+ if (new && new->psKernelSyncInfo)
+ pvr_trcmd_set_syn(&fltrace->new_syn, new->psKernelSyncInfo);
+ else
+ pvr_trcmd_clear_syn(&fltrace->new_syn);
+ pvr_trcmd_commit(fltrace);
}
void psb_fb_increase_read_ops_pending(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo);
void psb_fb_increase_read_ops_completed(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo);
+void psb_fb_flip_trace(PVRSRV_KERNEL_MEM_INFO *old,
+ PVRSRV_KERNEL_MEM_INFO *new);
+
#endif
#include "psb_intel_reg.h"
#include "psb_page_flip.h"
#include "psb_pvr_glue.h"
-#include "pvr_trace_cmd.h"
#include "mdfld_output.h"
#include "mdfld_dsi_output.h"
drm_vblank_put(dev, pipe);
psb_fb_increase_read_ops_completed(crtc_flip->old_mem_info);
- pvr_trcmd_check_syn_completions(PVR_TRCMD_FLPCOMP);
PVRSRVScheduleDeviceCallbacks();
}
struct psb_fpriv *priv;
struct psb_fbdev *fbdev = NULL;
unsigned long flags;
- struct pvr_trcmd_flpreq *fltrace;
u32 tgid = psb_get_tgid();
int ret;
int pipe = to_psb_intel_crtc(crtc)->pipe;
new_pending_flip->old_mem_info = current_fb_mem_info;
psb_fb_increase_read_ops_pending(current_fb_mem_info);
-
- fltrace = pvr_trcmd_reserve(PVR_TRCMD_FLPREQ, task_tgid_nr(current),
- current->comm, sizeof(*fltrace));
- if (current_fb_mem_info && current_fb_mem_info->psKernelSyncInfo)
- pvr_trcmd_set_syn(&fltrace->old_syn,
- current_fb_mem_info->psKernelSyncInfo);
- else
- pvr_trcmd_clear_syn(&fltrace->old_syn);
- pvr_trcmd_set_syn(&fltrace->new_syn, new_fb_mem_info->psKernelSyncInfo);
- pvr_trcmd_commit(fltrace);
+ psb_fb_flip_trace(current_fb_mem_info, psbfb->pvrBO);
new_pending_flip->tgid = tgid;