10035d21cSmiao chen - Sun Microsystems - Beijing China /*
20035d21cSmiao chen - Sun Microsystems - Beijing China *
30035d21cSmiao chen - Sun Microsystems - Beijing China * Copyright(c) 2006-2007 Tungsten Graphics, Inc., Cedar Park, TX., USA
40035d21cSmiao chen - Sun Microsystems - Beijing China * Copyright (c) 2009, Intel Corporation.
50035d21cSmiao chen - Sun Microsystems - Beijing China * All Rights Reserved.
60035d21cSmiao chen - Sun Microsystems - Beijing China *
70035d21cSmiao chen - Sun Microsystems - Beijing China * Permission is hereby granted, free of charge, to any person obtaining a
80035d21cSmiao chen - Sun Microsystems - Beijing China * copy of this software and associated documentation files(the
90035d21cSmiao chen - Sun Microsystems - Beijing China * "Software"), to deal in the Software without restriction, including
100035d21cSmiao chen - Sun Microsystems - Beijing China * without limitation the rights to use, copy, modify, merge, publish,
110035d21cSmiao chen - Sun Microsystems - Beijing China * distribute, sub license, and/or sell copies of the Software, and to
120035d21cSmiao chen - Sun Microsystems - Beijing China * permit persons to whom the Software is furnished to do so, subject to
130035d21cSmiao chen - Sun Microsystems - Beijing China * the following conditions:
140035d21cSmiao chen - Sun Microsystems - Beijing China *
150035d21cSmiao chen - Sun Microsystems - Beijing China * The above copyright notice and this permission notice(including the
160035d21cSmiao chen - Sun Microsystems - Beijing China * next paragraph) shall be included in all copies or substantial portions
170035d21cSmiao chen - Sun Microsystems - Beijing China * of the Software.
180035d21cSmiao chen - Sun Microsystems - Beijing China *
190035d21cSmiao chen - Sun Microsystems - Beijing China * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
200035d21cSmiao chen - Sun Microsystems - Beijing China * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
210035d21cSmiao chen - Sun Microsystems - Beijing China * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
220035d21cSmiao chen - Sun Microsystems - Beijing China * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
230035d21cSmiao chen - Sun Microsystems - Beijing China * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
240035d21cSmiao chen - Sun Microsystems - Beijing China * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
250035d21cSmiao chen - Sun Microsystems - Beijing China * USE OR OTHER DEALINGS IN THE SOFTWARE.
260035d21cSmiao chen - Sun Microsystems - Beijing China *
270035d21cSmiao chen - Sun Microsystems - Beijing China */
280035d21cSmiao chen - Sun Microsystems - Beijing China /*
290035d21cSmiao chen - Sun Microsystems - Beijing China * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com>
300035d21cSmiao chen - Sun Microsystems - Beijing China */
310035d21cSmiao chen - Sun Microsystems - Beijing China
320035d21cSmiao chen - Sun Microsystems - Beijing China /*
33*7417cfdeSKuriakose Kuruvilla * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
340035d21cSmiao chen - Sun Microsystems - Beijing China */
350035d21cSmiao chen - Sun Microsystems - Beijing China
360035d21cSmiao chen - Sun Microsystems - Beijing China #include <sys/x86_archext.h>
370035d21cSmiao chen - Sun Microsystems - Beijing China #include <vm/seg_kmem.h>
380035d21cSmiao chen - Sun Microsystems - Beijing China #include "drmP.h"
390035d21cSmiao chen - Sun Microsystems - Beijing China
400035d21cSmiao chen - Sun Microsystems - Beijing China extern void clflush_insn(caddr_t addr);
410035d21cSmiao chen - Sun Microsystems - Beijing China extern void mfence_insn(void);
420035d21cSmiao chen - Sun Microsystems - Beijing China
430035d21cSmiao chen - Sun Microsystems - Beijing China static void
drm_clflush_page(caddr_t page)440035d21cSmiao chen - Sun Microsystems - Beijing China drm_clflush_page(caddr_t page)
450035d21cSmiao chen - Sun Microsystems - Beijing China {
460035d21cSmiao chen - Sun Microsystems - Beijing China unsigned int i;
470035d21cSmiao chen - Sun Microsystems - Beijing China
480035d21cSmiao chen - Sun Microsystems - Beijing China if (page == NULL)
490035d21cSmiao chen - Sun Microsystems - Beijing China return;
500035d21cSmiao chen - Sun Microsystems - Beijing China
510035d21cSmiao chen - Sun Microsystems - Beijing China for (i = 0; i < PAGE_SIZE; i += x86_clflush_size)
520035d21cSmiao chen - Sun Microsystems - Beijing China clflush_insn(page + i);
530035d21cSmiao chen - Sun Microsystems - Beijing China mfence_insn();
540035d21cSmiao chen - Sun Microsystems - Beijing China }
550035d21cSmiao chen - Sun Microsystems - Beijing China
560035d21cSmiao chen - Sun Microsystems - Beijing China void
drm_clflush_pages(caddr_t * pages,unsigned long num_pages)570035d21cSmiao chen - Sun Microsystems - Beijing China drm_clflush_pages(caddr_t *pages, unsigned long num_pages)
580035d21cSmiao chen - Sun Microsystems - Beijing China {
590035d21cSmiao chen - Sun Microsystems - Beijing China
60*7417cfdeSKuriakose Kuruvilla if (is_x86_feature(x86_featureset, X86FSET_CLFSH)) {
610035d21cSmiao chen - Sun Microsystems - Beijing China unsigned long i;
620035d21cSmiao chen - Sun Microsystems - Beijing China
630035d21cSmiao chen - Sun Microsystems - Beijing China for (i = 0; i < num_pages; i++)
640035d21cSmiao chen - Sun Microsystems - Beijing China drm_clflush_page(pages[i]);
650035d21cSmiao chen - Sun Microsystems - Beijing China }
660035d21cSmiao chen - Sun Microsystems - Beijing China }
67