18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file compat.c
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * This file is intended to be up-to-date with the last linux version and
48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * provide work-arounds for missing features in previous kernel version
58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors
78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING
88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon
108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie
118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_dcache.h"
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <linux/ioport.h>
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifdef NEED_2_2_DENTRIES
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* note - assumes you only test for NULL, and not
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * actually care about the return value */
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid * compat_request_region(unsigned long start, unsigned long n, char const * name)
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	if (check_region(start, n) != 0)
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		return NULL;
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	request_region(start, n, name);
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd        return (void *)1;
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddint wind_dentries_2_2(struct dentry * dentry)
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	struct dentry * root = current->fs->root;
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	if (dentry->d_parent != dentry && list_empty(&dentry->d_hash))
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		return 0;
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	for (;;) {
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		struct dentry * parent;
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		if (dentry == root)
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			break;
408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		dentry = dentry->d_covers;
428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		parent = dentry->d_parent;
438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		if (dentry == parent)
458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd			break;
468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		push_dname(&dentry->d_name);
488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		dentry = parent;
508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	}
518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return 1;
538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* called with note_lock held */
568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodduint do_path_hash_2_2(struct dentry * dentry)
578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/* BKL is already taken */
598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return do_hash(dentry, 0, 0, 0);
618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* NEED_2_2_DENTRIES */
64